tools: env: introduce setenv/printenv argument structs
goal is to use getopt for all argument parsing instead of adhoc parsing in fw_getenv/fw_setenv functions Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
This commit is contained in:
parent
8b27abd8ab
commit
07ce944021
|
@ -54,6 +54,15 @@
|
||||||
"bootm"
|
"bootm"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct printenv_args {
|
||||||
|
};
|
||||||
|
extern struct printenv_args printenv_args;
|
||||||
|
|
||||||
|
struct setenv_args {
|
||||||
|
char *script_file;
|
||||||
|
};
|
||||||
|
extern struct setenv_args setenv_args;
|
||||||
|
|
||||||
extern int fw_printenv(int argc, char *argv[]);
|
extern int fw_printenv(int argc, char *argv[]);
|
||||||
extern char *fw_getenv (char *name);
|
extern char *fw_getenv (char *name);
|
||||||
extern int fw_setenv (int argc, char *argv[]);
|
extern int fw_setenv (int argc, char *argv[]);
|
||||||
|
|
|
@ -45,6 +45,9 @@ static struct option long_options[] = {
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct printenv_args printenv_args;
|
||||||
|
struct setenv_args setenv_args;
|
||||||
|
|
||||||
void usage(void)
|
void usage(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -77,31 +80,9 @@ void usage(void)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int parse_printenv_args(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *p;
|
|
||||||
char *cmdname = *argv;
|
|
||||||
char *script_file = NULL;
|
|
||||||
int c;
|
int c;
|
||||||
const char *lockname = "/var/lock/" CMD_PRINTENV ".lock";
|
|
||||||
int lockfd = -1;
|
|
||||||
int retval = EXIT_SUCCESS;
|
|
||||||
|
|
||||||
lockfd = open(lockname, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
|
||||||
if (-1 == lockfd) {
|
|
||||||
fprintf(stderr, "Error opening lock file %s\n", lockname);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (-1 == flock(lockfd, LOCK_EX)) {
|
|
||||||
fprintf(stderr, "Error locking file %s\n", lockname);
|
|
||||||
close(lockfd);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((p = strrchr (cmdname, '/')) != NULL) {
|
|
||||||
cmdname = p + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((c = getopt_long (argc, argv, "a:c:ns:h",
|
while ((c = getopt_long (argc, argv, "a:c:ns:h",
|
||||||
long_options, NULL)) != EOF) {
|
long_options, NULL)) != EOF) {
|
||||||
|
@ -115,40 +96,96 @@ int main(int argc, char *argv[])
|
||||||
case 'n':
|
case 'n':
|
||||||
/* handled in fw_printenv */
|
/* handled in fw_printenv */
|
||||||
break;
|
break;
|
||||||
|
case 'h':
|
||||||
|
usage();
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
break;
|
||||||
|
default: /* '?' */
|
||||||
|
usage();
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int parse_setenv_args(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
while ((c = getopt_long (argc, argv, "a:c:ns:h",
|
||||||
|
long_options, NULL)) != EOF) {
|
||||||
|
switch (c) {
|
||||||
|
case 'a':
|
||||||
|
/* AES key, handled later */
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
/* handled later */
|
||||||
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
script_file = optarg;
|
setenv_args.script_file = optarg;
|
||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
usage();
|
usage();
|
||||||
goto exit;
|
exit(EXIT_SUCCESS);
|
||||||
|
break;
|
||||||
default: /* '?' */
|
default: /* '?' */
|
||||||
fprintf(stderr, "Try `%s --help' for more information."
|
usage();
|
||||||
"\n", cmdname);
|
exit(EXIT_FAILURE);
|
||||||
retval = EXIT_FAILURE;
|
break;
|
||||||
goto exit;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
char *cmdname = *argv;
|
||||||
|
const char *lockname = "/var/lock/" CMD_PRINTENV ".lock";
|
||||||
|
int lockfd = -1;
|
||||||
|
int retval = EXIT_SUCCESS;
|
||||||
|
|
||||||
|
if (strrchr(cmdname, '/') != NULL)
|
||||||
|
cmdname = strrchr(cmdname, '/') + 1;
|
||||||
|
|
||||||
|
if (strcmp(cmdname, CMD_PRINTENV) == 0) {
|
||||||
|
if (parse_printenv_args(argc, argv))
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
} else if (strcmp(cmdname, CMD_SETENV) == 0) {
|
||||||
|
if (parse_setenv_args(argc, argv))
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Identity crisis - may be called as `%s' or as `%s' but not as `%s'\n",
|
||||||
|
CMD_PRINTENV, CMD_SETENV, cmdname);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
lockfd = open(lockname, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||||
|
if (-1 == lockfd) {
|
||||||
|
fprintf(stderr, "Error opening lock file %s\n", lockname);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-1 == flock(lockfd, LOCK_EX)) {
|
||||||
|
fprintf(stderr, "Error locking file %s\n", lockname);
|
||||||
|
close(lockfd);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(cmdname, CMD_PRINTENV) == 0) {
|
if (strcmp(cmdname, CMD_PRINTENV) == 0) {
|
||||||
if (fw_printenv(argc, argv) != 0)
|
if (fw_printenv(argc, argv) != 0)
|
||||||
retval = EXIT_FAILURE;
|
retval = EXIT_FAILURE;
|
||||||
} else if (strcmp(cmdname, CMD_SETENV) == 0) {
|
} else if (strcmp(cmdname, CMD_SETENV) == 0) {
|
||||||
if (!script_file) {
|
if (!setenv_args.script_file) {
|
||||||
if (fw_setenv(argc, argv) != 0)
|
if (fw_setenv(argc, argv) != 0)
|
||||||
retval = EXIT_FAILURE;
|
retval = EXIT_FAILURE;
|
||||||
} else {
|
} else {
|
||||||
if (fw_parse_script(script_file) != 0)
|
if (fw_parse_script(setenv_args.script_file) != 0)
|
||||||
retval = EXIT_FAILURE;
|
retval = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Identity crisis - may be called as `" CMD_PRINTENV
|
|
||||||
"' or as `" CMD_SETENV "' but not as `%s'\n",
|
|
||||||
cmdname);
|
|
||||||
retval = EXIT_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exit:
|
|
||||||
flock(lockfd, LOCK_UN);
|
flock(lockfd, LOCK_UN);
|
||||||
close(lockfd);
|
close(lockfd);
|
||||||
return retval;
|
return retval;
|
||||||
|
|
Loading…
Reference in New Issue