diff options
Diffstat (limited to 'bin/gensquashfs')
| -rw-r--r-- | bin/gensquashfs/src/fstree_from_file.c | 31 | ||||
| -rw-r--r-- | bin/gensquashfs/src/mkfs.c | 3 | 
2 files changed, 11 insertions, 23 deletions
| diff --git a/bin/gensquashfs/src/fstree_from_file.c b/bin/gensquashfs/src/fstree_from_file.c index 77f9ebd..8f1b50b 100644 --- a/bin/gensquashfs/src/fstree_from_file.c +++ b/bin/gensquashfs/src/fstree_from_file.c @@ -21,17 +21,13 @@ struct glob_context {  	const char *filename;  	size_t line_num; -	struct stat *basic;  	unsigned int glob_flags;  	char *name_pattern;  };  enum { -	GLOB_MODE_FROM_SRC = 0x01, -	GLOB_UID_FROM_SRC = 0x02, -	GLOB_GID_FROM_SRC = 0x04, -	GLOB_FLAG_PATH = 0x08, +	GLOB_FLAG_PATH = 0x00010000,  };  static const struct { @@ -167,17 +163,6 @@ static int glob_node_callback(void *user, tree_node_t *root, dir_entry_t *ent)  	struct glob_context *ctx = user;  	int ret; -	if (!(ctx->glob_flags & GLOB_MODE_FROM_SRC)) { -		ent->mode &= ~(07777); -		ent->mode |= ctx->basic->st_mode & 07777; -	} - -	if (!(ctx->glob_flags & GLOB_UID_FROM_SRC)) -		ent->uid = ctx->basic->st_uid; - -	if (!(ctx->glob_flags & GLOB_GID_FROM_SRC)) -		ent->gid = ctx->basic->st_gid; -  	if (ctx->name_pattern != NULL) {  		if (ctx->glob_flags & GLOB_FLAG_PATH) {  			char *path = full_path(root, ent); @@ -256,7 +241,6 @@ static int glob_files(fstree_t *fs, const char *filename, size_t line_num,  	memset(&ctx, 0, sizeof(ctx));  	ctx.filename = filename;  	ctx.line_num = line_num; -	ctx.basic = basic;  	ctx.glob_flags = glob_flags;  	/* fetch the actual target node */ @@ -365,8 +349,11 @@ static int glob_files(fstree_t *fs, const char *filename, size_t line_num,  	/* do the scan */  	memset(&cfg, 0, sizeof(cfg)); -	cfg.flags = scan_flags; -	cfg.def_mtime = fs->defaults.mtime; +	cfg.flags = scan_flags | glob_flags; +	cfg.def_mtime = basic->st_mtime; +	cfg.def_uid = basic->st_uid; +	cfg.def_gid = basic->st_gid; +	cfg.def_mode = basic->st_mode;  	if (basepath == NULL) {  		dir = dir_tree_iterator_create(extra == NULL ? "." : extra, @@ -530,7 +517,7 @@ static int handle_line(fstree_t *fs, const char *filename,  	if (cb->is_glob && *line == '*') {  		++line;  		mode = 0; -		glob_flags |= GLOB_MODE_FROM_SRC; +		glob_flags |= DIR_SCAN_KEEP_MODE;  	} else {  		if ((line = read_u32(line, &mode, 8)) == NULL || mode > 07777)  			goto fail_mode; @@ -542,7 +529,7 @@ static int handle_line(fstree_t *fs, const char *filename,  	if (cb->is_glob && *line == '*') {  		++line;  		uid = 0; -		glob_flags |= GLOB_UID_FROM_SRC; +		glob_flags |= DIR_SCAN_KEEP_UID;  	} else {  		if ((line = read_u32(line, &uid, 10)) == NULL)  			goto fail_uid_gid; @@ -554,7 +541,7 @@ static int handle_line(fstree_t *fs, const char *filename,  	if (cb->is_glob && *line == '*') {  		++line;  		gid = 0; -		glob_flags |= GLOB_GID_FROM_SRC; +		glob_flags |= DIR_SCAN_KEEP_GID;  	} else {  		if ((line = read_u32(line, &gid, 10)) == NULL)  			goto fail_uid_gid; diff --git a/bin/gensquashfs/src/mkfs.c b/bin/gensquashfs/src/mkfs.c index f2973b6..051b6ac 100644 --- a/bin/gensquashfs/src/mkfs.c +++ b/bin/gensquashfs/src/mkfs.c @@ -171,7 +171,8 @@ int main(int argc, char **argv)  		int ret;  		memset(&cfg, 0, sizeof(cfg)); -		cfg.flags = opt.dirscan_flags; +		cfg.flags = opt.dirscan_flags | DIR_SCAN_KEEP_UID | +			DIR_SCAN_KEEP_GID | DIR_SCAN_KEEP_MODE;  		cfg.def_mtime = sqfs.fs.defaults.mtime;  		dir = dir_tree_iterator_create(opt.packdir, &cfg); | 
