]>
Commit | Line | Data |
---|---|---|
cf7098dd MM |
1 | diff -urN netbsd-sh/bltin/echo.c ash-0.3.7.orig/bltin/echo.c |
2 | --- netbsd-sh/bltin/echo.c Sun Nov 3 13:06:22 1996 | |
3 | +++ ash-0.3.7.orig/bltin/echo.c Mon Apr 23 22:16:46 2001 | |
4 | @@ -44,7 +44,13 @@ | |
5 | ||
6 | #define main echocmd | |
7 | ||
8 | +#ifdef _GNU_SOURCE | |
9 | +#include <stdio.h> | |
10 | + | |
11 | +#include "../mystring.h" | |
12 | +#else | |
13 | #include "bltin.h" | |
14 | +#endif | |
15 | ||
16 | /* #define eflag 1 */ | |
17 | ||
18 | @@ -53,7 +59,6 @@ | |
19 | register char **ap; | |
20 | register char *p; | |
21 | register char c; | |
22 | - int count; | |
23 | int nflag = 0; | |
24 | #ifndef eflag | |
25 | int eflag = 0; | |
26 | @@ -62,21 +67,26 @@ | |
27 | ap = argv; | |
28 | if (argc) | |
29 | ap++; | |
30 | - if ((p = *ap) != NULL) { | |
31 | + while ((p = *ap) != NULL && *p == '-') { | |
32 | if (equal(p, "-n")) { | |
33 | - nflag++; | |
34 | - ap++; | |
35 | + nflag = 1; | |
36 | } else if (equal(p, "-e")) { | |
37 | #ifndef eflag | |
38 | - eflag++; | |
39 | + eflag = 1; | |
40 | +#endif | |
41 | + } else if (equal(p, "-E")) { | |
42 | +#ifndef eflag | |
43 | + eflag = 0; | |
44 | #endif | |
45 | - ap++; | |
46 | } | |
47 | + else break; | |
48 | + ap++; | |
49 | } | |
50 | while ((p = *ap++) != NULL) { | |
51 | while ((c = *p++) != '\0') { | |
52 | if (c == '\\' && eflag) { | |
53 | - switch (*p++) { | |
54 | + switch (c = *p++) { | |
55 | + case 'a': c = '\007'; break; | |
56 | case 'b': c = '\b'; break; | |
57 | case 'c': return 0; /* exit */ | |
58 | case 'f': c = '\f'; break; | |
59 | @@ -85,11 +95,13 @@ | |
60 | case 't': c = '\t'; break; | |
61 | case 'v': c = '\v'; break; | |
62 | case '\\': break; /* c = '\\' */ | |
63 | - case '0': | |
64 | - c = 0; | |
65 | - count = 3; | |
66 | - while (--count >= 0 && (unsigned)(*p - '0') < 8) | |
67 | - c = (c << 3) + (*p++ - '0'); | |
68 | + case '0': case '1': case '2': case '3': | |
69 | + case '4': case '5': case '6': case '7': | |
70 | + c -= '0'; | |
71 | + if (*p >= '0' && *p <= '7') | |
72 | + c = c * 8 + (*p++ - '0'); | |
73 | + if (*p >= '0' && *p <= '7') | |
74 | + c = c * 8 + (*p++ - '0'); | |
75 | break; | |
76 | default: | |
77 | p--; | |
78 | @@ -103,5 +115,12 @@ | |
79 | } | |
80 | if (! nflag) | |
81 | putchar('\n'); | |
82 | +#ifdef _GNU_SOURCE | |
83 | + fflush(stdout); | |
84 | + if (ferror(stdout)) { | |
85 | + clearerr(stdout); | |
86 | + return 1; | |
87 | + } | |
88 | +#endif | |
89 | return 0; | |
90 | } | |
91 |