diff options
-rw-r--r-- | coreutils/echo.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/coreutils/echo.c b/coreutils/echo.c index 486245508..2ee5002ba 100644 --- a/coreutils/echo.c +++ b/coreutils/echo.c | |||
@@ -29,7 +29,10 @@ int bb_echo(char **argv) | |||
29 | { | 29 | { |
30 | const char *arg; | 30 | const char *arg; |
31 | #if !ENABLE_FEATURE_FANCY_ECHO | 31 | #if !ENABLE_FEATURE_FANCY_ECHO |
32 | #define eflag '\\' | 32 | enum { |
33 | eflag = '\\', | ||
34 | nflag = 1, /* 1 -- print '\n' */ | ||
35 | }; | ||
33 | ++argv; | 36 | ++argv; |
34 | #else | 37 | #else |
35 | const char *p; | 38 | const char *p; |
@@ -39,7 +42,7 @@ int bb_echo(char **argv) | |||
39 | while (1) { | 42 | while (1) { |
40 | arg = *++argv; | 43 | arg = *++argv; |
41 | if (!arg) | 44 | if (!arg) |
42 | goto ret; | 45 | goto newline_ret; |
43 | if (*arg != '-') | 46 | if (*arg != '-') |
44 | break; | 47 | break; |
45 | 48 | ||
@@ -68,10 +71,13 @@ int bb_echo(char **argv) | |||
68 | just_echo: | 71 | just_echo: |
69 | #endif | 72 | #endif |
70 | while (1) { | 73 | while (1) { |
71 | /* arg is already = *argv and isn't NULL */ | 74 | /* arg is already == *argv and isn't NULL */ |
72 | int c; | 75 | int c; |
73 | 76 | ||
74 | while ((c = *arg++)) { | 77 | if (!eflag) { |
78 | /* optimization for very common case */ | ||
79 | fputs(arg, stdout); | ||
80 | } else while ((c = *arg++)) { | ||
75 | if (c == eflag) { /* Check for escape seq. */ | 81 | if (c == eflag) { /* Check for escape seq. */ |
76 | if (*arg == 'c') { | 82 | if (*arg == 'c') { |
77 | /* '\c' means cancel newline and | 83 | /* '\c' means cancel newline and |
@@ -101,13 +107,10 @@ int bb_echo(char **argv) | |||
101 | putchar(' '); | 107 | putchar(' '); |
102 | } | 108 | } |
103 | 109 | ||
104 | #ifdef CONFIG_FEATURE_FANCY_ECHO | 110 | newline_ret: |
105 | if (nflag) { | 111 | if (nflag) { |
106 | putchar('\n'); | 112 | putchar('\n'); |
107 | } | 113 | } |
108 | #else | ||
109 | putchar('\n'); | ||
110 | #endif | ||
111 | ret: | 114 | ret: |
112 | return fflush(stdout); | 115 | return fflush(stdout); |
113 | } | 116 | } |