aboutsummaryrefslogtreecommitdiff
path: root/shell/ash.c
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2002-12-09 11:10:40 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2002-12-09 11:10:40 +0000
commitfdbbb048933389c5a2624aa77aa5af2dbea75b01 (patch)
tree41623dd3faac0290e7739fde7c7228f7fa47e18e /shell/ash.c
parent6b5bd0e5abbfb6b3b925dfd8452c72589569981b (diff)
downloadbusybox-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.c48
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;
1196static struct var vlc_ctype; 1196static struct var vlc_ctype;
1197#endif 1197#endif
1198 1198
1199#ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY
1200static struct var vhistfile;
1201#endif
1202
1199struct varinit { 1203struct 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 */ 11640l1:
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
11654l2:
11655 _exit(status);
11624 /* NOTREACHED */ 11656 /* NOTREACHED */
11625} 11657}
11626 11658