diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2002-12-09 11:10:40 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2002-12-09 11:10:40 +0000 |
commit | fdbbb048933389c5a2624aa77aa5af2dbea75b01 (patch) | |
tree | 41623dd3faac0290e7739fde7c7228f7fa47e18e /shell/ash.c | |
parent | 6b5bd0e5abbfb6b3b925dfd8452c72589569981b (diff) | |
download | busybox-w32-fdbbb048933389c5a2624aa77aa5af2dbea75b01.tar.gz busybox-w32-fdbbb048933389c5a2624aa77aa5af2dbea75b01.tar.bz2 busybox-w32-fdbbb048933389c5a2624aa77aa5af2dbea75b01.zip |
Command line history changes, lastpatch_71 from Vladimir N. Oleynik
Diffstat (limited to 'shell/ash.c')
-rw-r--r-- | shell/ash.c | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/shell/ash.c b/shell/ash.c index bec37cfcc..715169053 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -1196,6 +1196,10 @@ static struct var vlc_all; | |||
1196 | static struct var vlc_ctype; | 1196 | static struct var vlc_ctype; |
1197 | #endif | 1197 | #endif |
1198 | 1198 | ||
1199 | #ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY | ||
1200 | static struct var vhistfile; | ||
1201 | #endif | ||
1202 | |||
1199 | struct varinit { | 1203 | struct varinit { |
1200 | struct var *var; | 1204 | struct var *var; |
1201 | int flags; | 1205 | int flags; |
@@ -1242,6 +1246,10 @@ static const struct varinit varinit[] = { | |||
1242 | {&vlc_ctype, VSTRFIXED | VTEXTFIXED | VUNSET, "LC_CTYPE=", | 1246 | {&vlc_ctype, VSTRFIXED | VTEXTFIXED | VUNSET, "LC_CTYPE=", |
1243 | change_lc_ctype}, | 1247 | change_lc_ctype}, |
1244 | #endif | 1248 | #endif |
1249 | #ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY | ||
1250 | {&vhistfile, VSTRFIXED | VTEXTFIXED | VUNSET, "HISTFILE=", | ||
1251 | NULL}, | ||
1252 | #endif | ||
1245 | {NULL, 0, NULL, | 1253 | {NULL, 0, NULL, |
1246 | NULL} | 1254 | NULL} |
1247 | }; | 1255 | }; |
@@ -7312,6 +7320,20 @@ int ash_main(int argc, char **argv) | |||
7312 | init(); | 7320 | init(); |
7313 | setstackmark(&smark); | 7321 | setstackmark(&smark); |
7314 | procargs(argc, argv); | 7322 | procargs(argc, argv); |
7323 | #ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY | ||
7324 | if ( iflag ) { | ||
7325 | const char *hp = lookupvar("HISTFILE"); | ||
7326 | |||
7327 | if(hp == NULL ) { | ||
7328 | hp = lookupvar("HOME"); | ||
7329 | if(hp != NULL) { | ||
7330 | char *defhp = concat_path_file(hp, ".ash_history"); | ||
7331 | setvar("HISTFILE", defhp, 0); | ||
7332 | free(defhp); | ||
7333 | } | ||
7334 | } | ||
7335 | } | ||
7336 | #endif | ||
7315 | if (argv[0] && argv[0][0] == '-') | 7337 | if (argv[0] && argv[0][0] == '-') |
7316 | isloginsh = 1; | 7338 | isloginsh = 1; |
7317 | if (isloginsh) { | 7339 | if (isloginsh) { |
@@ -7357,8 +7379,12 @@ int ash_main(int argc, char **argv) | |||
7357 | if (sflag || minusc == NULL) { | 7379 | if (sflag || minusc == NULL) { |
7358 | state4: /* XXX ??? - why isn't this before the "if" statement */ | 7380 | state4: /* XXX ??? - why isn't this before the "if" statement */ |
7359 | #ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY | 7381 | #ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY |
7360 | if ( iflag ) | 7382 | if ( iflag ) { |
7361 | load_history ( ".ash_history" ); | 7383 | const char *hp = lookupvar("HISTFILE"); |
7384 | |||
7385 | if(hp != NULL ) | ||
7386 | load_history ( hp ); | ||
7387 | } | ||
7362 | #endif | 7388 | #endif |
7363 | cmdloop(1); | 7389 | cmdloop(1); |
7364 | } | 7390 | } |
@@ -7550,10 +7576,6 @@ static int exitcmd(int argc, char **argv) | |||
7550 | { | 7576 | { |
7551 | if (stoppedjobs()) | 7577 | if (stoppedjobs()) |
7552 | return 0; | 7578 | return 0; |
7553 | #ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY | ||
7554 | if ( iflag ) | ||
7555 | save_history ( ".ash_history" ); | ||
7556 | #endif | ||
7557 | 7579 | ||
7558 | if (argc > 1) | 7580 | if (argc > 1) |
7559 | exitstatus = number(argv[1]); | 7581 | exitstatus = number(argv[1]); |
@@ -11615,12 +11637,22 @@ static void exitshell(int status) | |||
11615 | trap[0] = NULL; | 11637 | trap[0] = NULL; |
11616 | evalstring(p, 0); | 11638 | evalstring(p, 0); |
11617 | } | 11639 | } |
11618 | l1:handler = &loc2; /* probably unnecessary */ | 11640 | l1: |
11641 | handler = &loc2; /* probably unnecessary */ | ||
11619 | flushall(); | 11642 | flushall(); |
11620 | #ifdef CONFIG_ASH_JOB_CONTROL | 11643 | #ifdef CONFIG_ASH_JOB_CONTROL |
11621 | setjobctl(0); | 11644 | setjobctl(0); |
11622 | #endif | 11645 | #endif |
11623 | l2:_exit(status); | 11646 | #ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY |
11647 | if (iflag && rootshell) { | ||
11648 | const char *hp = lookupvar("HISTFILE"); | ||
11649 | |||
11650 | if(hp != NULL ) | ||
11651 | save_history ( hp ); | ||
11652 | } | ||
11653 | #endif | ||
11654 | l2: | ||
11655 | _exit(status); | ||
11624 | /* NOTREACHED */ | 11656 | /* NOTREACHED */ |
11625 | } | 11657 | } |
11626 | 11658 | ||