return 0;
}
-static int archive_read_to_buffer(Pakfire pakfire, struct archive* a,
- struct archive_entry* entry, char** data, size_t* data_size) {
- *data = NULL;
- *data_size = 0;
-
- size_t required_size = archive_entry_size(entry);
- if (!required_size)
- return 0;
-
- // Allocate a block of the required size
- *data = malloc(required_size);
- if (!*data)
- return ENOMEM;
-
- ssize_t bytes_read = archive_read_data(a, *data, required_size);
- if (bytes_read < 0) {
- ERROR(pakfire, "Could not read from archive: %s\n", archive_error_string(a));
- free(*data);
- return 1;
- }
-
- *data_size = bytes_read;
-
- return 0;
-}
-
static int find_archive_entry(struct archive_entry** entry, struct archive* a, const char* filename) {
int r;
char format[10];
size_t size = sizeof(format);
- archive_read_to_buffer(archive->pakfire, a, e, (char**)&format, &size);
+ pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, (char**)&format, &size);
archive->format = atoi(format);
DEBUG(archive->pakfire, "Archive at %p format is %d\n",
char* data;
size_t data_size;
- int r = archive_read_to_buffer(archive->pakfire, a, e, &data, &data_size);
+ int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, &data, &data_size);
if (r)
return r;
char* data;
size_t data_size;
- int r = archive_read_to_buffer(archive->pakfire, a, e, &data, &data_size);
+ int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, &data, &data_size);
if (r) {
return 1;
}
char* data;
size_t data_size;
- int r = archive_read_to_buffer(archive->pakfire, a, e, &data, &data_size);
+ int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, &data, &data_size);
if (r)
return 1;
// Set the type
scriptlet->type = pakfire_scriptlet_type_from_filename(filename);
- int r = archive_read_to_buffer(archive->pakfire, a, e, &scriptlet->data, &scriptlet->size);
+ int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e,
+ &scriptlet->data, &scriptlet->size);
if (r)
return r;
goto out;
}
- r = archive_read_to_buffer(archive->pakfire, use_payload ? pa : a, entry,
+ r = pakfire_archive_copy_data_to_buffer(archive->pakfire, use_payload ? pa : a, entry,
data, data_size);
out:
char* data;
size_t data_size;
- int r = archive_read_to_buffer(archive->pakfire, a, e, &data, &data_size);
+ int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, &data, &data_size);
if (r)
return 1;
}
// Import filelist
- pakfire_package_set_filelist(pkg, archive->filelist);
+ if (archive->filelist)
+ pakfire_package_set_filelist(pkg, archive->filelist);
return pkg;
#include <unistd.h>
#include <archive.h>
+#include <archive_entry.h>
#include <json.h>
#include <uuid/uuid.h>
}
}
+int pakfire_archive_copy_data_to_buffer(Pakfire pakfire, struct archive* a,
+ struct archive_entry* entry, char** data, size_t* data_size) {
+ *data = NULL;
+ *data_size = 0;
+
+ size_t required_size = archive_entry_size(entry);
+ if (!required_size)
+ return 0;
+
+ // Allocate a block of the required size
+ *data = malloc(required_size);
+ if (!*data)
+ return ENOMEM;
+
+ ssize_t bytes_read = archive_read_data(a, *data, required_size);
+ if (bytes_read < 0) {
+ ERROR(pakfire, "Could not read from archive: %s\n", archive_error_string(a));
+ free(*data);
+ return 1;
+ }
+
+ *data_size = bytes_read;
+
+ return 0;
+}
+
// JSON Stuff
static struct json_object* pakfire_json_parse(Pakfire pakfire, FILE* f) {