X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=ash-echo.patch;h=89d93472fd0241a1ae30dc66f0633767d5098813;hb=e8d158e7c61167bc86cd439122ebb09e99615089;hp=dd6992b1ef80e56e070e92e7ec4f41318a8d3a06;hpb=fc845259fa14cb040950dc951183b7fbe069fc1f;p=packages%2Fash.git diff --git a/ash-echo.patch b/ash-echo.patch index dd6992b..89d9347 100644 --- a/ash-echo.patch +++ b/ash-echo.patch @@ -1,17 +1,91 @@ ---- ash-linux-0.2/bltin/echo.c.foo Sat Sep 11 23:55:02 1999 -+++ ash-linux-0.2/bltin/echo.c Sat Sep 11 23:57:48 1999 -@@ -63,7 +63,13 @@ +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 ++ ++#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) { -- if (equal(p, "-n")) { -+ if (equal(p,"-en") || equal(p,"-ne")) { -+ nflag++; +- 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++; ++ 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 -+ ap++; -+ } else if (equal(p, "-n")) { - nflag++; - ap++; - } else if (equal(p, "-e")) { + return 0; + } +