diff options
Diffstat (limited to 'source/ap/ash/patches/ash-echo.patch')
-rw-r--r-- | source/ap/ash/patches/ash-echo.patch | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/source/ap/ash/patches/ash-echo.patch b/source/ap/ash/patches/ash-echo.patch new file mode 100644 index 00000000..89d93472 --- /dev/null +++ b/source/ap/ash/patches/ash-echo.patch @@ -0,0 +1,91 @@ +diff -urN netbsd-sh/bltin/echo.c ash-0.3.7.orig/bltin/echo.c +--- netbsd-sh/bltin/echo.c Sun Nov 3 13:06:22 1996 ++++ ash-0.3.7.orig/bltin/echo.c Mon Apr 23 22:16:46 2001 +@@ -44,7 +44,13 @@ + + #define main echocmd + ++#ifdef _GNU_SOURCE ++#include <stdio.h> ++ ++#include "../mystring.h" ++#else + #include "bltin.h" ++#endif + + /* #define eflag 1 */ + +@@ -53,7 +59,6 @@ + register char **ap; + register char *p; + register char c; +- int count; + int nflag = 0; + #ifndef eflag + int eflag = 0; +@@ -62,21 +67,26 @@ + ap = argv; + if (argc) + ap++; +- if ((p = *ap) != NULL) { ++ while ((p = *ap) != NULL && *p == '-') { + if (equal(p, "-n")) { +- nflag++; +- ap++; ++ nflag = 1; + } else if (equal(p, "-e")) { + #ifndef eflag +- eflag++; ++ eflag = 1; ++#endif ++ } else if (equal(p, "-E")) { ++#ifndef eflag ++ eflag = 0; + #endif +- ap++; + } ++ else break; ++ ap++; + } + while ((p = *ap++) != NULL) { + while ((c = *p++) != '\0') { + if (c == '\\' && eflag) { +- switch (*p++) { ++ switch (c = *p++) { ++ case 'a': c = '\007'; break; + case 'b': c = '\b'; break; + case 'c': return 0; /* exit */ + case 'f': c = '\f'; break; +@@ -85,11 +95,13 @@ + case 't': c = '\t'; break; + case 'v': c = '\v'; break; + case '\\': break; /* c = '\\' */ +- case '0': +- c = 0; +- count = 3; +- while (--count >= 0 && (unsigned)(*p - '0') < 8) +- c = (c << 3) + (*p++ - '0'); ++ case '0': case '1': case '2': case '3': ++ case '4': case '5': case '6': case '7': ++ c -= '0'; ++ if (*p >= '0' && *p <= '7') ++ c = c * 8 + (*p++ - '0'); ++ if (*p >= '0' && *p <= '7') ++ c = c * 8 + (*p++ - '0'); + break; + default: + p--; +@@ -103,5 +115,12 @@ + } + if (! nflag) + putchar('\n'); ++#ifdef _GNU_SOURCE ++ fflush(stdout); ++ if (ferror(stdout)) { ++ clearerr(stdout); ++ return 1; ++ } ++#endif + return 0; + } + |