]> git.pld-linux.org Git - packages/ash.git/blob - ash-echo.patch
- removed uclibc stuff
[packages/ash.git] / ash-echo.patch
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
This page took 0.047107 seconds and 3 git commands to generate.