#include <stdlib.h>
#include <time.h>
+// json-c
+#include <json.h>
+
// libarchive
#include <archive.h>
#include <archive_entry.h>
return r;
}
+int pakfire_archive_writer_create_file_from_json(
+ struct pakfire_archive_writer* self, const char* path, mode_t mode, struct json_object* json) {
+ const char* buffer = NULL;
+
+ // Serialize JSON to string
+ buffer = json_object_to_json_string_ext(json, 0);
+ if (!buffer) {
+ ERROR(self->ctx, "Failed to serialize JSON object: %m\n");
+ return -errno;
+ }
+
+ // Write it to the archive
+ return pakfire_archive_writer_create_file(self, path, mode, buffer, strlen(buffer));
+}
+
int pakfire_archive_writer_create_file_from_file(
struct pakfire_archive_writer* self, const char* path, mode_t mode, FILE* f) {
struct archive_entry* entry = NULL;
#include <stdio.h>
+// json-c
+#include <json.h>
+
#include <pakfire/filelist.h>
#include <pakfire/pakfire.h>
int pakfire_archive_writer_create_file(struct pakfire_archive_writer* self,
const char* path, mode_t mode, const char* payload, const size_t length);
+int pakfire_archive_writer_create_file_from_json(struct pakfire_archive_writer* self,
+ const char* path, mode_t mode, struct json_object* json);
int pakfire_archive_writer_create_file_from_file(
struct pakfire_archive_writer* self, const char* path, mode_t mode, FILE* f);
static int pakfire_packager_write_metadata(struct pakfire_packager* packager,
struct pakfire_archive_writer* writer) {
struct json_object* md = NULL;
- const char* s = NULL;
int r;
// Convert all package metadata to JSON
goto ERROR;
}
- // Serialize JSON to string
- s = json_object_to_json_string_ext(md, 0);
- if (!s) {
- r = -errno;
- goto ERROR;
- }
-
- DEBUG(packager->ctx, "Generated package metadata:\n%s\n", s);
-
// Write metadata
- r = pakfire_archive_writer_create_file(writer, ".PKGINFO", 0444, s, strlen(s));
+ r = pakfire_archive_writer_create_file_from_json(writer, ".PKGINFO", 0444, md);
if (r < 0) {
ERROR(packager->ctx, "Failed to write package metadata: %s\n", strerror(-r));
goto ERROR;