From 0687a01b53e495083e03aaa50bb223269575b11c Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Wed, 14 Jan 2015 10:54:59 +0100 Subject: [PATCH] driver_settings: don't strdup(NULL) * This is not allowed by strdup POSIX specs and GCC may use its builtin strdup which doesn't check for it. * also refactor parse_driver_settings_string to create the settings_handle using settings_new, to reduce code duplication. --- src/system/libroot/os/driver_settings.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/system/libroot/os/driver_settings.cpp b/src/system/libroot/os/driver_settings.cpp index 029e85096a..9a986ae3c4 100644 --- a/src/system/libroot/os/driver_settings.cpp +++ b/src/system/libroot/os/driver_settings.cpp @@ -820,21 +820,16 @@ load_driver_settings_file(int fd) void * parse_driver_settings_string(const char *settingsString) { + if (settingsString == NULL) + return NULL; + // we simply copy the whole string to use it as our internal buffer char *text = strdup(settingsString); - if (settingsString == NULL || text != NULL) { - settings_handle *handle - = (settings_handle*)malloc(sizeof(settings_handle)); - if (handle != NULL) { - handle->magic = SETTINGS_MAGIC; - handle->text = text; - - if (parse_settings(handle) == B_OK) - return handle; - - free(handle); - } - free(text); + if (text != NULL) { + settings_handle *handle = new_settings(text, NULL); + if (handle == NULL) + free(text); + return handle; } return NULL;