diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/database.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/database.c b/src/database.c index 10e9776..1b281f7 100644 --- a/src/database.c +++ b/src/database.c @@ -928,7 +928,7 @@ static int apk_db_write_fdb(struct apk_database *db, struct apk_ostream *os) struct apk_db_dir_instance *diri; struct apk_db_file *file; struct hlist_node *c1, *c2; - char buf[1024]; + char buf[1024+PATH_MAX]; apk_blob_t bbuf = APK_BLOB_BUF(buf); int r; @@ -972,6 +972,12 @@ static int apk_db_write_fdb(struct apk_database *db, struct apk_ostream *os) if (diri->acl != apk_default_acl_dir) apk_blob_push_db_acl(&bbuf, 'M', diri->acl); + bbuf = apk_blob_pushed(APK_BLOB_BUF(buf), bbuf); + if (APK_BLOB_IS_NULL(bbuf)) return -ENOBUFS; + r = apk_ostream_write(os, bbuf.ptr, bbuf.len); + if (r < 0) return r; + bbuf = APK_BLOB_BUF(buf); + hlist_for_each_entry(file, c2, &diri->owned_files, diri_files_list) { apk_blob_push_blob(&bbuf, APK_BLOB_STR("R:")); apk_blob_push_blob(&bbuf, APK_BLOB_PTR_LEN(file->name, file->namelen)); @@ -986,13 +992,12 @@ static int apk_db_write_fdb(struct apk_database *db, struct apk_ostream *os) apk_blob_push_blob(&bbuf, APK_BLOB_STR("\n")); } - r = apk_ostream_write(os, buf, bbuf.ptr - buf); + bbuf = apk_blob_pushed(APK_BLOB_BUF(buf), bbuf); + if (APK_BLOB_IS_NULL(bbuf)) return -ENOBUFS; + r = apk_ostream_write(os, bbuf.ptr, bbuf.len); if (r < 0) return r; bbuf = APK_BLOB_BUF(buf); } - r = apk_ostream_write(os, buf, bbuf.ptr - buf); - if (r < 0) return r; - bbuf = APK_BLOB_BUF(buf); } r = apk_ostream_write(os, "\n", 1); if (r < 0) return r; |