diff options
author | jilles <jilles@FreeBSD.org> | 2012-09-15 21:56:30 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2012-09-15 21:56:30 +0000 |
commit | 99ca87dd2daf11623d11838ece4dba4e0ab94951 (patch) | |
tree | 8f1502baabb3376aec513c46c8781c9f452a7b3d /bin/sh/var.c | |
parent | 56fd9326eeef1f0702902d3716e1551e76049d94 (diff) | |
download | FreeBSD-src-99ca87dd2daf11623d11838ece4dba4e0ab94951.zip FreeBSD-src-99ca87dd2daf11623d11838ece4dba4e0ab94951.tar.gz |
sh: Prefer internal nextopt() to libc getopt().
This reduces code duplication and code size.
/usr/bin/printf is not affected.
Side effect: different error messages when certain builtins are passed
invalid options.
Diffstat (limited to 'bin/sh/var.c')
-rw-r--r-- | bin/sh/var.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/bin/sh/var.c b/bin/sh/var.c index 6041459..48a0dc5 100644 --- a/bin/sh/var.c +++ b/bin/sh/var.c @@ -640,10 +640,11 @@ showvarscmd(int argc __unused, char **argv __unused) */ int -exportcmd(int argc, char **argv) +exportcmd(int argc __unused, char **argv) { struct var **vpp; struct var *vp; + char **ap; char *name; char *p; char *cmdname; @@ -651,26 +652,19 @@ exportcmd(int argc, char **argv) int flag = argv[0][0] == 'r'? VREADONLY : VEXPORT; cmdname = argv[0]; - optreset = optind = 1; - opterr = 0; values = 0; - while ((ch = getopt(argc, argv, "p")) != -1) { + while ((ch = nextopt("p")) != '\0') { switch (ch) { case 'p': values = 1; break; - case '?': - default: - error("unknown option: -%c", optopt); } } - argc -= optind; - argv += optind; - if (values && argc != 0) + if (values && *argptr != NULL) error("-p requires no arguments"); - if (argc != 0) { - while ((name = *argv++) != NULL) { + if (*argptr != NULL) { + for (ap = argptr; (name = *ap) != NULL; ap++) { if ((p = strchr(name, '=')) != NULL) { p++; } else { |