diff options
-rw-r--r-- | tmpfs/tmpfs.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/tmpfs/tmpfs.c b/tmpfs/tmpfs.c index 2a98178a..83795289 100644 --- a/tmpfs/tmpfs.c +++ b/tmpfs/tmpfs.c @@ -100,9 +100,12 @@ diskfs_reload_global_state () int diskfs_synchronous = 0; +#define OPT_SIZE 600 /* --size */ + static const struct argp_option options[] = { {"mode", 'm', "MODE", 0, "Permissions (octal) for root directory"}, + {"size", OPT_SIZE, "MAX-BYTES", 0, "Maximum size"}, {NULL,} }; @@ -188,7 +191,7 @@ parse_opt (int key, char *arg, struct argp_state *state) if (values == 0) return ENOMEM; state->hook = values; - values->size = 0; + values->size = -1; values->mode = -1; break; case ARGP_KEY_FINI: @@ -214,9 +217,21 @@ parse_opt (int key, char *arg, struct argp_state *state) } break; + case OPT_SIZE: /* --size=MAX-BYTES */ + { + error_t err = parse_opt_size (arg, state, &values->size); + if (err) + return err; + } + break; + case ARGP_KEY_NO_ARGS: - argp_error (state, "must supply maximum size"); - return EINVAL; + if (values->size < 0) + { + argp_error (state, "must supply maximum size"); + return EINVAL; + } + break; case ARGP_KEY_ARGS: if (state->argv[state->next + 1] != 0) @@ -224,6 +239,14 @@ parse_opt (int key, char *arg, struct argp_state *state) argp_error (state, "too many arguments"); return EINVAL; } + else if (values->size >= 0) + { + if (strcmp (state->argv[state->next], "tmpfs") != 0) + { + argp_error (state, "size specified with --size and argument is not \"tmpfs\""); + return EINVAL; + } + } else { error_t err = parse_opt_size (state->argv[state->next], state, |