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

Diff for /src/usr.bin/hexdump/parse.c between version 1.13 and 1.14

version 1.13, 2003/06/12 20:58:09 version 1.14, 2004/11/21 19:57:16
Line 170 
Line 170 
                          * skip any special chars -- save precision in                           * skip any special chars -- save precision in
                          * case it's a %s format.                           * case it's a %s format.
                          */                           */
                         while (strchr(spec + 1, *++fmt));                          while (*++fmt && strchr(spec + 1, *fmt));
                         if (*fmt == '.' && isdigit((unsigned char)*++fmt)) {                          if (*fmt == '.' && isdigit((unsigned char)*++fmt)) {
                                 prec = atoi(fmt);                                  prec = atoi(fmt);
                                 while (isdigit((unsigned char)*++fmt));                                  while (isdigit((unsigned char)*++fmt));
Line 244 
Line 244 
                         if (fu->bcnt) {                          if (fu->bcnt) {
                                 sokay = USEBCNT;                                  sokay = USEBCNT;
                                 /* Skip to conversion character. */                                  /* Skip to conversion character. */
                                 for (++p1; strchr(spec, *p1); ++p1);                                  for (++p1; *p1 && strchr(spec, *p1); ++p1);
                         } else {                          } else {
                                 /* Skip any special chars, field width. */                                  /* Skip any special chars, field width. */
                                 while (strchr(spec + 1, *++p1));                                  while (*++p1 && strchr(spec + 1, *p1));
                                 if (*p1 == '.' &&                                  if (*p1 == '.' &&
                                     isdigit((unsigned char)*++p1)) {                                      isdigit((unsigned char)*++p1)) {
                                         sokay = USEPREC;                                          sokay = USEPREC;
Line 258 
Line 258 
                                         sokay = NOTOKAY;                                          sokay = NOTOKAY;
                         }                          }
   
                         p2 = p1 + 1;            /* Set end pointer. */                          p2 = *p1 ? p1 + 1 : p1; /* Set end pointer. */
                         cs[0] = *p1;            /* Set conversion string. */                          cs[0] = *p1;            /* Set conversion string. */
                         cs[1] = '\0';                          cs[1] = '\0';
   
Line 280 
Line 280 
                                 }                                  }
                                 break;                                  break;
                         case 'd': case 'i':                          case 'd': case 'i':
                                 pr->flags = F_INT;  
                                 goto isint;  
                         case 'o': case 'u': case 'x': case 'X':                          case 'o': case 'u': case 'x': case 'X':
                                 pr->flags = F_UINT;                                  if (cs[0] == 'd' || cs[0] == 'i')
 isint:                          cs[2] = '\0';                                          pr->flags = F_INT;
                                   else
                                           pr->flags = F_UINT;
   
                                   cs[2] = '\0';
                                 cs[1] = cs[0];                                  cs[1] = cs[0];
                                 cs[0] = 'q';                                  cs[0] = 'q';
                                 switch(fu->bcnt) {                                  switch(fu->bcnt) {
Line 349 
Line 351 
                                                 cs[2] = '\0';                                                  cs[2] = '\0';
                                                 break;                                                  break;
                                         default:                                          default:
                                                 p1[3] = '\0';                                                  if (p1[2])
                                                           p1[3] = '\0';
                                                 badconv(p1);                                                  badconv(p1);
                                         }                                          }
                                         break;                                          break;
                                 case 'c':                                  case 'c':
                                         pr->flags = F_C;  
                                         /* cs[0] = 'c'; set in conv_c */  
                                         goto isint2;  
                                 case 'p':                                  case 'p':
                                         pr->flags = F_P;  
                                         cs[0] = 'c';  
                                         goto isint2;  
                                 case 'u':                                  case 'u':
                                         pr->flags = F_U;                                          if (p1[1] == 'c') {
                                         /* cs[0] = 'c'; set in conv_u */                                                  pr->flags = F_C;
 isint2:                                 switch(fu->bcnt) {                                                  /* cs[0] = 'c'; set in conv_c */
                                           } else if (p1[1] == 'p') {
                                                   pr->flags = F_P;
                                                   cs[0] = 'c';
                                           } else {
                                                   pr->flags = F_U;
                                                   /* cs[0] = 'c'; set in conv_u */
                                           }
   
                                           switch(fu->bcnt) {
                                         case 0: case 1:                                          case 0: case 1:
                                                 pr->bcnt = 1;                                                  pr->bcnt = 1;
                                                 break;                                                  break;
Line 374 
Line 380 
                                         }                                          }
                                         break;                                          break;
                                 default:                                  default:
                                         p1[2] = '\0';                                          if (p1[1])
                                                   p1[2] = '\0';
                                         badconv(p1);                                          badconv(p1);
                                 }                                  }
                                 break;                                  break;
                         default:                          default:
                                 p1[1] = '\0';                                  if (cs[0])
                                           p1[1] = '\0';
                                 badconv(p1);                                  badconv(p1);
                         }                          }
   
Line 423 
Line 431 
                     !(fu->flags&F_SETREP) && fu->bcnt)                      !(fu->flags&F_SETREP) && fu->bcnt)
                         fu->reps += (blocksize - fs->bcnt) / fu->bcnt;                          fu->reps += (blocksize - fs->bcnt) / fu->bcnt;
                 if (fu->reps > 1) {                  if (fu->reps > 1) {
                           if (!fu->nextpr)
                                   break;
                         for (pr = fu->nextpr;; pr = pr->nextpr)                          for (pr = fu->nextpr;; pr = pr->nextpr)
                                 if (!pr->nextpr)                                  if (!pr->nextpr)
                                         break;                                          break;
Line 453 
Line 463 
                         *p2 = *p1;                          *p2 = *p1;
                         break;                          break;
                 }                  }
                 if (*p1 == '\\')                  if (*p1 == '\\') {
                         switch(*++p1) {                          switch(*++p1) {
                           case '\0':
                                   *p2++ = '\\';
                                   *p2 = '\0';
                                   return; /* incomplete escape sequence */
                         case 'a':                          case 'a':
                              /* *p2 = '\a'; */                               /* *p2 = '\a'; */
                                 *p2 = '\007';                                  *p2 = '\007';
Line 481 
Line 495 
                                 *p2 = *p1;                                  *p2 = *p1;
                                 break;                                  break;
                         }                          }
                   } else
                           *p2 = *p1;
         }          }
 }  }
   

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.14