diff packages/redboot/current/src/parse.c @ 143:6b5f480c6929 ecos-sw-2000-12-08

Merge from eCos master repository on 2000-12-08-02:09:36-GMT
author jlarmour
date Fri, 08 Dec 2000 03:30:06 +0000
parents eb9fd8c04db3
children ac086aa3217e
line wrap: on
line diff
--- a/packages/redboot/current/src/parse.c
+++ b/packages/redboot/current/src/parse.c
@@ -64,6 +64,7 @@ struct cmd *
 parse(char *line, int *argc, char **argv)
 {
     char *cp = line;
+    char *pp;
     int indx = 0;
 
     while (*cp) {
@@ -82,10 +83,19 @@ parse(char *line, int *argc, char **argv
                 if (argv[indx-1] == cp) {
                     argv[indx-1] = ++cp;
                 }
-                while (*cp && *cp != '"') cp++;
+                pp = cp;
+                while (*cp && *cp != '"') {
+                    if (*cp == '\\') {
+                        // Skip over escape - allows for escaped '"'
+                        cp++;
+                    }
+                    // Move string to swallow escapes
+                    *pp++ = *cp++;
+                }
                 if (!*cp) {
                     printf("Unbalanced string!\n");
                 } else {
+                    if (pp != cp) *pp = '\0';
                     *cp++ = '\0';
                     break;
                 }
@@ -298,7 +308,17 @@ parse_num(char *s, unsigned long *val, c
         c = *s++;
         if (_is_hex(c) && ((digit = _from_hex(c)) < radix)) {
             // Valid digit
+#ifdef CYGPKG_HAL_MIPS
+            // FIXME: tx49 compiler generates 0x2539018 for MUL which
+            // isn't any good.
+            if (16 == radix)
+                result = result << 4;
+            else
+                result = 10 * result;
+            result += digit;
+#else
             result = (result * radix) + digit;
+#endif
         } else {
             if (delim != (char *)0) {
                 // See if this character is one of the delimiters