[BACK]Return to str.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / make

Diff for /src/usr.bin/make/str.c between version 1.15 and 1.16

version 1.15, 2000/09/14 13:32:07 version 1.16, 2000/09/14 13:35:38
Line 219 
Line 219 
         return(argv);          return(argv);
 }  }
   
   /* Iterate through a string word by word,
    * without needing to copy anything.
    * More light-weight than brk_string, handles \ ' " as well.
    *
    * position = s;
    * while ((begin = iterate_words(&position)) != NULL) {
    *   do_something_with_word_interval(begin, position);
    * }
    */
   const char *
   iterate_words(end)
       const char  **end;
   {
       const char  *start, *p;
       char        state = 0;
       start = *end;
   
       while (isspace(*start))
           start++;
       if (*start == '\0')
           return NULL;
   
       for (p = start;; p++)
           switch(*p) {
               case '\\':
                   if (p[1] != '\0')
                       p++;
                   break;
               case '\'':
               case '"':
                   if (state == *p)
                       state = 0;
                   else if (state == 0)
                       state = *p;
                   break;
               case ' ':
               case '\t':
                   if (state != 0)
                       break;
                   /* FALLTHROUGH */
               case '\0':
                   *end = p;
                   return start;
               default:
                   break;
               }
   }
   
 /*  /*
  * Str_Match --   * Str_Match --
  *   *
Line 452 
Line 500 
     s[end-begin] = '\0';      s[end-begin] = '\0';
     return s;      return s;
 }  }
   
   /* copy interval, skipping characters in the set.  */
   char *
   escape_dup(begin, end, set)
       const char *begin;
       const char *end;
       const char *set;
   {
       char *s, *t;
   
       t = s = emalloc(end - begin + 1);
       while (begin != end) {
           if (*begin == '\\') {
               begin++;
               if (begin == end) {
                   *t++ = '\\';
                   break;
               }
               if (strchr(set, *begin) == NULL)
                   *t++ = '\\';
           }
           *t++ = *begin++;
       }
       *t++ = '\0';
       return s;
   }
   

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.16