}
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(