From 2b3a46cc1bedc0f04e0e7a56d93a7d552eeb08d2 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Fri, 27 Mar 2026 14:11:20 -0400 Subject: [PATCH] kernel/debug: Use strchrnul and memchr in parsing. Slight efficiency improvement, and simplifies the code a bit too. Change-Id: I502409a9aee260c3d0ad1c9003567e46c03b241b Reviewed-on: https://review.haiku-os.org/c/haiku/+/10596 Reviewed-by: waddlesplash --- src/system/kernel/debug/safemode_settings.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/system/kernel/debug/safemode_settings.cpp b/src/system/kernel/debug/safemode_settings.cpp index c0a6ca6ebd..667f391deb 100644 --- a/src/system/kernel/debug/safemode_settings.cpp +++ b/src/system/kernel/debug/safemode_settings.cpp @@ -6,6 +6,7 @@ #include +#define _DEFAULT_SOURCE #include #include #include @@ -43,20 +44,21 @@ get_option_from_kernel_args(kernel_args* args, const char* settingsName, // Unfortunately we can't just use parse_driver_settings_string(), since // we might not have a working heap yet. So we do very limited parsing // ourselves. - const char* settingsEnd = settings + strlen(settings); int32 parameterLevel = 0; while (*settings != '\0') { // find end of line - const char* lineEnd = strchr(settings, '\n'); + const char* lineEnd = strchrnul(settings, '\n'); const char* nextLine; - if (lineEnd != NULL) + if (*lineEnd != '\0') nextLine = lineEnd + 1; else - nextLine = lineEnd = settingsEnd; + nextLine = lineEnd; // ignore any trailing comments - lineEnd = std::find(settings, lineEnd, '#'); + const char* commentStart = (const char*)memchr(settings, '#', lineEnd - settings); + if (commentStart != NULL) + lineEnd = commentStart; const char* nameStart = NULL; const char* nameEnd = NULL;