diff options
-rw-r--r-- | packages/klibc/files/dash_readopt.patch | 105 | ||||
-rw-r--r-- | packages/klibc/klibc-common.inc | 1 | ||||
-rw-r--r-- | packages/klibc/klibc-utils-static_1.5.bb | 2 | ||||
-rw-r--r-- | packages/klibc/klibc_1.5.bb | 2 |
4 files changed, 108 insertions, 2 deletions
diff --git a/packages/klibc/files/dash_readopt.patch b/packages/klibc/files/dash_readopt.patch new file mode 100644 index 0000000000..49bc087edd --- /dev/null +++ b/packages/klibc/files/dash_readopt.patch @@ -0,0 +1,105 @@ +Index: klibc-1.5/usr/dash/miscbltin.c +=================================================================== +--- klibc-1.5.orig/usr/dash/miscbltin.c 2008-03-27 20:38:09.354564817 +0100 ++++ klibc-1.5/usr/dash/miscbltin.c 2008-04-04 18:05:32.063364195 +0200 +@@ -46,6 +46,7 @@ + #include <ctype.h> + #include <stdint.h> + #include <time.h> /* strtotimeval() */ ++#include <termios.h> + + #include "shell.h" + #include "options.h" +@@ -83,6 +84,11 @@ + int timeout; + int i; + fd_set set; ++ int n_flag = 0; ++ unsigned int nchars = 0; ++ int silent = 0; ++ struct termios tty, old_tty; ++ + struct timeval ts, t0, t1, to; + + ts.tv_sec = ts.tv_usec = 0; +@@ -90,11 +96,18 @@ + rflag = 0; + timeout = 0; + prompt = NULL; +- while ((i = nextopt("p:rt:")) != '\0') { ++ while ((i = nextopt("p:rt:n:s")) != '\0') { + switch(i) { + case 'p': + prompt = optionarg; + break; ++ case 'n': ++ nchars = strtoul(optionarg, NULL, 10); ++ n_flag = nchars; /* just a flag "nchars is nonzero" */ ++ break; ++ case 's': ++ silent = 1; ++ break; + case 't': + p = strtotimeval(optionarg, &ts); + if (*p || (!ts.tv_sec && !ts.tv_usec)) +@@ -118,6 +131,23 @@ + sh_error("arg count"); + if ((ifs = bltinlookup("IFS")) == NULL) + ifs = defifs; ++ if (n_flag || silent) { ++ if (tcgetattr(0, &tty) != 0) { ++ /* Not a tty */ ++ n_flag = 0; ++ silent = 0; ++ } else { ++ old_tty = tty; ++ if (n_flag) { ++ tty.c_lflag &= ~ICANON; ++ tty.c_cc[VMIN] = nchars < 256 ? nchars : 255; ++ } ++ if (silent) { ++ tty.c_lflag &= ~(ECHO | ECHOK | ECHONL); ++ } ++ tcsetattr(0, TCSANOW, &tty); ++ } ++ } + status = 0; + startword = 1; + backslash = 0; +@@ -133,13 +163,15 @@ + ts.tv_sec += t0.tv_sec; + } + STARTSTACKSTR(p); +- for (;;) { ++ do { + if (timeout) { + gettimeofday(&t1, NULL); + if (t1.tv_sec > ts.tv_sec || + (t1.tv_sec == ts.tv_sec && + t1.tv_usec >= ts.tv_usec)) { + status = 1; ++ if (n_flag) ++ tcsetattr(0, TCSANOW, &old_tty); + break; /* Timeout! */ + } + +@@ -156,6 +188,8 @@ + FD_SET(0, &set); + if (select(1, &set, NULL, NULL, &to) != 1) { + status = 1; ++ if (n_flag) ++ tcsetattr(0, TCSANOW, &old_tty); + break; /* Timeout! */ + } + } +@@ -191,7 +225,9 @@ + put: + STPUTC(c, p); + } +- } ++ } while (!n_flag || --nchars); ++ if (n_flag || silent) ++ tcsetattr(0, TCSANOW, &old_tty); + STACKSTRNUL(p); + /* Remove trailing blanks */ + while ((char *)stackblock() <= --p && strchr(ifs, *p) != NULL) diff --git a/packages/klibc/klibc-common.inc b/packages/klibc/klibc-common.inc index 41859d3243..5e890b3bc8 100644 --- a/packages/klibc/klibc-common.inc +++ b/packages/klibc/klibc-common.inc @@ -8,6 +8,7 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/Stable/klibc-${PV}.tar.bz2 \ file://fstype-sane-vfat-and-jffs2-for-1.5.patch;patch=1 \ file://modprobe.patch;patch=1 \ file://losetup.patch;patch=1 \ + file://dash_readopt.patch;patch=1 \ " S = "${WORKDIR}/klibc-${PV}" PACKAGE_ARCH = "${MACHINE_ARCH}" diff --git a/packages/klibc/klibc-utils-static_1.5.bb b/packages/klibc/klibc-utils-static_1.5.bb index c6f54489ab..f0429e34a2 100644 --- a/packages/klibc/klibc-utils-static_1.5.bb +++ b/packages/klibc/klibc-utils-static_1.5.bb @@ -1,6 +1,6 @@ require klibc-common.inc -PR = "r8" +PR = "r9" # We only want the static utils. klibc build both. So we install only what we want. do_install() { diff --git a/packages/klibc/klibc_1.5.bb b/packages/klibc/klibc_1.5.bb index 925dcd0c36..967f88f948 100644 --- a/packages/klibc/klibc_1.5.bb +++ b/packages/klibc/klibc_1.5.bb @@ -1,2 +1,2 @@ require klibc.inc -PR = "r6" +PR = "r7" |