diff --git a/ce/interp.c b/ce/interp.c index 9182596..c20a00d 100644 --- a/ce/interp.c +++ b/ce/interp.c @@ -424,20 +424,24 @@ static void execute_cmd (struct ast_cmd* cmd, struct context* context) { int pgid = get_procgroup (pid); - for (int i = 0; i < cmd->arg_count; i++) { + int i = 0; + while (i < cmd->arg_count) { char* arg = cmd->args[i]; char *key, *value; - char* sep = strchr (arg, '='); + if (arg[0] == '-') { + key = &arg[1]; - if (sep != NULL) { - *sep = '\0'; - - key = arg; - value = sep + 1; + if (i < cmd->arg_count - 1) { + value = cmd->args[++i]; + } else { + value = "yes"; + } env_set (pgid, key, value, strlen (value) + 1); } + + i++; } struct cmd_write_proc_ctx wpctx = {.pgid = pgid, .cancel_pid = pid}; diff --git a/ce/parser.h b/ce/parser.h index a306bae..6019ab6 100644 --- a/ce/parser.h +++ b/ce/parser.h @@ -3,8 +3,8 @@ #include -#define TOKEN_MAX 64 -#define CMD_ARGS_MAX 64 +#define TOKEN_MAX 128 +#define CMD_ARGS_MAX 128 #define TOKEN_CLASS_OPAREN 0 #define TOKEN_CLASS_CPAREN 1 diff --git a/sdutil/sdutil.c b/sdutil/sdutil.c index 5b31a65..15bda06 100644 --- a/sdutil/sdutil.c +++ b/sdutil/sdutil.c @@ -182,6 +182,12 @@ void app_main (void) { char devnamebuf[64]; memset (devnamebuf, 0, sizeof (devnamebuf)); + if (env_get (process_get_pgid (), "help", (void*)commandbuf, sizeof (commandbuf)) == ST_OK) { + mprintf ("sdutil -C command -dev device_key\n"); + mprintf ("commands: part_dos, list_part_dos, format_fat32, format_fat16\n"); + return; + } + if (env_get (process_get_pgid (), "C", (void*)commandbuf, sizeof (commandbuf)) != ST_OK) { mprintf ("ERROR C=???. No command provided\n"); return;