salvage: preserve xattr backed metadata

This commit is contained in:
Mario Fetka
2026-05-31 10:32:09 +00:00
parent 2c089f5fe3
commit ce34e2df65
4 changed files with 140 additions and 1 deletions

View File

@@ -685,10 +685,42 @@ int nwsalvage_write_metadata(const char *metadata_path,
if (!failed && json_add_string(doc, object, "afp_entry_id",
entry->afp_entry_id ? entry->afp_entry_id : "") < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "afp_attributes",
entry->afp_attributes) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "resource_fork_size",
entry->resource_fork_size) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "netware_archive_flags",
entry->netware_archive_flags) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "netware_archive_date",
entry->netware_archive_date) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "netware_archive_time",
entry->netware_archive_time) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "netware_archiver_id",
entry->netware_archiver_id) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "netware_fileinfo_flags",
entry->netware_fileinfo_flags) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "netware_create_date",
entry->netware_create_date) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "netware_create_time",
entry->netware_create_time) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "netware_creator_id",
entry->netware_creator_id) < 0)
failed = 1;
if (!failed && json_add_uint64(doc, object, "netware_modifier_id",
entry->netware_modifier_id) < 0)
failed = 1;
if (!failed && !yyjson_mut_write_file(metadata_path, doc,
YYJSON_WRITE_PRETTY_TWO_SPACES |
YYJSON_WRITE_NEWLINE_AT_END,
@@ -805,11 +837,53 @@ int nwsalvage_read_metadata(const char *metadata_path,
entry->afp_entry_id,
sizeof(entry->afp_entry_id)) < 0)
failed = 1;
if (!failed && json_get_uint64(object, "afp_attributes", &value) < 0)
failed = 1;
else if (!failed)
entry->afp_attributes = (unsigned int)value;
if (!failed && json_get_uint64(object, "resource_fork_size", &value) < 0)
failed = 1;
else if (!failed)
entry->resource_fork_size = value;
if (!failed && json_get_uint64(object, "netware_archive_flags", &value) < 0)
failed = 1;
else if (!failed)
entry->netware_archive_flags = (unsigned int)value;
if (!failed && json_get_uint64(object, "netware_archive_date", &value) < 0)
failed = 1;
else if (!failed)
entry->netware_archive_date = (unsigned int)value;
if (!failed && json_get_uint64(object, "netware_archive_time", &value) < 0)
failed = 1;
else if (!failed)
entry->netware_archive_time = (unsigned int)value;
if (!failed && json_get_uint64(object, "netware_archiver_id", &value) < 0)
failed = 1;
else if (!failed)
entry->netware_archiver_id = (unsigned long)value;
if (!failed && json_get_uint64(object, "netware_fileinfo_flags", &value) < 0)
failed = 1;
else if (!failed)
entry->netware_fileinfo_flags = (unsigned int)value;
if (!failed && json_get_uint64(object, "netware_create_date", &value) < 0)
failed = 1;
else if (!failed)
entry->netware_create_date = (unsigned int)value;
if (!failed && json_get_uint64(object, "netware_create_time", &value) < 0)
failed = 1;
else if (!failed)
entry->netware_create_time = (unsigned int)value;
if (!failed && json_get_uint64(object, "netware_creator_id", &value) < 0)
failed = 1;
else if (!failed)
entry->netware_creator_id = (unsigned long)value;
if (!failed && json_get_uint64(object, "netware_modifier_id", &value) < 0)
failed = 1;
else if (!failed)
entry->netware_modifier_id = (unsigned long)value;
yyjson_doc_free(doc);
if (failed) {