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

Diff for /src/usr.bin/yacc/reader.c between version 1.25 and 1.26

version 1.25, 2014/01/08 22:55:59 version 1.26, 2014/01/10 23:01:29
Line 75 
Line 75 
 void copy_ident(void);  void copy_ident(void);
 void copy_text(void);  void copy_text(void);
 void copy_union(void);  void copy_union(void);
 int hexval(int);  
 bucket * get_literal(void);  bucket * get_literal(void);
 int is_reserved(char *);  int is_reserved(char *);
 bucket * get_name(void);  bucket * get_name(void);
Line 653 
Line 652 
 }  }
   
   
 int  
 hexval(int c)  
 {  
     if (c >= '0' && c <= '9')  
         return (c - '0');  
     if (c >= 'A' && c <= 'F')  
         return (c - 'A' + 10);  
     if (c >= 'a' && c <= 'f')  
         return (c - 'a' + 10);  
     return (-1);  
 }  
   
   
 bucket *  bucket *
 get_literal(void)  get_literal(void)
 {  {
Line 688 
Line 674 
         if (c == '\\')          if (c == '\\')
         {          {
             char *c_cptr = cptr - 1;              char *c_cptr = cptr - 1;
               unsigned long ulval;
   
             c = (unsigned char)*cptr++;              c = (unsigned char)*cptr++;
             switch (c)              switch (c)
Line 699 
Line 686 
   
             case '0': case '1': case '2': case '3':              case '0': case '1': case '2': case '3':
             case '4': case '5': case '6': case '7':              case '4': case '5': case '6': case '7':
                 n = c - '0';                  ulval = strtoul(cptr - 1, &s, 8);
                 c = (unsigned char)*cptr;                  if (s == cptr - 1 || ulval > MAXCHAR) illegal_character(c_cptr);
                 if (IS_OCTAL(c))                  c = (int)ulval;
                 {                  cptr = s;
                     n = (n << 3) + (c - '0');  
                     c = (unsigned char)*++cptr;  
                     if (IS_OCTAL(c))  
                     {  
                         n = (n << 3) + (c - '0');  
                         ++cptr;  
                     }  
                 }  
                 if (n > MAXCHAR) illegal_character(c_cptr);  
                 c = n;  
                 break;                  break;
   
             case 'x':              case 'x':
                 c = (unsigned char)*cptr++;                  ulval = strtoul(cptr, &s, 16);
                 n = hexval(c);                  if (s == cptr || ulval > MAXCHAR) illegal_character(c_cptr);
                 if (n < 0 || n >= 16)                  c = (int)ulval;
                     illegal_character(c_cptr);                  cptr = s;
                 for (;;)                  break;
                 {  
                     c = (unsigned char)*cptr;  
                     i = hexval(c);  
                     if (i < 0 || i >= 16) break;  
                     ++cptr;  
                     n = (n << 4) + i;  
                     if (n > MAXCHAR) illegal_character(c_cptr);  
                 }  
                 c = n;  
                 break;  
   
             case 'a': c = 7; break;              case 'a': c = 7; break;
             case 'b': c = '\b'; break;              case 'b': c = '\b'; break;

Legend:
Removed from v.1.25  
changed lines
  Added in v.1.26