From 8597212da10cdf192cf719059d63d59d5df41ed8 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sat, 4 Apr 2015 23:37:00 +0200 Subject: [PATCH] Fix fs configuration support Signed-off-by: Jo-Philipp Wich --- canned_fs_config.c | 9 +++++---- canned_fs_config.h | 4 ++-- ext4_utils.h | 2 +- make_ext4fs.c | 11 ++++++----- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/canned_fs_config.c b/canned_fs_config.c index ae1d7bd..6bd1b22 100644 --- a/canned_fs_config.c +++ b/canned_fs_config.c @@ -78,14 +78,13 @@ int load_canned_fs_config(const char* fn) { return 0; } -void canned_fs_config(const char* path, int dir, +int canned_fs_config(const char* path, int dir, unsigned* uid, unsigned* gid, unsigned* mode, uint64_t* capabilities) { Path key; - key.path = path+1; // canned paths lack the leading '/' + key.path = path; Path* p = (Path*) bsearch(&key, canned_data, canned_used, sizeof(Path), path_compare); if (p == NULL) { - fprintf(stderr, "failed to find [%s] in canned fs_config\n", path); - exit(1); + return 0; } *uid = p->uid; *gid = p->gid; @@ -104,4 +103,6 @@ void canned_fs_config(const char* path, int dir, if (c_mode != *mode) printf("%s mode 0%o 0%o\n", path, *mode, c_mode); if (c_capabilities != *capabilities) printf("%s capabilities %llx %llx\n", path, *capabilities, c_capabilities); #endif + + return 1; } diff --git a/canned_fs_config.h b/canned_fs_config.h index aec923b..bf20aa2 100644 --- a/canned_fs_config.h +++ b/canned_fs_config.h @@ -20,7 +20,7 @@ #include int load_canned_fs_config(const char* fn); -void canned_fs_config(const char* path, int dir, - unsigned* uid, unsigned* gid, unsigned* mode, uint64_t* capabilities); +int canned_fs_config(const char* path, int dir, + unsigned* uid, unsigned* gid, unsigned* mode, uint64_t* capabilities); #endif diff --git a/ext4_utils.h b/ext4_utils.h index b6915bd..97eebc4 100644 --- a/ext4_utils.h +++ b/ext4_utils.h @@ -150,7 +150,7 @@ u64 parse_num(const char *arg); void ext4_parse_sb_info(struct ext4_super_block *sb); u16 ext4_crc16(u16 crc_in, const void *buf, int size); -typedef void (*fs_config_func_t)(const char *path, int dir, unsigned *uid, unsigned *gid, +typedef int (*fs_config_func_t)(const char *path, int dir, unsigned *uid, unsigned *gid, unsigned *mode, uint64_t *capabilities); struct selabel_handle; diff --git a/make_ext4fs.c b/make_ext4fs.c index b9f653c..bc63236 100644 --- a/make_ext4fs.c +++ b/make_ext4fs.c @@ -151,11 +151,12 @@ static u32 build_directory_structure(const char *full_path, const char *dir_path unsigned int uid = 0; unsigned int gid = 0; int dir = S_ISDIR(stat.st_mode); - fs_config_func(dentries[i].path, dir, &uid, &gid, &mode, &capabilities); - dentries[i].mode = mode; - dentries[i].uid = uid; - dentries[i].gid = gid; - dentries[i].capabilities = capabilities; + if (fs_config_func(dentries[i].path, dir, &uid, &gid, &mode, &capabilities)) { + dentries[i].mode = mode; + dentries[i].uid = uid; + dentries[i].gid = gid; + dentries[i].capabilities = capabilities; + } } if (S_ISREG(stat.st_mode)) { -- 2.30.2