fix fallout from isprint() changes
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 20 Nov 2009 18:14:19 +0000 (19:14 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 20 Nov 2009 18:14:19 +0000 (19:14 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/wc.c
editors/vi.c
shell/hush.c

index 43e8ed49221275097928d533a4220dc43db2f722..08f3c2dc4d9e1116231ba3559dd3f7efbe50c3b0 100644 (file)
@@ -129,7 +129,7 @@ int wc_main(int argc UNUSED_PARAM, char **argv)
                                --counts[WC_CHARS];
                                goto DO_EOF;            /* Treat an EOF as '\r'. */
                        }
-                       if (isprint(c)) {
+                       if (isprint_asciionly(c)) {
                                ++linepos;
                                if (!isspace(c)) {
                                        in_word = 1;
index 7d83db642eeb6e05f7f38478098d76c4dc8c8f6b..58c6f5a0595bb8a7c993a68d0f5619f176c6fcee 100644 (file)
 #if ENABLE_LOCALE_SUPPORT
 
 #if ENABLE_FEATURE_VI_8BIT
-# define Isprint(c) isprint(c)
+//FIXME: this does not work properly for Unicode anyway
+# define Isprint(c) (isprint)(c)
 #else
-# define Isprint(c) (isprint(c) && (unsigned char)(c) < 0x7f)
+# define Isprint(c) isprint_asciionly(c)
 #endif
 
 #else
@@ -891,7 +892,7 @@ static void colon(char *buf)
                        li, ch);
        } else if (strncmp(cmd, "file", i) == 0) {      // what File is this
                if (b != -1 || e != -1) {
-                       not_implemented("No address allowed on this command");
+                       status_line_bold("No address allowed on this command");
                        goto vc1;
                }
                if (args[0]) {
@@ -2588,36 +2589,41 @@ static void status_line(const char *format, ...)
 // copy s to buf, convert unprintable
 static void print_literal(char *buf, const char *s)
 {
+       char *d;
        unsigned char c;
-       char b[2];
 
-       b[1] = '\0';
        buf[0] = '\0';
        if (!s[0])
                s = "(NULL)";
+
+       d = buf;
        for (; *s; s++) {
                int c_is_no_print;
 
                c = *s;
                c_is_no_print = (c & 0x80) && !Isprint(c);
                if (c_is_no_print) {
-                       strcat(buf, SOn);
+                       strcpy(d, SOn);
+                       d += sizeof(SOn)-1;
                        c = '.';
                }
-               if (c < ' ' || c == 127) {
-                       strcat(buf, "^");
-                       if (c == 127)
+               if (c < ' ' || c == 0x7f) {
+                       *d++ = '^';
+                       c |= '@'; /* 0x40 */
+                       if (c == 0x7f)
                                c = '?';
-                       else
-                               c += '@';
-               }
-               b[0] = c;
-               strcat(buf, b);
-               if (c_is_no_print)
-                       strcat(buf, SOs);
-               if (*s == '\n')
-                       strcat(buf, "$");
-               if (strlen(buf) > MAX_INPUT_LEN - 10) // paranoia
+               }
+               *d++ = c;
+               *d = '\0';
+               if (c_is_no_print) {
+                       strcpy(d, SOs);
+                       d += sizeof(SOs)-1;
+               }
+               if (*s == '\n') {
+                       *d++ = '$';
+                       *d = '\0';
+               }
+               if (d - buf > MAX_INPUT_LEN - 10) // paranoia
                        break;
        }
 }
@@ -2982,11 +2988,6 @@ static void do_cmd(int c)
        default:                        // unrecognized command
                buf[0] = c;
                buf[1] = '\0';
-               if (c < ' ') {
-                       buf[0] = '^';
-                       buf[1] = c + '@';
-                       buf[2] = '\0';
-               }
                not_implemented(buf);
                end_cmd_q();    // stop adding to q
        case 0x00:                      // nul- ignore
index 2d6f55bc70f1554bbbfe2d6935ff1a9e219a7126..3044024a049e7341c8861691be8e66c4053b172c 100644 (file)
@@ -5572,6 +5572,10 @@ static int process_command_subs(o_string *dest, const char *s)
 }
 #endif /* ENABLE_HUSH_TICK */
 
+#if !ENABLE_HUSH_FUNCTIONS
+#define parse_group(dest, ctx, input, ch) \
+       parse_group(ctx, input, ch)
+#endif
 static int parse_group(o_string *dest, struct parse_context *ctx,
        struct in_str *input, int ch)
 {