Changeset 34 for trunk/src/sh_hash.c


Ignore:
Timestamp:
May 19, 2006, 8:09:51 PM (18 years ago)
Author:
rainer
Message:

Code cleanup and minor fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_hash.c

    r27 r34  
    6969#define QUOTE_CHAR '='
    7070
    71 static char * unquote_string (char * str)
    72 {
    73   int    i = 0, j, k = 0, len, t1, t2, l2;
     71char * unquote_string (const char * str)
     72{
     73  int    i = 0, t1, t2;
    7474  char * tmp = NULL;
     75  size_t len, l2, j, k = 0;
    7576
    7677  SL_ENTER(_("unquote_string"));
     
    115116char * int2hex (unsigned char i)
    116117{
    117   int j, k;
    118 
    119   j = i / 16;
    120   k = i - (j*16);
    121   if (j < 10)
    122     i2h[0] = '0'+j;
    123   else
    124     i2h[0] = 'A'+(j-10);
    125  
    126   if (k < 10)
    127     i2h[1] = '0'+k;
    128   else
    129     i2h[1] = 'A'+(k-10);
     118  static char hexchars[] = "0123456789ABCDEF";
     119
     120  i2h[0] = hexchars[(((i) & 0xF0) >> 4)]; /* high */
     121  i2h[1] = hexchars[((i) & 0x0F)];        /* low  */
    130122
    131123  return i2h;
    132124}
    133125
    134 static char * quote_string (char * str)
    135 {
    136   int    i = 0, j, k = 0, len;
     126
     127char * quote_string (const char * str)
     128{
    137129  char * tmp;
    138130  char * tmp2;
     131  size_t len, l2, j, i = 0, k = 0;
    139132
    140133  SL_ENTER(_("quote_string"));
     
    150143    if (str[j] == '\n' || str[j] == QUOTE_CHAR) ++i;
    151144
    152   tmp = SH_ALLOC(len + 1 + 3*i);
     145  l2 = len + 1;
     146  if (sl_ok_muls(3, i) && sl_ok_adds(l2, (3*i)))
     147    {
     148      tmp = SH_ALLOC(len + 1 + 3*i);
     149    }
     150  else
     151    {
     152      sh_error_handle((-1), FIL__, __LINE__, -1, MSG_E_SUBGEN,
     153                      _("integer overflow"),
     154                      _("quote_string"));
     155      SL_RETURN(NULL, _("quote_string"));
     156    }
     157
    153158  for (j = 0; j <= len; ++j)
    154159    {
     
    492497      if (0 != i)
    493498        {
    494           ptr = sh_util_basename (p->fullpath);
     499          ptr = sh_util_dirname (p->fullpath);
    495500          if (ptr)
    496501            {
     
    724729
    725730  if (sizeofline < 2) {
    726     line[0] = '\0';
     731    if (sizeofline > 0) line[0] = '\0';
    727732    return 0;
    728733  }
     
    736741  if (n > 1) {
    737742    --n;
    738     line[n] = '\0';
     743    line[n] = '\0'; /* remove terminating '\n' */
    739744  }
    740745  return n;
     
    791796  while (1)
    792797    {
    793       i =  sh_hash_getline (sh_fin_fd, line, size-1);
     798      i =  sh_hash_getline (sh_fin_fd, line, size);
    794799      if (i < 0 )
    795800        {
     
    860865  sh_filestore_t ft;
    861866  long i;
     867  size_t len;
    862868  char * fullpath;
    863869  char * linkpath;
     
    910916  /* Read next record -- Part Two -- Fullpath
    911917   */
    912   i =  sh_hash_getline (sh_fin_fd, line, size-1);
     918  i =  sh_hash_getline (sh_fin_fd, line, size);
    913919  if (i < 0 )
    914920    {
     
    926932
    927933  tmp = unquote_string (line);
    928   i = sl_strlen(tmp)+1;
    929   fullpath = SH_ALLOC(i);
    930   sl_strlcpy (fullpath, tmp, i);
     934  len = sl_strlen(tmp)+1;
     935  fullpath = SH_ALLOC(len);
     936  (void) sl_strlcpy (fullpath, tmp, len);
    931937  if (tmp)
    932938    SH_FREE(tmp);
    933   if (fullpath[i-2] == '\n')
    934     fullpath[i-2] = '\0';
     939  if (fullpath[len-2] == '\n')
     940    fullpath[len-2] = '\0';
    935941
    936942  /* Read next record -- Part Three -- Linkpath
    937943   */
    938   i =  sh_hash_getline (sh_fin_fd, line, size-1);
     944  i =  sh_hash_getline (sh_fin_fd, line, size);
    939945  if (i < 0 )
    940946    {
     
    953959
    954960  tmp = unquote_string (line);
    955   i = sl_strlen(tmp)+1;
    956   linkpath = SH_ALLOC(i);
    957   sl_strlcpy (linkpath, tmp, i);
     961  len = sl_strlen(tmp)+1;
     962  linkpath = SH_ALLOC(len);
     963  (void) sl_strlcpy (linkpath, tmp, len);
    958964  if (tmp)
    959965    SH_FREE(tmp);
    960   if (linkpath[i-2] == '\n')
    961     linkpath[i-2] = '\0';
     966  if (linkpath[len-2] == '\n')
     967    linkpath[len-2] = '\0';
    962968
    963969  /* Read next record -- Part Four -- Decode
     
    10041010void sh_hash_init ()
    10051011{
     1012
     1013#define FGETS_BUF 16384
     1014
    10061015  sh_file_t * p;
    10071016  SL_TICKET fd    = (-1);
     
    11111120
    11121121  fin_cp = fdopen(get_the_fd(fd), "rb");
    1113   buf = (char *) SH_ALLOC(8192);
    1114 
    1115 
    1116   /* while ( (bufc = sh_unix_getline (fd, buf, 8191)) > 0) */
    1117   while (NULL != fgets(buf, 8192, fin_cp))
     1122  buf = SH_ALLOC(FGETS_BUF);
     1123
     1124  while (NULL != fgets(buf, FGETS_BUF, fin_cp))
    11181125    {
    11191126      bufc = 0;
    1120       while (bufc < 8192) {
     1127      while (bufc < FGETS_BUF) {
    11211128        if (buf[bufc] == '\n') { ++bufc; break; }
    11221129        ++bufc;
     
    12731280int sh_hash_version_string(const char * str)
    12741281{
    1275   int i;
    12761282  if (str)
    12771283    {
    1278       i = sl_strlen(str);
    12791284      if (sh_db_version_string != NULL) {
    12801285        SH_FREE(sh_db_version_string);
     
    12851290          return 0;
    12861291        }
    1287       sh_db_version_string = SH_ALLOC(i+1);
    1288       sl_strlcpy(sh_db_version_string, str, i+1);
     1292      sh_db_version_string = sh_util_strdup(str);
    12891293      return 0;
    12901294    }
     
    12921296}
    12931297
    1294 #if 0
    1295 void sh_hash_pushdata_reset ()
    1296 {
    1297   if (!SL_ISERROR(pushdata_fd))
    1298     {
    1299       sl_close(pushdata_fd);
    1300       pushdata_fd = -1;
    1301     }
    1302   pushdata_isfirst =  1;
    1303 }
    1304 #endif
    13051298
    13061299void sh_hash_pushdata (file_type * buf, char * fileHash)
     
    14571450#endif
    14581451
    1459     if (tmp_len <= MAX_PATH_STORE)
     1452    if (tmp && tmp_len <= MAX_PATH_STORE)
    14601453      {
    14611454        sl_strlcpy(fullpath, buf->fullpath, MAX_PATH_STORE+1);
     
    14751468                   KEY_LEN+1);
    14761469      }
     1470    if (tmp) SH_FREE(tmp);
     1471  }
     1472
     1473#if defined(SH_STEALTH)
     1474  sh_do_encode(fullpath, sl_strlen(fullpath));
     1475#endif
     1476
     1477  tmp = quote_string(fullpath);
     1478  if (tmp) {
     1479    sl_strlcpy(fullpath, tmp, MAX_PATH_STORE+1);
    14771480    SH_FREE(tmp);
    14781481  }
    1479 
    1480 #if defined(SH_STEALTH)
    1481   sh_do_encode(fullpath, sl_strlen(fullpath));
    1482 #endif
    1483 
    1484   tmp = quote_string(fullpath);
    1485   sl_strlcpy(fullpath, tmp, MAX_PATH_STORE+1);
    1486   SH_FREE(tmp);
    14871482
    14881483  if (buf != NULL && buf->c_mode[0] == 'l' && buf->linkpath != NULL)
     
    14991494#endif
    15001495
    1501       if (tmp_len <= MAX_PATH_STORE)
     1496      if (tmp && tmp_len <= MAX_PATH_STORE)
    15021497        {
    15031498          sl_strlcpy(linkpath, buf->linkpath, MAX_PATH_STORE+1); 
     
    15101505                     KEY_LEN+1);
    15111506        }
    1512       SH_FREE(tmp);
     1507      if (tmp) SH_FREE(tmp);
    15131508
    15141509#if defined(SH_STEALTH)
     
    15161511#endif
    15171512      tmp = quote_string(linkpath);
    1518       sl_strlcpy(linkpath, tmp, MAX_PATH_STORE+1);
    1519       SH_FREE(tmp);
     1513      if (tmp)
     1514        {
     1515          sl_strlcpy(linkpath, tmp, MAX_PATH_STORE+1);
     1516          SH_FREE(tmp);
     1517        }
    15201518    }
    15211519
     
    19771975  sh_file_t    * fp;
    19781976  sh_filestore_t p;
    1979   long i;
     1977
     1978  size_t len;
    19801979  char * fullpath;
    19811980  char * linkpath;
     
    20142013  fp->modi_mask = 0L;
    20152014
    2016   i = sl_strlen(buf->fullpath);
    2017   if (i <= MAX_PATH_STORE)
    2018     {
    2019       fullpath = SH_ALLOC(i+ 1);
    2020       sl_strlcpy(fullpath, buf->fullpath, i+1);
     2015  len = sl_strlen(buf->fullpath);
     2016  if (len <= MAX_PATH_STORE)
     2017    {
     2018      fullpath = SH_ALLOC(len+1);
     2019      sl_strlcpy(fullpath, buf->fullpath, len+1);
    20212020    }
    20222021  else
     
    20242023      fullpath = SH_ALLOC(KEY_LEN + 1);
    20252024      sl_strlcpy(fullpath,
    2026                  sh_tiger_hash (buf->fullpath, TIGER_DATA, i),
     2025                 sh_tiger_hash (buf->fullpath, TIGER_DATA, len),
    20272026                 KEY_LEN+1);
    20282027    }
     
    20312030  if (buf->c_mode[0] == 'l')
    20322031    { 
    2033       i = sl_strlen(buf->linkpath);
    2034       if (i <= MAX_PATH_STORE)
    2035         {
    2036           linkpath = SH_ALLOC(i+ 1);
    2037           sl_strlcpy(linkpath, buf->linkpath, i+1);
     2032      len = sl_strlen(buf->linkpath);
     2033      if (len <= MAX_PATH_STORE)
     2034        {
     2035          linkpath = SH_ALLOC(len+1);
     2036          sl_strlcpy(linkpath, buf->linkpath, len+1);
    20382037        }
    20392038      else
     
    20412040          linkpath = SH_ALLOC(KEY_LEN + 1);
    20422041          sl_strlcpy(linkpath,
    2043                      sh_tiger_hash (buf->linkpath, TIGER_DATA, i),
     2042                     sh_tiger_hash (buf->linkpath, TIGER_DATA, len),
    20442043                     KEY_LEN+1);
    20452044        }
     
    29422941              if (p->linkpath != NULL)
    29432942                SH_FREE(p->linkpath);
    2944               p->linkpath = (char*)SH_ALLOC (sl_strlen(theFile->linkpath) + 1);
    2945               sl_strlcpy(p->linkpath, theFile->linkpath,
    2946                          sl_strlen(theFile->linkpath) + 1);
     2943              p->linkpath = sh_util_strdup(theFile->linkpath);
    29472944            }
    29482945#endif
     
    30263023                  if (p->linkpath != NULL)
    30273024                    SH_FREE(p->linkpath);
    3028                   p->linkpath = SH_ALLOC(1 + strlen(theFile->linkpath));
    3029                   sl_strlcpy(p->linkpath, theFile->linkpath,
    3030                              1 + strlen(theFile->linkpath));
     3025                  p->linkpath = sh_util_strdup(theFile->linkpath);
    30313026                }
    30323027              else
Note: See TracChangeset for help on using the changeset viewer.