mirror of https://github.com/mirror/busybox.git
parent
6857e4e2f3
commit
2957fc6992
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
|||
VERSION = 1
|
||||
PATCHLEVEL = 11
|
||||
SUBLEVEL = 1
|
||||
SUBLEVEL = 2
|
||||
EXTRAVERSION =
|
||||
NAME = Unnamed
|
||||
|
||||
|
|
|
@ -14,14 +14,21 @@ exec >"$target"
|
|||
|
||||
echo 'static const char packed_usage[] ALIGN1 = {'
|
||||
|
||||
# Extra effort to avoid using "od -t x1": -t is not available
|
||||
# in non-CONFIG_DESKTOPed busybox od
|
||||
## Breaks on big-endian systems!
|
||||
## # Extra effort to avoid using "od -t x1": -t is not available
|
||||
## # in non-CONFIG_DESKTOPed busybox od
|
||||
##
|
||||
## "$loc/usage" | bzip2 -1 | od -v -x \
|
||||
## | $SED -e 's/^[^ ]*//' \
|
||||
## | $SED -e 's/ //g' \
|
||||
## | grep -v '^$' \
|
||||
## | $SED -e 's/\(..\)\(..\)/0x\2,0x\1,/g'
|
||||
|
||||
"$loc/usage" | bzip2 -1 | od -v -x \
|
||||
"$loc/usage" | bzip2 -1 | od -v -t x1 \
|
||||
| $SED -e 's/^[^ ]*//' \
|
||||
| $SED -e 's/ //g' \
|
||||
| grep -v '^$' \
|
||||
| $SED -e 's/\(..\)\(..\)/0x\2,0x\1,/g'
|
||||
| $SED -e 's/\(..\)/0x\1,/g'
|
||||
|
||||
echo '};'
|
||||
echo '#define SIZEOF_usage_messages' `expr 0 + $sz`
|
||||
|
|
|
@ -48,5 +48,5 @@ int basename_main(int argc, char **argv)
|
|||
|
||||
/* puts(s) will do, but we can do without stdio this way: */
|
||||
s[m++] = '\n';
|
||||
return full_write(STDOUT_FILENO, s, m) == (ssize_t)m;
|
||||
return full_write(STDOUT_FILENO, s, m) != (ssize_t)m;
|
||||
}
|
||||
|
|
|
@ -840,7 +840,8 @@ arch_apply_relocation(struct obj_file *f,
|
|||
ElfW(RelM) *rel, ElfW(Addr) v)
|
||||
{
|
||||
#if defined(__arm__) || defined(__i386__) || defined(__mc68000__) \
|
||||
|| defined(__sh__) || defined(__s390__) || defined(__x86_64__)
|
||||
|| defined(__sh__) || defined(__s390__) || defined(__x86_64__) \
|
||||
|| defined(__powerpc__) || defined(__mips__)
|
||||
struct arch_file *ifile = (struct arch_file *) f;
|
||||
#endif
|
||||
enum obj_reloc ret = obj_reloc_ok;
|
||||
|
|
72
shell/ash.c
72
shell/ash.c
|
@ -1569,14 +1569,14 @@ static char *optionarg; /* set by nextopt (like getopt) */
|
|||
static char *optptr; /* used by nextopt */
|
||||
|
||||
/*
|
||||
* XXX - should get rid of. have all builtins use getopt(3). the
|
||||
* library getopt must have the BSD extension static variable "optreset"
|
||||
* otherwise it can't be used within the shell safely.
|
||||
* XXX - should get rid of. Have all builtins use getopt(3).
|
||||
* The library getopt must have the BSD extension static variable
|
||||
* "optreset", otherwise it can't be used within the shell safely.
|
||||
*
|
||||
* Standard option processing (a la getopt) for builtin routines. The
|
||||
* only argument that is passed to nextopt is the option string; the
|
||||
* other arguments are unnecessary. It return the character, or '\0' on
|
||||
* end of input.
|
||||
* Standard option processing (a la getopt) for builtin routines.
|
||||
* The only argument that is passed to nextopt is the option string;
|
||||
* the other arguments are unnecessary. It returns the character,
|
||||
* or '\0' on end of input.
|
||||
*/
|
||||
static int
|
||||
nextopt(const char *optstring)
|
||||
|
@ -1587,13 +1587,20 @@ nextopt(const char *optstring)
|
|||
|
||||
p = optptr;
|
||||
if (p == NULL || *p == '\0') {
|
||||
/* We ate entire "-param", take next one */
|
||||
p = *argptr;
|
||||
if (p == NULL || *p != '-' || *++p == '\0')
|
||||
if (p == NULL)
|
||||
return '\0';
|
||||
if (*p != '-')
|
||||
return '\0';
|
||||
if (*++p == '\0') /* just "-" ? */
|
||||
return '\0';
|
||||
argptr++;
|
||||
if (LONE_DASH(p)) /* check for "--" */
|
||||
if (LONE_DASH(p)) /* "--" ? */
|
||||
return '\0';
|
||||
/* p => next "-param" */
|
||||
}
|
||||
/* p => some option char in the middle of a "-param" */
|
||||
c = *p++;
|
||||
for (q = optstring; *q != c;) {
|
||||
if (*q == '\0')
|
||||
|
@ -1602,8 +1609,11 @@ nextopt(const char *optstring)
|
|||
q++;
|
||||
}
|
||||
if (*++q == ':') {
|
||||
if (*p == '\0' && (p = *argptr++) == NULL)
|
||||
ash_msg_and_raise_error("no arg for -%c option", c);
|
||||
if (*p == '\0') {
|
||||
p = *argptr++;
|
||||
if (p == NULL)
|
||||
ash_msg_and_raise_error("no arg for -%c option", c);
|
||||
}
|
||||
optionarg = p;
|
||||
p = NULL;
|
||||
}
|
||||
|
@ -7428,8 +7438,10 @@ commandcmd(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
|
|||
else if (c != 'p')
|
||||
abort();
|
||||
#endif
|
||||
if (verify)
|
||||
/* Mimic bash: just "command -v" doesn't complain, it's a nop */
|
||||
if (verify && (*argptr != NULL)) {
|
||||
return describe_command(*argptr, verify - VERIFY_BRIEF);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -7788,16 +7800,33 @@ static void prehash(union node *);
|
|||
static void
|
||||
evaltree(union node *n, int flags)
|
||||
{
|
||||
|
||||
struct jmploc *volatile savehandler = exception_handler;
|
||||
struct jmploc jmploc;
|
||||
int checkexit = 0;
|
||||
void (*evalfn)(union node *, int);
|
||||
unsigned isor;
|
||||
int status;
|
||||
|
||||
if (n == NULL) {
|
||||
TRACE(("evaltree(NULL) called\n"));
|
||||
goto out;
|
||||
goto out1;
|
||||
}
|
||||
TRACE(("pid %d, evaltree(%p: %d, %d) called\n",
|
||||
getpid(), n, n->type, flags));
|
||||
|
||||
exception_handler = &jmploc;
|
||||
{
|
||||
int err = setjmp(jmploc.loc);
|
||||
if (err) {
|
||||
/* if it was a signal, check for trap handlers */
|
||||
if (exception == EXSIG)
|
||||
goto out;
|
||||
/* continue on the way out */
|
||||
exception_handler = savehandler;
|
||||
longjmp(exception_handler->loc, err);
|
||||
}
|
||||
}
|
||||
|
||||
switch (n->type) {
|
||||
default:
|
||||
#if DEBUG
|
||||
|
@ -7843,19 +7872,20 @@ evaltree(union node *n, int flags)
|
|||
goto calleval;
|
||||
case NAND:
|
||||
case NOR:
|
||||
case NSEMI:
|
||||
case NSEMI: {
|
||||
|
||||
#if NAND + 1 != NOR
|
||||
#error NAND + 1 != NOR
|
||||
#endif
|
||||
#if NOR + 1 != NSEMI
|
||||
#error NOR + 1 != NSEMI
|
||||
#endif
|
||||
isor = n->type - NAND;
|
||||
unsigned is_or = n->type - NAND;
|
||||
evaltree(
|
||||
n->nbinary.ch1,
|
||||
(flags | ((isor >> 1) - 1)) & EV_TESTED
|
||||
(flags | ((is_or >> 1) - 1)) & EV_TESTED
|
||||
);
|
||||
if (!exitstatus == isor)
|
||||
if (!exitstatus == is_or)
|
||||
break;
|
||||
if (!evalskip) {
|
||||
n = n->nbinary.ch2;
|
||||
|
@ -7866,6 +7896,7 @@ evaltree(union node *n, int flags)
|
|||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NIF:
|
||||
evaltree(n->nif.test, EV_TESTED);
|
||||
if (evalskip)
|
||||
|
@ -7886,8 +7917,11 @@ evaltree(union node *n, int flags)
|
|||
exitstatus = status;
|
||||
break;
|
||||
}
|
||||
|
||||
out:
|
||||
if ((checkexit & exitstatus))
|
||||
exception_handler = savehandler;
|
||||
out1:
|
||||
if (checkexit & exitstatus)
|
||||
evalskip |= SKIPEVAL;
|
||||
else if (pendingsig && dotrap())
|
||||
goto exexit;
|
||||
|
|
Loading…
Reference in New Issue