[BusyBox-cvs] busybox/shell ash.c,1.87,1.88 cmdedit.c,1.87,1.88
Glenn McGrath
bug1 at busybox.net
Wed Feb 4 08:24:42 UTC 2004
Update of /var/cvs/busybox/shell
In directory nail:/tmp/cvs-serv15012/shell
Modified Files:
ash.c cmdedit.c
Log Message:
Vodz last_patch_125_2, this patch have:
- synced with dash 0.4.21
- better handle trap "cmds..." SIGINT (strange, i make bad hack for ash
and cmdedit, but this work only with this...)
- may be haven`t problem with Ctrl-D
Index: ash.c
===================================================================
RCS file: /var/cvs/busybox/shell/ash.c,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -d -r1.87 -r1.88
--- ash.c 25 Jan 2004 08:46:10 -0000 1.87
+++ ash.c 4 Feb 2004 08:24:39 -0000 1.88
@@ -3476,10 +3476,17 @@
}
+static inline int
+goodname(const char *p)
+{
+ return !*endofname(p);
+}
+
/*
* Search for a command. This is called before we fork so that the
* location of the command will be available in the parent as well as
- * the child.
+ * the child. The check for "goodname" is an overly conservative
+ * check that the name will not be subject to expansion.
*/
static void
@@ -3488,7 +3495,9 @@
struct cmdentry entry;
if (n->type == NCMD && n->ncmd.args)
- find_command(n->ncmd.args->narg.text, &entry, 0, pathval());
+ if (goodname(n->ncmd.args->narg.text))
+ find_command(n->ncmd.args->narg.text, &entry, 0,
+ pathval());
}
@@ -6020,7 +6029,12 @@
nr = cmdedit_read_input((char *) cmdedit_prompt, buf);
if(nr == 0) {
/* Ctrl+C presend */
- raise(SIGINT);
+ if(trap[SIGINT]) {
+ buf[0] = '\n';
+ buf[1] = 0;
+ raise(SIGINT);
+ return 1;
+ }
goto retry;
}
if(nr < 0) {
@@ -7425,6 +7439,8 @@
const char *p;
char s[2];
+ if (!n)
+ return;
switch (n->type) {
default:
#if DEBUG
@@ -9295,11 +9311,6 @@
static void setprompt(int);
-static inline int
-goodname(const char *p)
-{
- return !*endofname(p);
-}
static inline int
isassignment(const char *p)
@@ -10755,7 +10766,7 @@
* more letters, underscores, and digits).
*/
-char *
+static char *
endofname(const char *name)
{
char *p;
@@ -11835,12 +11846,13 @@
struct jmploc loc;
char *p;
int status;
+ int jmp;
+ jmp = setjmp(loc.loc);
status = exitstatus;
TRACE(("pid %d, exitshell(%d)\n", getpid(), status));
- if (setjmp(loc.loc)) {
+ if (jmp)
goto out;
- }
handler = &loc;
if ((p = trap[0]) != NULL && *p != '\0') {
trap[0] = NULL;
@@ -12713,7 +12725,41 @@
struct rlimit limit;
what = 'f';
- while ((optc = nextopt("HSatfdsmcnplvw")) != '\0')
+ while ((optc = nextopt("HSa"
+#ifdef RLIMIT_CPU
+ "t"
+#endif
+#ifdef RLIMIT_FSIZE
+ "f"
+#endif
+#ifdef RLIMIT_DATA
+ "d"
+#endif
+#ifdef RLIMIT_STACK
+ "s"
+#endif
+#ifdef RLIMIT_CORE
+ "c"
+#endif
+#ifdef RLIMIT_RSS
+ "m"
+#endif
+#ifdef RLIMIT_MEMLOCK
+ "l"
+#endif
+#ifdef RLIMIT_NPROC
+ "p"
+#endif
+#ifdef RLIMIT_NOFILE
+ "n"
+#endif
+#ifdef RLIMIT_AS
+ "v"
+#endif
+#ifdef RLIMIT_LOCKS
+ "w"
+#endif
+ )) != '\0')
switch (optc) {
case 'H':
how = HARD;
Index: cmdedit.c
===================================================================
RCS file: /var/cvs/busybox/shell/cmdedit.c,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -d -r1.87 -r1.88
--- cmdedit.c 22 Jan 2004 12:42:23 -0000 1.87
+++ cmdedit.c 4 Feb 2004 08:24:39 -0000 1.88
@@ -1283,10 +1283,15 @@
case 3:
/* Control-c -- stop gathering input */
goto_new_line();
+#ifndef CONFIG_ASH
command[0] = 0;
len = 0;
lastWasTab = FALSE;
put_prompt();
+#else
+ len = 0;
+ break_out = -1; /* for control traps */
+#endif
break;
case 4:
/* Control-d -- Delete one character, or exit
@@ -1299,7 +1304,7 @@
/* cmdedit_reset_term() called in atexit */
exit(EXIT_SUCCESS);
#else
- break_out = -1; /* for control stoped jobs */
+ len = break_out = -1; /* for control stoped jobs */
break;
#endif
} else {
@@ -1493,7 +1498,7 @@
/* cleanup may be saved current command line */
free(history[MAX_HISTORY]);
history[MAX_HISTORY] = 0;
- if (len) { /* no put empty line */
+ if (len> 0) { /* no put empty line */
int i = n_history;
/* After max history, remove the oldest command */
if (i >= MAX_HISTORY) {
@@ -1510,7 +1515,7 @@
}
#else /* MAX_HISTORY < 1 */
#if defined(CONFIG_FEATURE_SH_FANCY_PROMPT)
- if (len) { /* no put empty line */
+ if (len > 0) { /* no put empty line */
num_ok_lines++;
}
#endif
More information about the busybox-cvs
mailing list