Changeset 13 for trunk/src/sh_utils.c


Ignore:
Timestamp:
Jan 8, 2006, 10:13:03 PM (14 years ago)
Author:
rainer
Message:

minor optimization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_utils.c

    r12 r13  
    245245
    246246
    247 /* returned string must be free'd by caller
     247/* returned string must be free'd by caller.
    248248 */
    249249char * sh_util_formatted (const char * formatt, st_format * ftab)
     
    260260  time_t inpp;
    261261
    262   char * clist[16];
     262  char * clist[16] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
     263                       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
    263264  int    nn = 0;
    264265
    265266  SL_ENTER(_("sh_util_formatted"));
    266267
    267   if (formatt == NULL || ftab == NULL)
     268  if (formatt == NULL || ftab == NULL || *formatt == '\0')
    268269    SL_RETURN(NULL, _("sh_util_formatted"));
    269270
     
    271272   */
    272273  size = sl_strlen(formatt);
    273   if (size > 0)
    274     {
    275       fmt = (char *) SH_ALLOC(size + 1);
    276       (void) sl_strlcpy(fmt, formatt, size + 1);
    277     }
    278   else
    279     SL_RETURN(NULL, _("sh_util_formatted"));
     274
     275  fmt = (char *) SH_ALLOC(size + 1);
     276  (void) sl_strlcpy(fmt, formatt, size + 1);
    280277
    281278  p = fmt;
    282279
    283280  j = 0;
    284   while (ftab[j].fchar != '\0')
    285     {
    286       if (ftab[j].type != S_FMT_STRING)
    287         ftab[j].data_str = NULL;
    288       ++j;
    289     }
    290 
    291   for (j = 0; j < 16; ++j)
    292     clist[j] = NULL;
    293 
     281  while (ftab[j].fchar != '\0') {
     282    if (ftab[j].type != S_FMT_STRING)
     283      ftab[j].data_str = NULL;
     284    ++j;
     285  }
     286 
    294287  while (p != NULL && *p != '\0' && NULL != (q = strchr(p, '%')))
    295288    {
     
    324317              i  = 1;
    325318             
    326               if (ftab[j].type == S_FMT_STRING)
     319              switch(ftab[j].type) {
     320
     321              case S_FMT_STRING:
    327322                {
    328323                  isiz = sl_strlen(ftab[j].data_str);
     
    335330                  else
    336331                    *q = '%';
    337                   break;
     332                  goto endsrch;
    338333                }
    339               else if (ftab[j].type == S_FMT_ULONG)
     334                break;
     335
     336              case S_FMT_ULONG:
    340337                {
    341338                  ftab[j].data_str = (char *) SH_ALLOC(64);
     
    353350                  else
    354351                    *q = '%';
    355                   break;
     352                  goto endsrch;
    356353                }
    357               else if (ftab[j].type == S_FMT_LONG)
     354                break;
     355
     356              case S_FMT_LONG:
    358357                {
    359358                  ftab[j].data_str = (char *) SH_ALLOC(64);
     
    371370                  else
    372371                    *q = '%';
    373                   break;
     372                  goto endsrch;
    374373                }
    375               else if (ftab[j].type == S_FMT_TIME)
     374                break;
     375
     376              case S_FMT_TIME:
    376377                {
    377378                  ftab[j].data_str = (char *) SH_ALLOC(64);
     
    401402                  else
    402403                    *q = '%';
    403                   break;
     404                  goto endsrch;
    404405                }
     406                break;
     407
     408              default:
     409                /* do nothing */;
     410              }
    405411
    406412            }
    407           else
    408             ++j;
    409         }
     413          ++j;
     414        }
     415
     416    endsrch:
     417
     418      p = q;
    410419
    411420      /* -- not found -- */
     
    413422        {
    414423          *q = '%';
    415           p = q;
    416424          ++p;
    417425        }
    418       else
    419         {
    420           p = q;
    421         }
     426
    422427    }
    423428
     
    443448   */
    444449  j = 0;
    445   while (ftab[j].fchar != '\0')
    446     {
    447       if (ftab[j].type != S_FMT_STRING && ftab[j].data_str != NULL)
    448         SH_FREE(ftab[j].data_str);
    449       ++j;
    450     }
     450  while (ftab[j].fchar != '\0') {
     451    if (ftab[j].type != S_FMT_STRING && ftab[j].data_str != NULL)
     452      SH_FREE(ftab[j].data_str);
     453    ++j;
     454  }
    451455  SH_FREE(fmt);
    452456
     
    474478{
    475479  int i = 0, j, k, l = 0;
     480  char c;
     481
     482#define SH_HEXCHAR(x, y) \
     483    c = (x); \
     484    if ( c >= '0' && c <= '9' ) \
     485      y = c - '0'; \
     486    else if ( c >= 'a' && c <= 'f' ) \
     487      y = c - 'a' + 10; \
     488    else if ( c >= 'A' && c <= 'F' ) \
     489      y = c - 'A' + 10; \
     490    else \
     491      SL_RETURN((-1), _("sh_util_hextobinary"))
     492
    476493
    477494  SL_ENTER(_("sh_util_hextobinary"));
     
    479496  while (i < bytes)
    480497    {
    481       k = sh_util_hexchar(hex[i]); j = sh_util_hexchar(hex[i+1]);
     498      SH_HEXCHAR(hex[i],   k);
     499      SH_HEXCHAR(hex[i+1], j);
     500     
     501      binary[l] = (char)(k * 16 + j);
     502      ++l; i+= 2;
     503
     504      /* k = sh_util_hexchar(hex[i]); j = sh_util_hexchar(hex[i+1]);
    482505      if (k != -1 && j != -1)
    483506        {
     
    489512          SL_RETURN((-1), _("sh_util_hextobinary"));
    490513        }
     514      */
    491515    }
    492516 
     
    654678}   
    655679
    656  
    657680 
    658681/* a simple compressor
     
    785808  UINT32   retval;
    786809  UINT32 * res;
     810  static   UINT32   res_vec[6];
     811  static   int      res_num = 0;
    787812  register int i;
     813
     814  if (res_num > 0)
     815    {
     816      retval  = res_vec[res_num];
     817      res_num = (res_num == 5) ? 0 : (res_num + 1);
     818      return  retval;
     819    }
    788820
    789821  taus_svec[0] = taus_get_long (state1);
     
    798830                                   (unsigned long)(6 * sizeof(UINT32)));
    799831
    800   for (i = 1; i < KEY_BYT/4; ++i)
     832  for (i = 1; i < 6; ++i)
    801833    {
    802       res[0] ^= res[i];
    803       res[i]  = 0;
    804     }
    805   retval = res[0];
     834      res_vec[i] = res[i];
     835    }
     836  retval  = taus_svec[0];
     837  res_num = 1;
    806838
    807839  taus_svec[0] = 0; taus_svec[1] = 0; taus_svec[2] = 0;
Note: See TracChangeset for help on using the changeset viewer.