summaryrefslogtreecommitdiff
path: root/mkfs
diff options
context:
space:
mode:
Diffstat (limited to 'mkfs')
-rw-r--r--mkfs/mkfs.c24
-rw-r--r--mkfs/mkfs.h5
-rw-r--r--mkfs/options.c59
3 files changed, 14 insertions, 74 deletions
diff --git a/mkfs/mkfs.c b/mkfs/mkfs.c
index 371c578..e72b669 100644
--- a/mkfs/mkfs.c
+++ b/mkfs/mkfs.c
@@ -117,11 +117,16 @@ int main(int argc, char **argv)
process_command_line(&opt, argc, argv);
- if (sqfs_super_init(&super, opt.blksz, opt.def_mtime, opt.compressor))
+ if (fstree_init(&fs, opt.blksz, opt.fs_defaults))
return EXIT_FAILURE;
+ if (sqfs_super_init(&super, opt.blksz, fs.defaults.st_mtime,
+ opt.compressor)) {
+ goto out_fstree;
+ }
+
if (id_table_init(&idtbl))
- return EXIT_FAILURE;
+ goto out_fstree;
outfd = open(opt.outfile, opt.outmode, 0644);
if (outfd < 0) {
@@ -132,25 +137,20 @@ int main(int argc, char **argv)
if (sqfs_super_write(&super, outfd))
goto out_outfd;
- if (fstree_init(&fs, opt.blksz, opt.def_mtime, opt.def_mode,
- opt.def_uid, opt.def_gid)) {
- goto out_outfd;
- }
-
if (read_fstree(&fs, &opt))
- goto out_fstree;
+ goto out_outfd;
tree_node_sort_recursive(fs.root);
if (fstree_gen_inode_table(&fs))
- goto out_fstree;
+ goto out_outfd;
super.inode_count = fs.inode_tbl_size - 2;
#ifdef WITH_SELINUX
if (opt.selinux != NULL) {
if (fstree_relabel_selinux(&fs, opt.selinux))
- goto out_fstree;
+ goto out_outfd;
}
#endif
@@ -202,11 +202,11 @@ out_data:
data_writer_destroy(data);
out_cmp:
cmp->destroy(cmp);
-out_fstree:
- fstree_cleanup(&fs);
out_outfd:
close(outfd);
out_idtbl:
id_table_cleanup(&idtbl);
+out_fstree:
+ fstree_cleanup(&fs);
return status;
}
diff --git a/mkfs/mkfs.h b/mkfs/mkfs.h
index 4a39eb5..4031c74 100644
--- a/mkfs/mkfs.h
+++ b/mkfs/mkfs.h
@@ -24,11 +24,8 @@
#include <ctype.h>
typedef struct {
- unsigned int def_uid;
- unsigned int def_gid;
- unsigned int def_mode;
- unsigned int def_mtime;
E_SQFS_COMPRESSOR compressor;
+ char *fs_defaults;
int outmode;
int blksz;
int devblksz;
diff --git a/mkfs/options.c b/mkfs/options.c
index e298a6c..8d724a8 100644
--- a/mkfs/options.c
+++ b/mkfs/options.c
@@ -24,21 +24,6 @@ static const char *short_opts = "s:F:D:X:c:b:B:d:fqhV";
static const char *short_opts = "F:D:X:c:b:B:d:fqhV";
#endif
-enum {
- DEF_UID = 0,
- DEF_GID,
- DEF_MODE,
- DEF_MTIME,
-};
-
-static const char *defaults[] = {
- [DEF_UID] = "uid",
- [DEF_GID] = "gid",
- [DEF_MODE] = "mode",
- [DEF_MTIME] = "mtime",
- NULL
-};
-
extern char *__progname;
static const char *help_string =
@@ -142,53 +127,11 @@ static long read_number(const char *name, const char *str, long min, long max)
return result;
}
-static void process_defaults(options_t *opt, char *subopts)
-{
- char *value;
- int i;
-
- while (*subopts != '\0') {
- i = getsubopt(&subopts, (char *const *)defaults, &value);
-
- if (value == NULL) {
- fprintf(stderr, "Missing value for option %s\n",
- defaults[i]);
- exit(EXIT_FAILURE);
- }
-
- switch (i) {
- case DEF_UID:
- opt->def_uid = read_number("Default user ID", value,
- 0, 0xFFFFFFFF);
- break;
- case DEF_GID:
- opt->def_gid = read_number("Default group ID", value,
- 0, 0xFFFFFFFF);
- break;
- case DEF_MODE:
- opt->def_mode = read_number("Default permissions",
- value, 0, 0xFFFFFFFF);
- break;
- case DEF_MTIME:
- opt->def_mtime = read_number("Default mtime", value,
- 0, 0xFFFFFFFF);
- break;
- default:
- fprintf(stderr, "Unknown option '%s'\n", value);
- exit(EXIT_FAILURE);
- }
- }
-}
-
void process_command_line(options_t *opt, int argc, char **argv)
{
bool have_compressor;
int i;
- opt->def_uid = 0;
- opt->def_gid = 0;
- opt->def_mode = 0755;
- opt->def_mtime = 0;
opt->outmode = O_WRONLY | O_CREAT | O_EXCL;
opt->compressor = compressor_get_default();
opt->blksz = SQFS_DEFAULT_BLOCK_SIZE;
@@ -230,7 +173,7 @@ void process_command_line(options_t *opt, int argc, char **argv)
4096, 0xFFFFFFFF);
break;
case 'd':
- process_defaults(opt, optarg);
+ opt->fs_defaults = optarg;
break;
case 'f':
opt->outmode = O_WRONLY | O_CREAT | O_TRUNC;