aboutsummaryrefslogtreecommitdiff
path: root/bin/gensquashfs
diff options
context:
space:
mode:
Diffstat (limited to 'bin/gensquashfs')
-rw-r--r--bin/gensquashfs/src/filemap_xattr.c32
-rw-r--r--bin/gensquashfs/src/mkfs.h9
-rw-r--r--bin/gensquashfs/test/filemap_xattr.c2
3 files changed, 17 insertions, 26 deletions
diff --git a/bin/gensquashfs/src/filemap_xattr.c b/bin/gensquashfs/src/filemap_xattr.c
index 508e75a..4adc24f 100644
--- a/bin/gensquashfs/src/filemap_xattr.c
+++ b/bin/gensquashfs/src/filemap_xattr.c
@@ -128,25 +128,29 @@ static int parse_xattr(const char *filename, size_t line_num, char *key_start,
{
size_t len;
struct XattrMapPattern *current_pattern = map->patterns;
- struct XattrMapEntry *current_entry;
+ sqfs_xattr_t *current_entry;
+ sqfs_u8 *value;
if (current_pattern == NULL) {
print_error(filename, line_num, "no file specified yet");
return -1;
}
- current_entry = calloc(1, sizeof(struct XattrMapEntry));
+ len = strlen(value_start);
+ value = decode(filename, line_num, value_start, &len);
+ if (value == NULL)
+ return -1;
+
+ current_entry = sqfs_xattr_create(key_start, value, len);
+ free(value);
if (current_entry == NULL) {
+ print_error(filename, line_num, "out-of-memory");
return -1;
}
+
current_entry->next = current_pattern->entries;
current_pattern->entries = current_entry;
- current_entry->key = strdup(key_start);
- len = strlen(value_start);
- current_entry->value = decode(filename, line_num, value_start, &len);
- current_entry->value_len = len;
-
return 0;
}
@@ -206,13 +210,8 @@ xattr_close_map_file(void *xattr_map) {
while (map->patterns != NULL) {
struct XattrMapPattern *file = map->patterns;
map->patterns = file->next;
- while (file->entries != NULL) {
- struct XattrMapEntry *entry = file->entries;
- file->entries = entry->next;
- free(entry->key);
- free(entry->value);
- free(entry);
- }
+
+ sqfs_xattr_list_free(file->entries);
free(file->path);
free(file);
}
@@ -224,7 +223,7 @@ xattr_apply_map_file(char *path, void *map, sqfs_xattr_writer_t *xwr) {
struct XattrMap *xattr_map = map;
int ret = 0;
const struct XattrMapPattern *pat;
- const struct XattrMapEntry *entry;
+ const sqfs_xattr_t *entry;
for (pat = xattr_map->patterns; pat != NULL; pat = pat->next) {
char *patstr = pat->path;
@@ -240,8 +239,7 @@ xattr_apply_map_file(char *path, void *map, sqfs_xattr_writer_t *xwr) {
printf(" %s = \n", entry->key);
fwrite(entry->value, entry->value_len, 1, stdout);
puts("\n");
- ret = sqfs_xattr_writer_add_kv(
- xwr, entry->key, entry->value, entry->value_len);
+ ret = sqfs_xattr_writer_add(xwr, entry);
if (ret < 0) {
return ret;
}
diff --git a/bin/gensquashfs/src/mkfs.h b/bin/gensquashfs/src/mkfs.h
index 9f2be13..0a9a3b3 100644
--- a/bin/gensquashfs/src/mkfs.h
+++ b/bin/gensquashfs/src/mkfs.h
@@ -62,16 +62,9 @@ typedef struct {
bool scan_xattr;
} options_t;
-struct XattrMapEntry {
- char *key;
- sqfs_u8 *value;
- size_t value_len;
- struct XattrMapEntry *next;
-};
-
struct XattrMapPattern {
char *path;
- struct XattrMapEntry *entries;
+ sqfs_xattr_t *entries;
struct XattrMapPattern *next;
};
diff --git a/bin/gensquashfs/test/filemap_xattr.c b/bin/gensquashfs/test/filemap_xattr.c
index d258d89..c9fd26b 100644
--- a/bin/gensquashfs/test/filemap_xattr.c
+++ b/bin/gensquashfs/test/filemap_xattr.c
@@ -25,8 +25,8 @@ static const sqfs_u8 rfkill_acl[] = {
int main(int argc, char **argv)
{
struct XattrMapPattern *pat;
- struct XattrMapEntry *ent;
struct XattrMap *map;
+ sqfs_xattr_t *ent;
int ret;
(void)argc; (void)argv;