int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f);
-int pakfire_packager_add(struct pakfire_packager* packager, const char* path);
+int pakfire_packager_add(struct pakfire_packager* packager,
+ const char* sourcepath, const char* path);
#endif /* PAKFIRE_PACKAGER_H */
}
PAKFIRE_EXPORT int pakfire_packager_add(struct pakfire_packager* packager,
- const char* path) {
+ const char* sourcepath, const char* path) {
FILE* f = NULL;
// Check if path is set
- if (!path)
+ if (!sourcepath)
return EINVAL;
+ // Use basename if path isn't set
+ if (!path) {
+ path = strrchr(sourcepath, '/');
+ if (path)
+ path++;
+ }
+
// Payload has already been closed
if (!packager->payload)
return EINVAL;
if (!entry)
return ENOMEM;
+ // Set the source path
+ archive_entry_copy_sourcepath(entry, sourcepath);
+
// Set path in archive
- archive_entry_set_pathname(entry, path);
+ if (path)
+ archive_entry_set_pathname(entry, path);
// Read all attributes from file
int r = archive_read_disk_entry_from_file(packager->reader, entry, -1, NULL);
// Copy the data of regular files
if (archive_entry_filetype(entry) == AE_IFREG) {
- f = fopen(path, "r");
+ f = fopen(sourcepath, "r");
if (!f) {
- ERROR(packager->pakfire, "Could not open %s: %s\n", path, strerror(errno));
+ ERROR(packager->pakfire, "Could not open %s: %s\n", sourcepath, strerror(errno));
r = errno;
goto ERROR;
}
char* path = pakfire_path_join(TEST_SRC_PATH, "data/beep-1.3-2.ip3.x86_64.pfm");
ASSERT(path);
- r = pakfire_packager_add(packager, path);
+ r = pakfire_packager_add(packager, path, NULL);
ASSERT(r == 0);
// Write archive