diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2012-10-01 13:41:17 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2012-10-01 13:41:17 +0200 |
commit | d5275888821a8382e7a493d90cebb7b23d975795 (patch) | |
tree | aa1d7897a67090ad6984b82edf512d6ac5e8df91 | |
parent | f47ce07b2699134d94dae9320dabc4a91c3c6b83 (diff) | |
download | busybox-w32-d5275888821a8382e7a493d90cebb7b23d975795.tar.gz busybox-w32-d5275888821a8382e7a493d90cebb7b23d975795.tar.bz2 busybox-w32-d5275888821a8382e7a493d90cebb7b23d975795.zip |
ash: implement export -n
function old new delta
exportcmd 129 175 +46
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | shell/ash.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/shell/ash.c b/shell/ash.c index d42316a88..010924db4 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -12630,9 +12630,27 @@ exportcmd(int argc UNUSED_PARAM, char **argv) | |||
12630 | char *name; | 12630 | char *name; |
12631 | const char *p; | 12631 | const char *p; |
12632 | char **aptr; | 12632 | char **aptr; |
12633 | int flag = argv[0][0] == 'r' ? VREADONLY : VEXPORT; | 12633 | char opt; |
12634 | int flag; | ||
12635 | int flag_off; | ||
12636 | |||
12637 | /* "readonly" in bash accepts, but ignores -n. | ||
12638 | * We do the same: it saves a conditional in nextopt's param. | ||
12639 | */ | ||
12640 | flag_off = 0; | ||
12641 | while ((opt = nextopt("np")) != '\0') { | ||
12642 | if (opt == 'n') | ||
12643 | flag_off = VEXPORT; | ||
12644 | } | ||
12645 | flag = VEXPORT; | ||
12646 | if (argv[0][0] == 'r') { | ||
12647 | flag = VREADONLY; | ||
12648 | flag_off = 0; /* readonly ignores -n */ | ||
12649 | } | ||
12650 | flag_off = ~flag_off; | ||
12634 | 12651 | ||
12635 | if (nextopt("p") != 'p') { | 12652 | /*if (opt_p_not_specified) - bash doesnt check this. Try "export -p NAME" */ |
12653 | { | ||
12636 | aptr = argptr; | 12654 | aptr = argptr; |
12637 | name = *aptr; | 12655 | name = *aptr; |
12638 | if (name) { | 12656 | if (name) { |
@@ -12643,15 +12661,19 @@ exportcmd(int argc UNUSED_PARAM, char **argv) | |||
12643 | } else { | 12661 | } else { |
12644 | vp = *findvar(hashvar(name), name); | 12662 | vp = *findvar(hashvar(name), name); |
12645 | if (vp) { | 12663 | if (vp) { |
12646 | vp->flags |= flag; | 12664 | vp->flags = ((vp->flags | flag) & flag_off); |
12647 | continue; | 12665 | continue; |
12648 | } | 12666 | } |
12649 | } | 12667 | } |
12650 | setvar(name, p, flag); | 12668 | setvar(name, p, (flag & flag_off)); |
12651 | } while ((name = *++aptr) != NULL); | 12669 | } while ((name = *++aptr) != NULL); |
12652 | return 0; | 12670 | return 0; |
12653 | } | 12671 | } |
12654 | } | 12672 | } |
12673 | |||
12674 | /* No arguments. Show the list of exported or readonly vars. | ||
12675 | * -n is ignored. | ||
12676 | */ | ||
12655 | showvars(argv[0], flag, 0); | 12677 | showvars(argv[0], flag, 0); |
12656 | return 0; | 12678 | return 0; |
12657 | } | 12679 | } |