diff options
| author | Eric Andersen <andersen@codepoet.org> | 2001-10-24 05:00:29 +0000 |
|---|---|---|
| committer | Eric Andersen <andersen@codepoet.org> | 2001-10-24 05:00:29 +0000 |
| commit | bdfd0d78bc44e73d693510e70087857785b3b521 (patch) | |
| tree | 153a573095afac8d8d0ea857759ecabd77fb28b7 /shell | |
| parent | 9260fc5552a3ee52eb95823aa6689d52a1ffd33c (diff) | |
| download | busybox-w32-bdfd0d78bc44e73d693510e70087857785b3b521.tar.gz busybox-w32-bdfd0d78bc44e73d693510e70087857785b3b521.tar.bz2 busybox-w32-bdfd0d78bc44e73d693510e70087857785b3b521.zip | |
Major rework of the directory structure and the entire build system.
-Erik
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/Makefile | 40 | ||||
| -rw-r--r-- | shell/ash.c | 34 | ||||
| -rw-r--r-- | shell/cmdedit.c | 94 | ||||
| -rw-r--r-- | shell/config.in | 51 | ||||
| -rw-r--r-- | shell/hush.c | 21 | ||||
| -rw-r--r-- | shell/lash.c | 38 | ||||
| -rw-r--r-- | shell/msh.c | 26 |
7 files changed, 199 insertions, 105 deletions
diff --git a/shell/Makefile b/shell/Makefile new file mode 100644 index 000000000..e0229973e --- /dev/null +++ b/shell/Makefile | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | # Makefile for busybox | ||
| 2 | # | ||
| 3 | # Copyright (C) 1999,2000,2001 by Erik Andersen <andersee@debian.org> | ||
| 4 | # | ||
| 5 | # This program is free software; you can redistribute it and/or modify | ||
| 6 | # it under the terms of the GNU General Public License as published by | ||
| 7 | # the Free Software Foundation; either version 2 of the License, or | ||
| 8 | # (at your option) any later version. | ||
| 9 | # | ||
| 10 | # This program is distributed in the hope that it will be useful, | ||
| 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 13 | # General Public License for more details. | ||
| 14 | # | ||
| 15 | # You should have received a copy of the GNU General Public License | ||
| 16 | # along with this program; if not, write to the Free Software | ||
| 17 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 18 | # | ||
| 19 | |||
| 20 | TOPDIR :=.. | ||
| 21 | L_TARGET := shell.a | ||
| 22 | EXTRA_CFLAGS = -DBB_VER='"$(VERSION)"' -DBB_BT='"$(BUILDTIME)"' | ||
| 23 | |||
| 24 | obj-y := | ||
| 25 | obj-n := | ||
| 26 | obj- := | ||
| 27 | |||
| 28 | obj-$(CONFIG_ASH) += ash.o | ||
| 29 | obj-$(CONFIG_HUSH) += hush.o | ||
| 30 | obj-$(CONFIG_LASH) += lash.o | ||
| 31 | obj-$(CONFIG_MSH) += msh.o | ||
| 32 | obj-$(CONFIG_FEATURE_COMMAND_EDITING) += cmdedit.o | ||
| 33 | |||
| 34 | |||
| 35 | # Hand off to toplevel Rules.mak | ||
| 36 | include $(TOPDIR)/Rules.mak | ||
| 37 | |||
| 38 | clean: | ||
| 39 | rm -f $(L_TARGET) *.o core | ||
| 40 | |||
diff --git a/shell/ash.c b/shell/ash.c index 486386a25..9cc2208ab 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -265,7 +265,7 @@ union align { | |||
| 265 | #define ALIGN(nbytes) (((nbytes) + sizeof(union align) - 1) & ~(sizeof(union align) - 1)) | 265 | #define ALIGN(nbytes) (((nbytes) + sizeof(union align) - 1) & ~(sizeof(union align) - 1)) |
| 266 | #endif | 266 | #endif |
| 267 | 267 | ||
| 268 | #ifdef BB_LOCALE_SUPPORT | 268 | #ifdef CONFIG_LOCALE_SUPPORT |
| 269 | #include <locale.h> | 269 | #include <locale.h> |
| 270 | static void change_lc_all(const char *value); | 270 | static void change_lc_all(const char *value); |
| 271 | static void change_lc_ctype(const char *value); | 271 | static void change_lc_ctype(const char *value); |
| @@ -1218,7 +1218,7 @@ static struct var vpath; | |||
| 1218 | static struct var vps1; | 1218 | static struct var vps1; |
| 1219 | static struct var vps2; | 1219 | static struct var vps2; |
| 1220 | static struct var voptind; | 1220 | static struct var voptind; |
| 1221 | #ifdef BB_LOCALE_SUPPORT | 1221 | #ifdef CONFIG_LOCALE_SUPPORT |
| 1222 | static struct var vlc_all; | 1222 | static struct var vlc_all; |
| 1223 | static struct var vlc_ctype; | 1223 | static struct var vlc_ctype; |
| 1224 | #endif | 1224 | #endif |
| @@ -1261,7 +1261,7 @@ static const struct varinit varinit[] = { | |||
| 1261 | NULL }, | 1261 | NULL }, |
| 1262 | { &voptind, VSTRFIXED|VTEXTFIXED, "OPTIND=1", | 1262 | { &voptind, VSTRFIXED|VTEXTFIXED, "OPTIND=1", |
| 1263 | getoptsreset }, | 1263 | getoptsreset }, |
| 1264 | #ifdef BB_LOCALE_SUPPORT | 1264 | #ifdef CONFIG_LOCALE_SUPPORT |
| 1265 | { &vlc_all, VSTRFIXED|VTEXTFIXED|VUNSET, "LC_ALL=", | 1265 | { &vlc_all, VSTRFIXED|VTEXTFIXED|VUNSET, "LC_ALL=", |
| 1266 | change_lc_all }, | 1266 | change_lc_all }, |
| 1267 | { &vlc_ctype, VSTRFIXED|VTEXTFIXED|VUNSET, "LC_CTYPE=", | 1267 | { &vlc_ctype, VSTRFIXED|VTEXTFIXED|VUNSET, "LC_CTYPE=", |
| @@ -1556,7 +1556,7 @@ static int hashcmd (int, char **); | |||
| 1556 | static int helpcmd (int, char **); | 1556 | static int helpcmd (int, char **); |
| 1557 | static int jobscmd (int, char **); | 1557 | static int jobscmd (int, char **); |
| 1558 | static int localcmd (int, char **); | 1558 | static int localcmd (int, char **); |
| 1559 | #ifndef BB_PWD | 1559 | #ifndef CONFIG_PWD |
| 1560 | static int pwdcmd (int, char **); | 1560 | static int pwdcmd (int, char **); |
| 1561 | #endif | 1561 | #endif |
| 1562 | static int readcmd (int, char **); | 1562 | static int readcmd (int, char **); |
| @@ -1582,7 +1582,7 @@ static int typecmd (int, char **); | |||
| 1582 | static int getoptscmd (int, char **); | 1582 | static int getoptscmd (int, char **); |
| 1583 | #endif | 1583 | #endif |
| 1584 | 1584 | ||
| 1585 | #ifndef BB_TRUE_FALSE | 1585 | #ifndef CONFIG_TRUE_FALSE |
| 1586 | static int true_main (int, char **); | 1586 | static int true_main (int, char **); |
| 1587 | static int false_main (int, char **); | 1587 | static int false_main (int, char **); |
| 1588 | #endif | 1588 | #endif |
| @@ -1653,7 +1653,7 @@ static const struct builtincmd builtincmds[] = { | |||
| 1653 | { BUILTIN_REGULAR "let", letcmd }, | 1653 | { BUILTIN_REGULAR "let", letcmd }, |
| 1654 | #endif | 1654 | #endif |
| 1655 | { BUILTIN_ASSIGN "local", localcmd }, | 1655 | { BUILTIN_ASSIGN "local", localcmd }, |
| 1656 | #ifndef BB_PWD | 1656 | #ifndef CONFIG_PWD |
| 1657 | { BUILTIN_NOSPEC "pwd", pwdcmd }, | 1657 | { BUILTIN_NOSPEC "pwd", pwdcmd }, |
| 1658 | #endif | 1658 | #endif |
| 1659 | { BUILTIN_REGULAR "read", readcmd }, | 1659 | { BUILTIN_REGULAR "read", readcmd }, |
| @@ -1938,7 +1938,7 @@ updatepwd(const char *dir) | |||
| 1938 | } | 1938 | } |
| 1939 | 1939 | ||
| 1940 | 1940 | ||
| 1941 | #ifndef BB_PWD | 1941 | #ifndef CONFIG_PWD |
| 1942 | static int | 1942 | static int |
| 1943 | pwdcmd(argc, argv) | 1943 | pwdcmd(argc, argv) |
| 1944 | int argc; | 1944 | int argc; |
| @@ -3182,7 +3182,7 @@ returncmd(argc, argv) | |||
| 3182 | } | 3182 | } |
| 3183 | 3183 | ||
| 3184 | 3184 | ||
| 3185 | #ifndef BB_TRUE_FALSE | 3185 | #ifndef CONFIG_TRUE_FALSE |
| 3186 | static int | 3186 | static int |
| 3187 | false_main(argc, argv) | 3187 | false_main(argc, argv) |
| 3188 | int argc; | 3188 | int argc; |
| @@ -3224,7 +3224,7 @@ setinteractive(int on) | |||
| 3224 | is_interactive = on; | 3224 | is_interactive = on; |
| 3225 | if (do_banner==0 && is_interactive) { | 3225 | if (do_banner==0 && is_interactive) { |
| 3226 | /* Looks like they want an interactive shell */ | 3226 | /* Looks like they want an interactive shell */ |
| 3227 | #ifndef BB_FEATURE_SH_EXTRA_QUIET | 3227 | #ifndef CONFIG_FEATURE_SH_EXTRA_QUIET |
| 3228 | printf( "\n\n" BB_BANNER " Built-in shell (ash)\n"); | 3228 | printf( "\n\n" BB_BANNER " Built-in shell (ash)\n"); |
| 3229 | printf( "Enter 'help' for a list of built-in commands.\n\n"); | 3229 | printf( "Enter 'help' for a list of built-in commands.\n\n"); |
| 3230 | #endif | 3230 | #endif |
| @@ -3535,11 +3535,11 @@ tryexec(char *cmd, char **argv, char **envp) | |||
| 3535 | { | 3535 | { |
| 3536 | int e; | 3536 | int e; |
| 3537 | 3537 | ||
| 3538 | #ifdef BB_FEATURE_SH_STANDALONE_SHELL | 3538 | #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL |
| 3539 | char *name = cmd; | 3539 | char *name = cmd; |
| 3540 | char** argv_l=argv; | 3540 | char** argv_l=argv; |
| 3541 | int argc_l; | 3541 | int argc_l; |
| 3542 | #ifdef BB_FEATURE_SH_APPLETS_ALWAYS_WIN | 3542 | #ifdef CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN |
| 3543 | name = get_last_path_component(name); | 3543 | name = get_last_path_component(name); |
| 3544 | #endif | 3544 | #endif |
| 3545 | argv_l=envp; | 3545 | argv_l=envp; |
| @@ -3766,7 +3766,7 @@ static int helpcmd(int argc, char** argv) | |||
| 3766 | col = 0; | 3766 | col = 0; |
| 3767 | } | 3767 | } |
| 3768 | } | 3768 | } |
| 3769 | #ifdef BB_FEATURE_SH_STANDALONE_SHELL | 3769 | #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL |
| 3770 | { | 3770 | { |
| 3771 | extern const struct BB_applet applets[]; | 3771 | extern const struct BB_applet applets[]; |
| 3772 | extern const size_t NUM_APPLETS; | 3772 | extern const size_t NUM_APPLETS; |
| @@ -6023,7 +6023,7 @@ reset(void) { | |||
| 6023 | * This file implements the input routines used by the parser. | 6023 | * This file implements the input routines used by the parser. |
| 6024 | */ | 6024 | */ |
| 6025 | 6025 | ||
| 6026 | #ifdef BB_FEATURE_COMMAND_EDITING | 6026 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 6027 | static const char * cmdedit_prompt; | 6027 | static const char * cmdedit_prompt; |
| 6028 | static inline void putprompt(const char *s) { | 6028 | static inline void putprompt(const char *s) { |
| 6029 | cmdedit_prompt = s; | 6029 | cmdedit_prompt = s; |
| @@ -6090,7 +6090,7 @@ preadfd(void) | |||
| 6090 | parsenextc = buf; | 6090 | parsenextc = buf; |
| 6091 | 6091 | ||
| 6092 | retry: | 6092 | retry: |
| 6093 | #ifdef BB_FEATURE_COMMAND_EDITING | 6093 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 6094 | { | 6094 | { |
| 6095 | if (!iflag || parsefile->fd) | 6095 | if (!iflag || parsefile->fd) |
| 6096 | nr = safe_read(parsefile->fd, buf, BUFSIZ - 1); | 6096 | nr = safe_read(parsefile->fd, buf, BUFSIZ - 1); |
| @@ -7718,7 +7718,7 @@ ash_main(argc, argv) | |||
| 7718 | EXECCMD = find_builtin("exec"); | 7718 | EXECCMD = find_builtin("exec"); |
| 7719 | EVALCMD = find_builtin("eval"); | 7719 | EVALCMD = find_builtin("eval"); |
| 7720 | 7720 | ||
| 7721 | #ifndef BB_FEATURE_SH_FANCY_PROMPT | 7721 | #ifndef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 7722 | unsetenv("PS1"); | 7722 | unsetenv("PS1"); |
| 7723 | unsetenv("PS2"); | 7723 | unsetenv("PS2"); |
| 7724 | #endif | 7724 | #endif |
| @@ -9331,7 +9331,7 @@ getoptsreset(const char *value) | |||
| 9331 | shellparam.optoff = -1; | 9331 | shellparam.optoff = -1; |
| 9332 | } | 9332 | } |
| 9333 | 9333 | ||
| 9334 | #ifdef BB_LOCALE_SUPPORT | 9334 | #ifdef CONFIG_LOCALE_SUPPORT |
| 9335 | static void change_lc_all(const char *value) | 9335 | static void change_lc_all(const char *value) |
| 9336 | { | 9336 | { |
| 9337 | if(value != 0 && *value != 0) | 9337 | if(value != 0 && *value != 0) |
| @@ -12730,7 +12730,7 @@ findvar(struct var **vpp, const char *name) | |||
| 12730 | /* | 12730 | /* |
| 12731 | * Copyright (c) 1999 Herbert Xu <herbert@debian.org> | 12731 | * Copyright (c) 1999 Herbert Xu <herbert@debian.org> |
| 12732 | * This file contains code for the times builtin. | 12732 | * This file contains code for the times builtin. |
| 12733 | * $Id: ash.c,v 1.28 2001/10/19 00:22:22 andersen Exp $ | 12733 | * $Id: ash.c,v 1.29 2001/10/24 05:00:16 andersen Exp $ |
| 12734 | */ | 12734 | */ |
| 12735 | static int timescmd (int argc, char **argv) | 12735 | static int timescmd (int argc, char **argv) |
| 12736 | { | 12736 | { |
diff --git a/shell/cmdedit.c b/shell/cmdedit.c index 16ec2f823..d1b9111ea 100644 --- a/shell/cmdedit.c +++ b/shell/cmdedit.c | |||
| @@ -43,7 +43,7 @@ | |||
| 43 | 43 | ||
| 44 | #include "busybox.h" | 44 | #include "busybox.h" |
| 45 | 45 | ||
| 46 | #ifdef BB_LOCALE_SUPPORT | 46 | #ifdef CONFIG_LOCALE_SUPPORT |
| 47 | #define Isprint(c) isprint((c)) | 47 | #define Isprint(c) isprint((c)) |
| 48 | #else | 48 | #else |
| 49 | #define Isprint(c) ( (c) >= ' ' && (c) != ((unsigned char)'\233') ) | 49 | #define Isprint(c) ( (c) >= ' ' && (c) != ((unsigned char)'\233') ) |
| @@ -55,32 +55,32 @@ | |||
| 55 | 55 | ||
| 56 | #else | 56 | #else |
| 57 | 57 | ||
| 58 | #define BB_FEATURE_COMMAND_EDITING | 58 | #define CONFIG_FEATURE_COMMAND_EDITING |
| 59 | #define BB_FEATURE_COMMAND_TAB_COMPLETION | 59 | #define CONFIG_FEATURE_COMMAND_TAB_COMPLETION |
| 60 | #define BB_FEATURE_COMMAND_USERNAME_COMPLETION | 60 | #define CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION |
| 61 | #define BB_FEATURE_NONPRINTABLE_INVERSE_PUT | 61 | #define CONFIG_FEATURE_NONPRINTABLE_INVERSE_PUT |
| 62 | #define BB_FEATURE_CLEAN_UP | 62 | #define CONFIG_FEATURE_CLEAN_UP |
| 63 | 63 | ||
| 64 | #define D(x) x | 64 | #define D(x) x |
| 65 | 65 | ||
| 66 | #endif /* TEST */ | 66 | #endif /* TEST */ |
| 67 | 67 | ||
| 68 | #ifdef BB_FEATURE_COMMAND_TAB_COMPLETION | 68 | #ifdef CONFIG_FEATURE_COMMAND_TAB_COMPLETION |
| 69 | #include <dirent.h> | 69 | #include <dirent.h> |
| 70 | #include <sys/stat.h> | 70 | #include <sys/stat.h> |
| 71 | #endif | 71 | #endif |
| 72 | 72 | ||
| 73 | #ifdef BB_FEATURE_COMMAND_EDITING | 73 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 74 | 74 | ||
| 75 | #ifndef BB_FEATURE_COMMAND_TAB_COMPLETION | 75 | #ifndef CONFIG_FEATURE_COMMAND_TAB_COMPLETION |
| 76 | #undef BB_FEATURE_COMMAND_USERNAME_COMPLETION | 76 | #undef CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION |
| 77 | #endif | 77 | #endif |
| 78 | 78 | ||
| 79 | #if defined(BB_FEATURE_COMMAND_USERNAME_COMPLETION) || defined(BB_FEATURE_SH_FANCY_PROMPT) | 79 | #if defined(CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION) || defined(CONFIG_FEATURE_SH_FANCY_PROMPT) |
| 80 | #define BB_FEATURE_GETUSERNAME_AND_HOMEDIR | 80 | #define CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR |
| 81 | #endif | 81 | #endif |
| 82 | 82 | ||
| 83 | #ifdef BB_FEATURE_GETUSERNAME_AND_HOMEDIR | 83 | #ifdef CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR |
| 84 | # ifndef TEST | 84 | # ifndef TEST |
| 85 | # include "pwd_grp/pwd.h" | 85 | # include "pwd_grp/pwd.h" |
| 86 | # else | 86 | # else |
| @@ -136,33 +136,33 @@ static int cursor; /* required global for signal handler */ | |||
| 136 | static int len; /* --- "" - - "" - -"- --""-- --""--- */ | 136 | static int len; /* --- "" - - "" - -"- --""-- --""--- */ |
| 137 | static char *command_ps; /* --- "" - - "" - -"- --""-- --""--- */ | 137 | static char *command_ps; /* --- "" - - "" - -"- --""-- --""--- */ |
| 138 | static | 138 | static |
| 139 | #ifndef BB_FEATURE_SH_FANCY_PROMPT | 139 | #ifndef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 140 | const | 140 | const |
| 141 | #endif | 141 | #endif |
| 142 | char *cmdedit_prompt; /* --- "" - - "" - -"- --""-- --""--- */ | 142 | char *cmdedit_prompt; /* --- "" - - "" - -"- --""-- --""--- */ |
| 143 | 143 | ||
| 144 | #ifdef BB_FEATURE_GETUSERNAME_AND_HOMEDIR | 144 | #ifdef CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR |
| 145 | static char *user_buf = ""; | 145 | static char *user_buf = ""; |
| 146 | static char *home_pwd_buf = ""; | 146 | static char *home_pwd_buf = ""; |
| 147 | static int my_euid; | 147 | static int my_euid; |
| 148 | #endif | 148 | #endif |
| 149 | 149 | ||
| 150 | #ifdef BB_FEATURE_SH_FANCY_PROMPT | 150 | #ifdef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 151 | static char *hostname_buf = ""; | 151 | static char *hostname_buf = ""; |
| 152 | static int num_ok_lines = 1; | 152 | static int num_ok_lines = 1; |
| 153 | #endif | 153 | #endif |
| 154 | 154 | ||
| 155 | 155 | ||
| 156 | #ifdef BB_FEATURE_COMMAND_TAB_COMPLETION | 156 | #ifdef CONFIG_FEATURE_COMMAND_TAB_COMPLETION |
| 157 | 157 | ||
| 158 | #ifndef BB_FEATURE_GETUSERNAME_AND_HOMEDIR | 158 | #ifndef CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR |
| 159 | static int my_euid; | 159 | static int my_euid; |
| 160 | #endif | 160 | #endif |
| 161 | 161 | ||
| 162 | static int my_uid; | 162 | static int my_uid; |
| 163 | static int my_gid; | 163 | static int my_gid; |
| 164 | 164 | ||
| 165 | #endif /* BB_FEATURE_COMMAND_TAB_COMPLETION */ | 165 | #endif /* CONFIG_FEATURE_COMMAND_TAB_COMPLETION */ |
| 166 | 166 | ||
| 167 | /* It seems that libc5 doesn't know what a sighandler_t is... */ | 167 | /* It seems that libc5 doesn't know what a sighandler_t is... */ |
| 168 | #if (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 1) | 168 | #if (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 1) |
| @@ -207,7 +207,7 @@ static void cmdedit_reset_term(void) | |||
| 207 | handlers_sets &= ~SET_WCHG_HANDLERS; | 207 | handlers_sets &= ~SET_WCHG_HANDLERS; |
| 208 | } | 208 | } |
| 209 | fflush(stdout); | 209 | fflush(stdout); |
| 210 | #ifdef BB_FEATURE_CLEAN_UP | 210 | #ifdef CONFIG_FEATURE_CLEAN_UP |
| 211 | if (his_front) { | 211 | if (his_front) { |
| 212 | struct history *n; | 212 | struct history *n; |
| 213 | 213 | ||
| @@ -230,7 +230,7 @@ static void cmdedit_set_out_char(int next_char) | |||
| 230 | 230 | ||
| 231 | if (c == 0) | 231 | if (c == 0) |
| 232 | c = ' '; /* destroy end char? */ | 232 | c = ' '; /* destroy end char? */ |
| 233 | #ifdef BB_FEATURE_NONPRINTABLE_INVERSE_PUT | 233 | #ifdef CONFIG_FEATURE_NONPRINTABLE_INVERSE_PUT |
| 234 | if (!Isprint(c)) { /* Inverse put non-printable characters */ | 234 | if (!Isprint(c)) { /* Inverse put non-printable characters */ |
| 235 | if (c >= 128) | 235 | if (c >= 128) |
| 236 | c -= 128; | 236 | c -= 128; |
| @@ -321,7 +321,7 @@ static void put_prompt(void) | |||
| 321 | cmdedit_y = 0; /* new quasireal y */ | 321 | cmdedit_y = 0; /* new quasireal y */ |
| 322 | } | 322 | } |
| 323 | 323 | ||
| 324 | #ifndef BB_FEATURE_SH_FANCY_PROMPT | 324 | #ifndef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 325 | static void parse_prompt(const char *prmt_ptr) | 325 | static void parse_prompt(const char *prmt_ptr) |
| 326 | { | 326 | { |
| 327 | cmdedit_prompt = prmt_ptr; | 327 | cmdedit_prompt = prmt_ptr; |
| @@ -359,7 +359,7 @@ static void parse_prompt(const char *prmt_ptr) | |||
| 359 | break; | 359 | break; |
| 360 | c = *prmt_ptr++; | 360 | c = *prmt_ptr++; |
| 361 | switch (c) { | 361 | switch (c) { |
| 362 | #ifdef BB_FEATURE_GETUSERNAME_AND_HOMEDIR | 362 | #ifdef CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR |
| 363 | case 'u': | 363 | case 'u': |
| 364 | pbuf = user_buf; | 364 | pbuf = user_buf; |
| 365 | break; | 365 | break; |
| @@ -382,7 +382,7 @@ static void parse_prompt(const char *prmt_ptr) | |||
| 382 | case '$': | 382 | case '$': |
| 383 | c = my_euid == 0 ? '#' : '$'; | 383 | c = my_euid == 0 ? '#' : '$'; |
| 384 | break; | 384 | break; |
| 385 | #ifdef BB_FEATURE_GETUSERNAME_AND_HOMEDIR | 385 | #ifdef CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR |
| 386 | case 'w': | 386 | case 'w': |
| 387 | pbuf = pwd_buf; | 387 | pbuf = pwd_buf; |
| 388 | l = strlen(home_pwd_buf); | 388 | l = strlen(home_pwd_buf); |
| @@ -526,7 +526,7 @@ static void cmdedit_init(void) | |||
| 526 | } | 526 | } |
| 527 | 527 | ||
| 528 | if ((handlers_sets & SET_ATEXIT) == 0) { | 528 | if ((handlers_sets & SET_ATEXIT) == 0) { |
| 529 | #ifdef BB_FEATURE_GETUSERNAME_AND_HOMEDIR | 529 | #ifdef CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR |
| 530 | struct passwd *entry; | 530 | struct passwd *entry; |
| 531 | 531 | ||
| 532 | my_euid = geteuid(); | 532 | my_euid = geteuid(); |
| @@ -537,20 +537,20 @@ static void cmdedit_init(void) | |||
| 537 | } | 537 | } |
| 538 | #endif | 538 | #endif |
| 539 | 539 | ||
| 540 | #ifdef BB_FEATURE_COMMAND_TAB_COMPLETION | 540 | #ifdef CONFIG_FEATURE_COMMAND_TAB_COMPLETION |
| 541 | 541 | ||
| 542 | #ifndef BB_FEATURE_GETUSERNAME_AND_HOMEDIR | 542 | #ifndef CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR |
| 543 | my_euid = geteuid(); | 543 | my_euid = geteuid(); |
| 544 | #endif | 544 | #endif |
| 545 | my_uid = getuid(); | 545 | my_uid = getuid(); |
| 546 | my_gid = getgid(); | 546 | my_gid = getgid(); |
| 547 | #endif /* BB_FEATURE_COMMAND_TAB_COMPLETION */ | 547 | #endif /* CONFIG_FEATURE_COMMAND_TAB_COMPLETION */ |
| 548 | handlers_sets |= SET_ATEXIT; | 548 | handlers_sets |= SET_ATEXIT; |
| 549 | atexit(cmdedit_reset_term); /* be sure to do this only once */ | 549 | atexit(cmdedit_reset_term); /* be sure to do this only once */ |
| 550 | } | 550 | } |
| 551 | } | 551 | } |
| 552 | 552 | ||
| 553 | #ifdef BB_FEATURE_COMMAND_TAB_COMPLETION | 553 | #ifdef CONFIG_FEATURE_COMMAND_TAB_COMPLETION |
| 554 | 554 | ||
| 555 | static int is_execute(const struct stat *st) | 555 | static int is_execute(const struct stat *st) |
| 556 | { | 556 | { |
| @@ -561,7 +561,7 @@ static int is_execute(const struct stat *st) | |||
| 561 | return FALSE; | 561 | return FALSE; |
| 562 | } | 562 | } |
| 563 | 563 | ||
| 564 | #ifdef BB_FEATURE_COMMAND_USERNAME_COMPLETION | 564 | #ifdef CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION |
| 565 | 565 | ||
| 566 | static char **username_tab_completion(char *ud, int *num_matches) | 566 | static char **username_tab_completion(char *ud, int *num_matches) |
| 567 | { | 567 | { |
| @@ -623,7 +623,7 @@ static char **username_tab_completion(char *ud, int *num_matches) | |||
| 623 | return (matches); | 623 | return (matches); |
| 624 | } | 624 | } |
| 625 | } | 625 | } |
| 626 | #endif /* BB_FEATURE_COMMAND_USERNAME_COMPLETION */ | 626 | #endif /* CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION */ |
| 627 | 627 | ||
| 628 | enum { | 628 | enum { |
| 629 | FIND_EXE_ONLY = 0, | 629 | FIND_EXE_ONLY = 0, |
| @@ -720,7 +720,7 @@ static char **exe_n_cwd_tab_completion(char *command, int *num_matches, | |||
| 720 | strcpy(dirbuf, command); | 720 | strcpy(dirbuf, command); |
| 721 | /* set dir only */ | 721 | /* set dir only */ |
| 722 | dirbuf[(pfind - command) + 1] = 0; | 722 | dirbuf[(pfind - command) + 1] = 0; |
| 723 | #ifdef BB_FEATURE_COMMAND_USERNAME_COMPLETION | 723 | #ifdef CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION |
| 724 | if (dirbuf[0] == '~') /* ~/... or ~user/... */ | 724 | if (dirbuf[0] == '~') /* ~/... or ~user/... */ |
| 725 | username_tab_completion(dirbuf, 0); | 725 | username_tab_completion(dirbuf, 0); |
| 726 | #endif | 726 | #endif |
| @@ -826,12 +826,12 @@ static int find_match(char *matchBuf, int *len_with_quotes) | |||
| 826 | collapse_pos(j, j + 1); | 826 | collapse_pos(j, j + 1); |
| 827 | int_buf[j] |= QUOT; | 827 | int_buf[j] |= QUOT; |
| 828 | i++; | 828 | i++; |
| 829 | #ifdef BB_FEATURE_NONPRINTABLE_INVERSE_PUT | 829 | #ifdef CONFIG_FEATURE_NONPRINTABLE_INVERSE_PUT |
| 830 | if (matchBuf[i] == '\t') /* algorithm equivalent */ | 830 | if (matchBuf[i] == '\t') /* algorithm equivalent */ |
| 831 | int_buf[j] = ' ' | QUOT; | 831 | int_buf[j] = ' ' | QUOT; |
| 832 | #endif | 832 | #endif |
| 833 | } | 833 | } |
| 834 | #ifdef BB_FEATURE_NONPRINTABLE_INVERSE_PUT | 834 | #ifdef CONFIG_FEATURE_NONPRINTABLE_INVERSE_PUT |
| 835 | else if (matchBuf[i] == '\t') | 835 | else if (matchBuf[i] == '\t') |
| 836 | int_buf[j] = ' '; | 836 | int_buf[j] = ' '; |
| 837 | #endif | 837 | #endif |
| @@ -1000,7 +1000,7 @@ static void input_tab(int *lastWasTab) | |||
| 1000 | /* Free up any memory already allocated */ | 1000 | /* Free up any memory already allocated */ |
| 1001 | input_tab(0); | 1001 | input_tab(0); |
| 1002 | 1002 | ||
| 1003 | #ifdef BB_FEATURE_COMMAND_USERNAME_COMPLETION | 1003 | #ifdef CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION |
| 1004 | /* If the word starts with `~' and there is no slash in the word, | 1004 | /* If the word starts with `~' and there is no slash in the word, |
| 1005 | * then try completing this word as a username. */ | 1005 | * then try completing this word as a username. */ |
| 1006 | 1006 | ||
| @@ -1119,7 +1119,7 @@ static void input_tab(int *lastWasTab) | |||
| 1119 | } | 1119 | } |
| 1120 | } | 1120 | } |
| 1121 | } | 1121 | } |
| 1122 | #endif /* BB_FEATURE_COMMAND_TAB_COMPLETION */ | 1122 | #endif /* CONFIG_FEATURE_COMMAND_TAB_COMPLETION */ |
| 1123 | 1123 | ||
| 1124 | static void get_previous_history(struct history **hp, struct history *p) | 1124 | static void get_previous_history(struct history **hp, struct history *p) |
| 1125 | { | 1125 | { |
| @@ -1232,7 +1232,7 @@ int cmdedit_read_input(char *prompt, char command[BUFSIZ]) | |||
| 1232 | * if the len=0 and no chars to delete */ | 1232 | * if the len=0 and no chars to delete */ |
| 1233 | if (len == 0) { | 1233 | if (len == 0) { |
| 1234 | prepare_to_die: | 1234 | prepare_to_die: |
| 1235 | #if !defined(BB_ASH) | 1235 | #if !defined(CONFIG_ASH) |
| 1236 | printf("exit"); | 1236 | printf("exit"); |
| 1237 | goto_new_line(); | 1237 | goto_new_line(); |
| 1238 | /* cmdedit_reset_term() called in atexit */ | 1238 | /* cmdedit_reset_term() called in atexit */ |
| @@ -1259,7 +1259,7 @@ prepare_to_die: | |||
| 1259 | input_backspace(); | 1259 | input_backspace(); |
| 1260 | break; | 1260 | break; |
| 1261 | case '\t': | 1261 | case '\t': |
| 1262 | #ifdef BB_FEATURE_COMMAND_TAB_COMPLETION | 1262 | #ifdef CONFIG_FEATURE_COMMAND_TAB_COMPLETION |
| 1263 | input_tab(&lastWasTab); | 1263 | input_tab(&lastWasTab); |
| 1264 | #endif | 1264 | #endif |
| 1265 | break; | 1265 | break; |
| @@ -1299,7 +1299,7 @@ prepare_to_die: | |||
| 1299 | goto prepare_to_die; | 1299 | goto prepare_to_die; |
| 1300 | } | 1300 | } |
| 1301 | switch (c) { | 1301 | switch (c) { |
| 1302 | #ifdef BB_FEATURE_COMMAND_TAB_COMPLETION | 1302 | #ifdef CONFIG_FEATURE_COMMAND_TAB_COMPLETION |
| 1303 | case '\t': /* Alt-Tab */ | 1303 | case '\t': /* Alt-Tab */ |
| 1304 | 1304 | ||
| 1305 | input_tab(&lastWasTab); | 1305 | input_tab(&lastWasTab); |
| @@ -1367,7 +1367,7 @@ prepare_to_die: | |||
| 1367 | } | 1367 | } |
| 1368 | 1368 | ||
| 1369 | default: /* If it's regular input, do the normal thing */ | 1369 | default: /* If it's regular input, do the normal thing */ |
| 1370 | #ifdef BB_FEATURE_NONPRINTABLE_INVERSE_PUT | 1370 | #ifdef CONFIG_FEATURE_NONPRINTABLE_INVERSE_PUT |
| 1371 | /* Control-V -- Add non-printable symbol */ | 1371 | /* Control-V -- Add non-printable symbol */ |
| 1372 | if (c == 22) { | 1372 | if (c == 22) { |
| 1373 | if (safe_read(0, &c, 1) < 1) | 1373 | if (safe_read(0, &c, 1) < 1) |
| @@ -1457,7 +1457,7 @@ prepare_to_die: | |||
| 1457 | history_counter++; | 1457 | history_counter++; |
| 1458 | } | 1458 | } |
| 1459 | } | 1459 | } |
| 1460 | #if defined(BB_FEATURE_SH_FANCY_PROMPT) | 1460 | #if defined(CONFIG_FEATURE_SH_FANCY_PROMPT) |
| 1461 | num_ok_lines++; | 1461 | num_ok_lines++; |
| 1462 | #endif | 1462 | #endif |
| 1463 | } | 1463 | } |
| @@ -1465,10 +1465,10 @@ prepare_to_die: | |||
| 1465 | command[len++] = '\n'; /* set '\n' */ | 1465 | command[len++] = '\n'; /* set '\n' */ |
| 1466 | command[len] = 0; | 1466 | command[len] = 0; |
| 1467 | } | 1467 | } |
| 1468 | #if defined(BB_FEATURE_CLEAN_UP) && defined(BB_FEATURE_COMMAND_TAB_COMPLETION) | 1468 | #if defined(CONFIG_FEATURE_CLEAN_UP) && defined(CONFIG_FEATURE_COMMAND_TAB_COMPLETION) |
| 1469 | input_tab(0); /* strong free */ | 1469 | input_tab(0); /* strong free */ |
| 1470 | #endif | 1470 | #endif |
| 1471 | #if defined(BB_FEATURE_SH_FANCY_PROMPT) | 1471 | #if defined(CONFIG_FEATURE_SH_FANCY_PROMPT) |
| 1472 | free(cmdedit_prompt); | 1472 | free(cmdedit_prompt); |
| 1473 | #endif | 1473 | #endif |
| 1474 | cmdedit_reset_term(); | 1474 | cmdedit_reset_term(); |
| @@ -1477,7 +1477,7 @@ prepare_to_die: | |||
| 1477 | 1477 | ||
| 1478 | 1478 | ||
| 1479 | 1479 | ||
| 1480 | #endif /* BB_FEATURE_COMMAND_EDITING */ | 1480 | #endif /* CONFIG_FEATURE_COMMAND_EDITING */ |
| 1481 | 1481 | ||
| 1482 | 1482 | ||
| 1483 | #ifdef TEST | 1483 | #ifdef TEST |
| @@ -1485,7 +1485,7 @@ prepare_to_die: | |||
| 1485 | const char *applet_name = "debug stuff usage"; | 1485 | const char *applet_name = "debug stuff usage"; |
| 1486 | const char *memory_exhausted = "Memory exhausted"; | 1486 | const char *memory_exhausted = "Memory exhausted"; |
| 1487 | 1487 | ||
| 1488 | #ifdef BB_FEATURE_NONPRINTABLE_INVERSE_PUT | 1488 | #ifdef CONFIG_FEATURE_NONPRINTABLE_INVERSE_PUT |
| 1489 | #include <locale.h> | 1489 | #include <locale.h> |
| 1490 | #endif | 1490 | #endif |
| 1491 | 1491 | ||
| @@ -1493,7 +1493,7 @@ int main(int argc, char **argv) | |||
| 1493 | { | 1493 | { |
| 1494 | char buff[BUFSIZ]; | 1494 | char buff[BUFSIZ]; |
| 1495 | char *prompt = | 1495 | char *prompt = |
| 1496 | #if defined(BB_FEATURE_SH_FANCY_PROMPT) | 1496 | #if defined(CONFIG_FEATURE_SH_FANCY_PROMPT) |
| 1497 | "\\[\\033[32;1m\\]\\u@\\[\\x1b[33;1m\\]\\h:\ | 1497 | "\\[\\033[32;1m\\]\\u@\\[\\x1b[33;1m\\]\\h:\ |
| 1498 | \\[\\033[34;1m\\]\\w\\[\\033[35;1m\\] \ | 1498 | \\[\\033[34;1m\\]\\w\\[\\033[35;1m\\] \ |
| 1499 | \\!\\[\\e[36;1m\\]\\$ \\[\\E[0m\\]"; | 1499 | \\!\\[\\e[36;1m\\]\\$ \\[\\E[0m\\]"; |
| @@ -1501,7 +1501,7 @@ int main(int argc, char **argv) | |||
| 1501 | "% "; | 1501 | "% "; |
| 1502 | #endif | 1502 | #endif |
| 1503 | 1503 | ||
| 1504 | #ifdef BB_FEATURE_NONPRINTABLE_INVERSE_PUT | 1504 | #ifdef CONFIG_FEATURE_NONPRINTABLE_INVERSE_PUT |
| 1505 | setlocale(LC_ALL, ""); | 1505 | setlocale(LC_ALL, ""); |
| 1506 | #endif | 1506 | #endif |
| 1507 | while(1) { | 1507 | while(1) { |
diff --git a/shell/config.in b/shell/config.in new file mode 100644 index 000000000..e33669a7b --- /dev/null +++ b/shell/config.in | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | # | ||
| 2 | # For a description of the syntax of this configuration file, | ||
| 3 | # see scripts/kbuild/config-language.txt. | ||
| 4 | # | ||
| 5 | |||
| 6 | mainmenu_option next_comment | ||
| 7 | comment 'Bourne Shell' | ||
| 8 | |||
| 9 | choice 'Choose your default shell' \ | ||
| 10 | "ash CONFIG_FEATURE_SH_IS_ASH \ | ||
| 11 | hush CONFIG_FEATURE_SH_IS_HUSH \ | ||
| 12 | lash CONFIG_FEATURE_SH_IS_LASH \ | ||
| 13 | msh CONFIG_FEATURE_SH_IS_MSH \ | ||
| 14 | none CONFIG_FEATURE_SH_IS_NONE" | ||
| 15 | |||
| 16 | if [ "$CONFIG_FEATURE_SH_IS_ASH" = "y" ] ; then | ||
| 17 | define_bool CONFIG_ASH y | ||
| 18 | else | ||
| 19 | bool 'ash' CONFIG_ASH | ||
| 20 | fi | ||
| 21 | |||
| 22 | if [ "$CONFIG_FEATURE_SH_IS_HUSH" = "y" ] ; then | ||
| 23 | define_bool CONFIG_HUSH y | ||
| 24 | else | ||
| 25 | bool 'hush' CONFIG_HUSH | ||
| 26 | fi | ||
| 27 | |||
| 28 | if [ "$CONFIG_FEATURE_SH_IS_LASH" = "y" ] ; then | ||
| 29 | define_bool CONFIG_LASH y | ||
| 30 | else | ||
| 31 | bool 'lash' CONFIG_LASH | ||
| 32 | fi | ||
| 33 | |||
| 34 | if [ "$CONFIG_FEATURE_SH_IS_MSH" = "y" ] ; then | ||
| 35 | define_bool CONFIG_MSH y | ||
| 36 | else | ||
| 37 | bool 'msh' CONFIG_MSH | ||
| 38 | fi | ||
| 39 | |||
| 40 | |||
| 41 | comment 'Bourne Shell Options' | ||
| 42 | bool 'command line editing' CONFIG_FEATURE_COMMAND_EDITING | ||
| 43 | bool 'tab completion' CONFIG_FEATURE_COMMAND_TAB_COMPLETION | ||
| 44 | bool 'username completion' CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION | ||
| 45 | bool 'Standalone shell' CONFIG_FEATURE_SH_STANDALONE_SHELL | ||
| 46 | bool 'Standalone shell -- applets always win' CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN | ||
| 47 | bool 'Fancy shell prompts' CONFIG_FEATURE_SH_FANCY_PROMPT | ||
| 48 | bool 'Hide message on interactive shell startup' CONFIG_FEATURE_SH_EXTRA_QUIET | ||
| 49 | |||
| 50 | endmenu | ||
| 51 | |||
diff --git a/shell/hush.c b/shell/hush.c index cb0e6e980..d37842b79 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
| @@ -113,7 +113,8 @@ | |||
| 113 | #define applet_name "hush" | 113 | #define applet_name "hush" |
| 114 | #include "standalone.h" | 114 | #include "standalone.h" |
| 115 | #define hush_main main | 115 | #define hush_main main |
| 116 | #undef BB_FEATURE_SH_FANCY_PROMPT | 116 | #undef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 117 | #define BB_BANNER | ||
| 117 | #endif | 118 | #endif |
| 118 | 119 | ||
| 119 | typedef enum { | 120 | typedef enum { |
| @@ -836,7 +837,7 @@ static int static_peek(struct in_str *i) | |||
| 836 | 837 | ||
| 837 | static inline void cmdedit_set_initial_prompt(void) | 838 | static inline void cmdedit_set_initial_prompt(void) |
| 838 | { | 839 | { |
| 839 | #ifndef BB_FEATURE_SH_FANCY_PROMPT | 840 | #ifndef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 840 | PS1 = NULL; | 841 | PS1 = NULL; |
| 841 | #else | 842 | #else |
| 842 | PS1 = getenv("PS1"); | 843 | PS1 = getenv("PS1"); |
| @@ -848,7 +849,7 @@ static inline void cmdedit_set_initial_prompt(void) | |||
| 848 | static inline void setup_prompt_string(int promptmode, char **prompt_str) | 849 | static inline void setup_prompt_string(int promptmode, char **prompt_str) |
| 849 | { | 850 | { |
| 850 | debug_printf("setup_prompt_string %d ",promptmode); | 851 | debug_printf("setup_prompt_string %d ",promptmode); |
| 851 | #ifndef BB_FEATURE_SH_FANCY_PROMPT | 852 | #ifndef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 852 | /* Set up the prompt */ | 853 | /* Set up the prompt */ |
| 853 | if (promptmode == 1) { | 854 | if (promptmode == 1) { |
| 854 | if (PS1) | 855 | if (PS1) |
| @@ -871,7 +872,7 @@ static void get_user_input(struct in_str *i) | |||
| 871 | static char the_command[BUFSIZ]; | 872 | static char the_command[BUFSIZ]; |
| 872 | 873 | ||
| 873 | setup_prompt_string(i->promptmode, &prompt_str); | 874 | setup_prompt_string(i->promptmode, &prompt_str); |
| 874 | #ifdef BB_FEATURE_COMMAND_EDITING | 875 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 875 | /* | 876 | /* |
| 876 | ** enable command line editing only while a command line | 877 | ** enable command line editing only while a command line |
| 877 | ** is actually being read; otherwise, we'll end up bequeathing | 878 | ** is actually being read; otherwise, we'll end up bequeathing |
| @@ -1085,18 +1086,18 @@ static void pseudo_exec(struct child_prog *child) | |||
| 1085 | * really dislike relying on /proc for things. We could exec ourself | 1086 | * really dislike relying on /proc for things. We could exec ourself |
| 1086 | * from global_argv[0], but if we are in a chroot, we may not be able | 1087 | * from global_argv[0], but if we are in a chroot, we may not be able |
| 1087 | * to find ourself... */ | 1088 | * to find ourself... */ |
| 1088 | #ifdef BB_FEATURE_SH_STANDALONE_SHELL | 1089 | #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL |
| 1089 | { | 1090 | { |
| 1090 | int argc_l; | 1091 | int argc_l; |
| 1091 | char** argv_l=child->argv; | 1092 | char** argv_l=child->argv; |
| 1092 | char *name = child->argv[0]; | 1093 | char *name = child->argv[0]; |
| 1093 | 1094 | ||
| 1094 | #ifdef BB_FEATURE_SH_APPLETS_ALWAYS_WIN | 1095 | #ifdef CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN |
| 1095 | /* Following discussions from November 2000 on the busybox mailing | 1096 | /* Following discussions from November 2000 on the busybox mailing |
| 1096 | * list, the default configuration, (without | 1097 | * list, the default configuration, (without |
| 1097 | * get_last_path_component()) lets the user force use of an | 1098 | * get_last_path_component()) lets the user force use of an |
| 1098 | * external command by specifying the full (with slashes) filename. | 1099 | * external command by specifying the full (with slashes) filename. |
| 1099 | * If you enable BB_FEATURE_SH_APPLETS_ALWAYS_WIN, then applets | 1100 | * If you enable CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN, then applets |
| 1100 | * _aways_ override external commands, so if you want to run | 1101 | * _aways_ override external commands, so if you want to run |
| 1101 | * /bin/cat, it will use BusyBox cat even if /bin/cat exists on the | 1102 | * /bin/cat, it will use BusyBox cat even if /bin/cat exists on the |
| 1102 | * filesystem and is _not_ busybox. Some systems may want this, | 1103 | * filesystem and is _not_ busybox. Some systems may want this, |
| @@ -2586,7 +2587,7 @@ int hush_main(int argc, char **argv) | |||
| 2586 | 2587 | ||
| 2587 | /* Initialize some more globals to non-zero values */ | 2588 | /* Initialize some more globals to non-zero values */ |
| 2588 | set_cwd(); | 2589 | set_cwd(); |
| 2589 | #ifdef BB_FEATURE_COMMAND_EDITING | 2590 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 2590 | cmdedit_set_initial_prompt(); | 2591 | cmdedit_set_initial_prompt(); |
| 2591 | #else | 2592 | #else |
| 2592 | PS1 = NULL; | 2593 | PS1 = NULL; |
| @@ -2655,7 +2656,7 @@ int hush_main(int argc, char **argv) | |||
| 2655 | debug_printf("\ninteractive=%d\n", interactive); | 2656 | debug_printf("\ninteractive=%d\n", interactive); |
| 2656 | if (interactive) { | 2657 | if (interactive) { |
| 2657 | /* Looks like they want an interactive shell */ | 2658 | /* Looks like they want an interactive shell */ |
| 2658 | #ifndef BB_FEATURE_SH_EXTRA_QUIET | 2659 | #ifndef CONFIG_FEATURE_SH_EXTRA_QUIET |
| 2659 | printf( "\n\n" BB_BANNER " hush - the humble shell v0.01 (testing)\n"); | 2660 | printf( "\n\n" BB_BANNER " hush - the humble shell v0.01 (testing)\n"); |
| 2660 | printf( "Enter 'help' for a list of built-in commands.\n\n"); | 2661 | printf( "Enter 'help' for a list of built-in commands.\n\n"); |
| 2661 | #endif | 2662 | #endif |
| @@ -2673,7 +2674,7 @@ int hush_main(int argc, char **argv) | |||
| 2673 | input = xfopen(argv[optind], "r"); | 2674 | input = xfopen(argv[optind], "r"); |
| 2674 | opt = parse_file_outer(input); | 2675 | opt = parse_file_outer(input); |
| 2675 | 2676 | ||
| 2676 | #ifdef BB_FEATURE_CLEAN_UP | 2677 | #ifdef CONFIG_FEATURE_CLEAN_UP |
| 2677 | fclose(input); | 2678 | fclose(input); |
| 2678 | if (cwd && cwd != unknown) | 2679 | if (cwd && cwd != unknown) |
| 2679 | free((char*)cwd); | 2680 | free((char*)cwd); |
diff --git a/shell/lash.c b/shell/lash.c index ffdec8781..004d9495a 100644 --- a/shell/lash.c +++ b/shell/lash.c | |||
| @@ -2,8 +2,8 @@ | |||
| 2 | /* | 2 | /* |
| 3 | * lash -- the BusyBox Lame-Ass SHell | 3 | * lash -- the BusyBox Lame-Ass SHell |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 1999,2000,2001 by Lineo, inc. | 5 | * Copyright (C) 1999,2000 by Lineo, inc. and Erik Andersen |
| 6 | * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org> | 6 | * Copyright (C) 1999,2000,2001 by Erik Andersen <andersee@debian.org> |
| 7 | * | 7 | * |
| 8 | * Based in part on ladsh.c by Michael K. Johnson and Erik W. Troan, which is | 8 | * Based in part on ladsh.c by Michael K. Johnson and Erik W. Troan, which is |
| 9 | * under the following liberal license: "We have placed this source code in the | 9 | * under the following liberal license: "We have placed this source code in the |
| @@ -25,8 +25,10 @@ | |||
| 25 | * | 25 | * |
| 26 | */ | 26 | */ |
| 27 | 27 | ||
| 28 | /* This shell's parsing engine is officially at a dead-end. | 28 | /* This shell's parsing engine is officially at a dead-end. Future |
| 29 | * Future work shell work should be done using hush.c | 29 | * work shell work should be done using hush, msh, or ash. This is |
| 30 | * still a very useful, small shell -- it just don't need any more | ||
| 31 | * features beyond what it already has... | ||
| 30 | */ | 32 | */ |
| 31 | 33 | ||
| 32 | //For debugging/development on the shell only... | 34 | //For debugging/development on the shell only... |
| @@ -48,7 +50,7 @@ | |||
| 48 | #include "busybox.h" | 50 | #include "busybox.h" |
| 49 | #include "cmdedit.h" | 51 | #include "cmdedit.h" |
| 50 | 52 | ||
| 51 | #ifdef BB_LOCALE_SUPPORT | 53 | #ifdef CONFIG_LOCALE_SUPPORT |
| 52 | #include <locale.h> | 54 | #include <locale.h> |
| 53 | #endif | 55 | #endif |
| 54 | 56 | ||
| @@ -390,12 +392,12 @@ static int builtin_export(struct child_prog *child) | |||
| 390 | res = putenv(v); | 392 | res = putenv(v); |
| 391 | if (res) | 393 | if (res) |
| 392 | fprintf(stderr, "export: %m\n"); | 394 | fprintf(stderr, "export: %m\n"); |
| 393 | #ifdef BB_FEATURE_SH_FANCY_PROMPT | 395 | #ifdef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 394 | if (strncmp(v, "PS1=", 4)==0) | 396 | if (strncmp(v, "PS1=", 4)==0) |
| 395 | PS1 = getenv("PS1"); | 397 | PS1 = getenv("PS1"); |
| 396 | #endif | 398 | #endif |
| 397 | 399 | ||
| 398 | #ifdef BB_LOCALE_SUPPORT | 400 | #ifdef CONFIG_LOCALE_SUPPORT |
| 399 | if(strncmp(v, "LC_ALL=", 7)==0) | 401 | if(strncmp(v, "LC_ALL=", 7)==0) |
| 400 | setlocale(LC_ALL, getenv("LC_ALL")); | 402 | setlocale(LC_ALL, getenv("LC_ALL")); |
| 401 | if(strncmp(v, "LC_CTYPE=", 9)==0) | 403 | if(strncmp(v, "LC_CTYPE=", 9)==0) |
| @@ -661,7 +663,7 @@ static void restore_redirects(int squirrel[]) | |||
| 661 | 663 | ||
| 662 | static inline void cmdedit_set_initial_prompt(void) | 664 | static inline void cmdedit_set_initial_prompt(void) |
| 663 | { | 665 | { |
| 664 | #ifndef BB_FEATURE_SH_FANCY_PROMPT | 666 | #ifndef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 665 | PS1 = NULL; | 667 | PS1 = NULL; |
| 666 | #else | 668 | #else |
| 667 | PS1 = getenv("PS1"); | 669 | PS1 = getenv("PS1"); |
| @@ -672,7 +674,7 @@ static inline void cmdedit_set_initial_prompt(void) | |||
| 672 | 674 | ||
| 673 | static inline void setup_prompt_string(char **prompt_str) | 675 | static inline void setup_prompt_string(char **prompt_str) |
| 674 | { | 676 | { |
| 675 | #ifndef BB_FEATURE_SH_FANCY_PROMPT | 677 | #ifndef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 676 | /* Set up the prompt */ | 678 | /* Set up the prompt */ |
| 677 | if (shell_context == 0) { | 679 | if (shell_context == 0) { |
| 678 | if (PS1) | 680 | if (PS1) |
| @@ -706,7 +708,7 @@ static int get_command(FILE * source, char *command) | |||
| 706 | if (source == stdin) { | 708 | if (source == stdin) { |
| 707 | setup_prompt_string(&prompt_str); | 709 | setup_prompt_string(&prompt_str); |
| 708 | 710 | ||
| 709 | #ifdef BB_FEATURE_COMMAND_EDITING | 711 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 710 | /* | 712 | /* |
| 711 | ** enable command line editing only while a command line | 713 | ** enable command line editing only while a command line |
| 712 | ** is actually being read; otherwise, we'll end up bequeathing | 714 | ** is actually being read; otherwise, we'll end up bequeathing |
| @@ -1201,7 +1203,7 @@ static int parse_command(char **command_ptr, struct job *job, int *inbg) | |||
| 1201 | static int pseudo_exec(struct child_prog *child) | 1203 | static int pseudo_exec(struct child_prog *child) |
| 1202 | { | 1204 | { |
| 1203 | struct built_in_command *x; | 1205 | struct built_in_command *x; |
| 1204 | #ifdef BB_FEATURE_SH_STANDALONE_SHELL | 1206 | #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL |
| 1205 | char *name; | 1207 | char *name; |
| 1206 | #endif | 1208 | #endif |
| 1207 | 1209 | ||
| @@ -1223,7 +1225,7 @@ static int pseudo_exec(struct child_prog *child) | |||
| 1223 | exit (x->function(child)); | 1225 | exit (x->function(child)); |
| 1224 | } | 1226 | } |
| 1225 | } | 1227 | } |
| 1226 | #ifdef BB_FEATURE_SH_STANDALONE_SHELL | 1228 | #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL |
| 1227 | /* Check if the command matches any busybox internal | 1229 | /* Check if the command matches any busybox internal |
| 1228 | * commands ("applets") here. Following discussions from | 1230 | * commands ("applets") here. Following discussions from |
| 1229 | * November 2000 on busybox@opensource.lineo.com, don't use | 1231 | * November 2000 on busybox@opensource.lineo.com, don't use |
| @@ -1237,8 +1239,8 @@ static int pseudo_exec(struct child_prog *child) | |||
| 1237 | */ | 1239 | */ |
| 1238 | name = child->argv[0]; | 1240 | name = child->argv[0]; |
| 1239 | 1241 | ||
| 1240 | #ifdef BB_FEATURE_SH_APPLETS_ALWAYS_WIN | 1242 | #ifdef CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN |
| 1241 | /* If you enable BB_FEATURE_SH_APPLETS_ALWAYS_WIN, then | 1243 | /* If you enable CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN, then |
| 1242 | * if you run /bin/cat, it will use BusyBox cat even if | 1244 | * if you run /bin/cat, it will use BusyBox cat even if |
| 1243 | * /bin/cat exists on the filesystem and is _not_ busybox. | 1245 | * /bin/cat exists on the filesystem and is _not_ busybox. |
| 1244 | * Some systems want this, others do not. Choose wisely. :-) | 1246 | * Some systems want this, others do not. Choose wisely. :-) |
| @@ -1504,7 +1506,7 @@ static int busy_loop(FILE * input) | |||
| 1504 | } | 1506 | } |
| 1505 | 1507 | ||
| 1506 | 1508 | ||
| 1507 | #ifdef BB_FEATURE_CLEAN_UP | 1509 | #ifdef CONFIG_FEATURE_CLEAN_UP |
| 1508 | void free_memory(void) | 1510 | void free_memory(void) |
| 1509 | { | 1511 | { |
| 1510 | if (cwd && cwd!=unknown) { | 1512 | if (cwd && cwd!=unknown) { |
| @@ -1611,7 +1613,7 @@ int lash_main(int argc_l, char **argv_l) | |||
| 1611 | if (interactive==TRUE) { | 1613 | if (interactive==TRUE) { |
| 1612 | //printf( "optind=%d argv[optind]='%s'\n", optind, argv[optind]); | 1614 | //printf( "optind=%d argv[optind]='%s'\n", optind, argv[optind]); |
| 1613 | /* Looks like they want an interactive shell */ | 1615 | /* Looks like they want an interactive shell */ |
| 1614 | #ifndef BB_FEATURE_SH_EXTRA_QUIET | 1616 | #ifndef CONFIG_FEATURE_SH_EXTRA_QUIET |
| 1615 | printf( "\n\n" BB_BANNER " Built-in shell (lash)\n"); | 1617 | printf( "\n\n" BB_BANNER " Built-in shell (lash)\n"); |
| 1616 | printf( "Enter 'help' for a list of built-in commands.\n\n"); | 1618 | printf( "Enter 'help' for a list of built-in commands.\n\n"); |
| 1617 | #endif | 1619 | #endif |
| @@ -1626,11 +1628,11 @@ int lash_main(int argc_l, char **argv_l) | |||
| 1626 | if (!cwd) | 1628 | if (!cwd) |
| 1627 | cwd = unknown; | 1629 | cwd = unknown; |
| 1628 | 1630 | ||
| 1629 | #ifdef BB_FEATURE_CLEAN_UP | 1631 | #ifdef CONFIG_FEATURE_CLEAN_UP |
| 1630 | atexit(free_memory); | 1632 | atexit(free_memory); |
| 1631 | #endif | 1633 | #endif |
| 1632 | 1634 | ||
| 1633 | #ifdef BB_FEATURE_COMMAND_EDITING | 1635 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 1634 | cmdedit_set_initial_prompt(); | 1636 | cmdedit_set_initial_prompt(); |
| 1635 | #else | 1637 | #else |
| 1636 | PS1 = NULL; | 1638 | PS1 = NULL; |
diff --git a/shell/msh.c b/shell/msh.c index 5c4ec1019..a2f98c837 100644 --- a/shell/msh.c +++ b/shell/msh.c | |||
| @@ -681,7 +681,7 @@ static void * brktop; | |||
| 681 | static void * brkaddr; | 681 | static void * brkaddr; |
| 682 | 682 | ||
| 683 | 683 | ||
| 684 | #ifdef BB_FEATURE_COMMAND_EDITING | 684 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 685 | static char * current_prompt; | 685 | static char * current_prompt; |
| 686 | #endif | 686 | #endif |
| 687 | 687 | ||
| @@ -732,7 +732,7 @@ extern int msh_main(int argc, char **argv) | |||
| 732 | setval(ifs, " \t\n"); | 732 | setval(ifs, " \t\n"); |
| 733 | 733 | ||
| 734 | prompt = lookup("PS1"); | 734 | prompt = lookup("PS1"); |
| 735 | #ifdef BB_FEATURE_SH_FANCY_PROMPT | 735 | #ifdef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 736 | if (prompt->value == null) | 736 | if (prompt->value == null) |
| 737 | #endif | 737 | #endif |
| 738 | setval(prompt, "$ "); | 738 | setval(prompt, "$ "); |
| @@ -741,7 +741,7 @@ extern int msh_main(int argc, char **argv) | |||
| 741 | prompt->status &= ~EXPORT; | 741 | prompt->status &= ~EXPORT; |
| 742 | } | 742 | } |
| 743 | cprompt = lookup("PS2"); | 743 | cprompt = lookup("PS2"); |
| 744 | #ifdef BB_FEATURE_SH_FANCY_PROMPT | 744 | #ifdef CONFIG_FEATURE_SH_FANCY_PROMPT |
| 745 | if (cprompt->value == null) | 745 | if (cprompt->value == null) |
| 746 | #endif | 746 | #endif |
| 747 | setval(cprompt, "> "); | 747 | setval(cprompt, "> "); |
| @@ -801,7 +801,7 @@ extern int msh_main(int argc, char **argv) | |||
| 801 | PUSHIO(afile, 0, iof); | 801 | PUSHIO(afile, 0, iof); |
| 802 | if (isatty(0) && isatty(1) && !cflag) { | 802 | if (isatty(0) && isatty(1) && !cflag) { |
| 803 | interactive++; | 803 | interactive++; |
| 804 | #ifndef BB_FEATURE_SH_EXTRA_QUIET | 804 | #ifndef CONFIG_FEATURE_SH_EXTRA_QUIET |
| 805 | printf( "\n\n" BB_BANNER " Built-in shell (msh)\n"); | 805 | printf( "\n\n" BB_BANNER " Built-in shell (msh)\n"); |
| 806 | printf( "Enter 'help' for a list of built-in commands.\n\n"); | 806 | printf( "Enter 'help' for a list of built-in commands.\n\n"); |
| 807 | #endif | 807 | #endif |
| @@ -835,7 +835,7 @@ extern int msh_main(int argc, char **argv) | |||
| 835 | 835 | ||
| 836 | for (;;) { | 836 | for (;;) { |
| 837 | if (interactive && e.iop <= iostack) { | 837 | if (interactive && e.iop <= iostack) { |
| 838 | #ifdef BB_FEATURE_COMMAND_EDITING | 838 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 839 | current_prompt=prompt->value; | 839 | current_prompt=prompt->value; |
| 840 | #else | 840 | #else |
| 841 | prs(prompt->value); | 841 | prs(prompt->value); |
| @@ -2171,7 +2171,7 @@ loop: | |||
| 2171 | startl = 1; | 2171 | startl = 1; |
| 2172 | if (multiline || cf & CONTIN) { | 2172 | if (multiline || cf & CONTIN) { |
| 2173 | if (interactive && e.iop <= iostack) { | 2173 | if (interactive && e.iop <= iostack) { |
| 2174 | #ifdef BB_FEATURE_COMMAND_EDITING | 2174 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 2175 | current_prompt=cprompt->value; | 2175 | current_prompt=cprompt->value; |
| 2176 | #else | 2176 | #else |
| 2177 | prs(cprompt->value); | 2177 | prs(cprompt->value); |
| @@ -2224,7 +2224,7 @@ register int c, c1; | |||
| 2224 | return(YYERRCODE); | 2224 | return(YYERRCODE); |
| 2225 | } | 2225 | } |
| 2226 | if (interactive && c == '\n' && e.iop <= iostack) { | 2226 | if (interactive && c == '\n' && e.iop <= iostack) { |
| 2227 | #ifdef BB_FEATURE_COMMAND_EDITING | 2227 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 2228 | current_prompt=cprompt->value; | 2228 | current_prompt=cprompt->value; |
| 2229 | #else | 2229 | #else |
| 2230 | prs(cprompt->value); | 2230 | prs(cprompt->value); |
| @@ -2838,9 +2838,9 @@ char *c, **v, **envp; | |||
| 2838 | register char *sp, *tp; | 2838 | register char *sp, *tp; |
| 2839 | int eacces = 0, asis = 0; | 2839 | int eacces = 0, asis = 0; |
| 2840 | 2840 | ||
| 2841 | #ifdef BB_FEATURE_SH_STANDALONE_SHELL | 2841 | #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL |
| 2842 | char *name = c; | 2842 | char *name = c; |
| 2843 | #ifdef BB_FEATURE_SH_APPLETS_ALWAYS_WIN | 2843 | #ifdef CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN |
| 2844 | name = get_last_path_component(name); | 2844 | name = get_last_path_component(name); |
| 2845 | #endif | 2845 | #endif |
| 2846 | optind = 1; | 2846 | optind = 1; |
| @@ -2960,7 +2960,7 @@ static int dohelp() | |||
| 2960 | col = 0; | 2960 | col = 0; |
| 2961 | } | 2961 | } |
| 2962 | } | 2962 | } |
| 2963 | #ifdef BB_FEATURE_SH_STANDALONE_SHELL | 2963 | #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL |
| 2964 | { | 2964 | { |
| 2965 | int i; | 2965 | int i; |
| 2966 | const struct BB_applet *applet; | 2966 | const struct BB_applet *applet; |
| @@ -4256,7 +4256,7 @@ readc() | |||
| 4256 | if (multiline) | 4256 | if (multiline) |
| 4257 | return e.iop->prev = 0; | 4257 | return e.iop->prev = 0; |
| 4258 | if (interactive && e.iop == iostack+1) { | 4258 | if (interactive && e.iop == iostack+1) { |
| 4259 | #ifdef BB_FEATURE_COMMAND_EDITING | 4259 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 4260 | current_prompt=prompt->value; | 4260 | current_prompt=prompt->value; |
| 4261 | #else | 4261 | #else |
| 4262 | prs(prompt->value); | 4262 | prs(prompt->value); |
| @@ -4462,7 +4462,7 @@ register struct ioarg *ap; | |||
| 4462 | return *bp->bufp++ & 0177; | 4462 | return *bp->bufp++ & 0177; |
| 4463 | } | 4463 | } |
| 4464 | 4464 | ||
| 4465 | #ifdef BB_FEATURE_COMMAND_EDITING | 4465 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 4466 | if (interactive) { | 4466 | if (interactive) { |
| 4467 | static char mycommand[BUFSIZ]; | 4467 | static char mycommand[BUFSIZ]; |
| 4468 | static int position = 0, size = 0; | 4468 | static int position = 0, size = 0; |
| @@ -4721,7 +4721,7 @@ int ec; | |||
| 4721 | e.iobase = e.iop; | 4721 | e.iobase = e.iop; |
| 4722 | for (;;) { | 4722 | for (;;) { |
| 4723 | if (interactive && e.iop <= iostack) { | 4723 | if (interactive && e.iop <= iostack) { |
| 4724 | #ifdef BB_FEATURE_COMMAND_EDITING | 4724 | #ifdef CONFIG_FEATURE_COMMAND_EDITING |
| 4725 | current_prompt=cprompt->value; | 4725 | current_prompt=cprompt->value; |
| 4726 | #else | 4726 | #else |
| 4727 | prs(cprompt->value); | 4727 | prs(cprompt->value); |
