From: Michael Tremer Date: Mon, 5 Sep 2022 15:25:01 +0000 (+0000) Subject: package: Refactor pakfire_package_set_filelist_from_string X-Git-Tag: 0.9.28~325 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=731f1d42511829cc28e70e3dab9f627b1eb73b54;p=pakfire.git package: Refactor pakfire_package_set_filelist_from_string Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index c99109acd..142ddd07c 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -1392,33 +1392,29 @@ PAKFIRE_EXPORT int pakfire_package_set_filelist( } int pakfire_package_set_filelist_from_string(struct pakfire_package* pkg, const char* files) { - // Total length of the input string - size_t size = strlen(files); - - // Copy files to the stack to be able to modify it - char* buffer = alloca(size + 1); - - // Copy the content - memcpy(buffer, files, size); - - // Replace all line breaks with NUL - for (unsigned int i = 0; i < size; i++) { - if (buffer[i] == '\n') - buffer[i] = '\0'; - } + char* p = NULL; + int r = 0; - size_t p = 0; - while (p < size) { - const char* name = &buffer[p]; + // Copy files + char* buffer = strdup(files); + if (!buffer) + goto ERROR; - int r = pakfire_package_append_file(pkg, name); + // Walk through all files + char* path = strtok_r(buffer, "\n", &p); + while (path) { + r = pakfire_package_append_file(pkg, path); if (r) - return r; + goto ERROR; - p += strlen(name) + 1; + path = strtok_r(NULL, "\n", &p); } - return 0; +ERROR: + if (buffer) + free(buffer); + + return r; } static int _pakfire_package_add_json_dependencies(