]> git.ipfire.org Git - pakfire.git/commitdiff
package: Refactor pakfire_package_set_filelist_from_string
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 5 Sep 2022 15:25:01 +0000 (15:25 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 5 Sep 2022 15:25:31 +0000 (15:25 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/package.c

index c99109acd327f007116fbe132ad10c11db6d1960..142ddd07c25ce02d02714827832c352f80404985 100644 (file)
@@ -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(