Diff for /libelwix/src/str.c between versions 1.4.12.1 and 1.10.18.1

version 1.4.12.1, 2014/02/12 15:24:50 version 1.10.18.1, 2024/10/26 14:40:36
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004 - 2014Copyright 2004 - 2024
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 230  str_Hex2Dig(const char *psLine) Line 230  str_Hex2Dig(const char *psLine)
 {  {
         register int i, j;          register int i, j;
         char *str, szWork[3] = { 0, 0, 0 };          char *str, szWork[3] = { 0, 0, 0 };
        ait_val_t *v, s;        ait_val_t *v, s = AIT_VAL_INIT;
         u_char *b;          u_char *b;
         int n;          int n;
   
Line 286  str_Dig2Hex(ait_val_t *digz) Line 286  str_Dig2Hex(ait_val_t *digz)
   
         for (i = 0, b = AIT_GET_BUF(digz); i < AIT_LEN(digz); i++) {          for (i = 0, b = AIT_GET_BUF(digz); i < AIT_LEN(digz); i++) {
                 snprintf(szWork, sizeof szWork, "%02hhX", b[i]);                  snprintf(szWork, sizeof szWork, "%02hhX", b[i]);
                strncat(str, szWork, 2);                strcat(str, szWork);
         }          }
   
         return str;          return str;
 }  }
   
 /*  /*
    * str_Dig2Hex2() - Convert from digit array to Hex string
    *
    * @digz = Digits array
    * @diglen = Array length
    * return: NULL nothing to do or error; 
    *              !=0 Allocated new converted string (must be e_free())
   */
   char *
   str_Dig2Hex2(u_char * __restrict digz, int diglen)
   {
           register int i;
           char szWork[3] = { 0, 0, 0 }, *str;
           u_char *b;
   
           if (!digz || !diglen)
                   return NULL;
   
           str = e_malloc(diglen * 2 + 1);
           if (!str)
                   return NULL;
           else
                   memset(str, 0, diglen * 2 + 1);
   
           for (i = 0, b = digz; i < diglen; i++) {
                   snprintf(szWork, sizeof szWork, "%02hhX", b[i]);
                   strcat(str, szWork);
           }
   
           return str;
   }
   
   /*
  * str_LTrim() - Remove left whitespaces from text string   * str_LTrim() - Remove left whitespaces from text string
  *   *
  * @psLine = Text string   * @psLine = Text string
Line 432  str_Lower(char * __restrict psLine) Line 464  str_Lower(char * __restrict psLine)
 }  }
   
 /*  /*
 * str_getString() - Get string from data buffer * str_getString() - Get NULL delimited string from data buffer
  *   *
 * @data = Data buffer * @data = Const data buffer
  * @dlen = Data length   * @dlen = Data length
  * @next = Return next position after string if !=NULL   * @next = Return next position after string if !=NULL
  * return: -1 error or size of string    * return: -1 error or size of string 
Line 458  str_getString(const u_char * __restrict data, int dlen Line 490  str_getString(const u_char * __restrict data, int dlen
         if (next)          if (next)
                 *next = (char*) pos + 1;                  *next = (char*) pos + 1;
         return pos - data + 1;          return pos - data + 1;
   }
   
   /*
    * str_getString2() - Get string from data buffer with delimiter
    *
    * @data = Data buffer
    * @dlen = Data length
    * @delim = Data delimiter
    * @next = Return next position after delimited string if !=NULL
    * return: -1 error or size of string 
    */
   int
   str_getString2(char * __restrict data, int dlen, char delim, char ** __restrict next)
   {
           char *pos;
   
           if (!data || !dlen)
                   return -1;
   
           for (pos = data; pos < data + dlen; pos++)
                   if (!*pos || *pos == (u_char) delim) {
                           *pos = 0;
                           break;
                   }
           if (*pos) {
                   elwix_SetErr(ENOEXEC, "Not found null-terminated string");
                   return -1;
           }
   
           if (next)
                   *next = (char*) pos + 1;
           return pos - data;
   }
   
   /*
    * str_find2replace() - Search find string into data and replace
    *
    * @data = input string
    * @find = search for string
    * @replace = replace to string. If it is NULL then deletes found search string
    * @str = new produced allocate string. If it is NULL then just return found occurances of find
    * @mlen = allocated memory size for new string
    * return: -1 error, 0 not found or >0 how many occurances we have for find string
    */
   int
   str_find2replace(const char *data, const char *find, const char *replace, char **str, int *mlen)
   {
           int cnt = 0, data_len, slen, find_len, replace_len = 0;
           const char *pos, *s;
   
           if (!data || !find)
                   return -1;
   
           find_len = strlen(find);
           data_len = strlen(data);
           for (pos = data; (pos = strstr(pos, find)); pos += find_len, cnt++);
   
           /* just count occurances */
           if (!str || !mlen)
                   return cnt;
   
           slen = data_len - find_len * cnt;
           if (replace) {
                   replace_len = strlen(replace);
                   slen += replace_len * cnt;
           }
           /* alloc exports string */
           *mlen = slen + 1;
           *str = e_malloc(*mlen);
           if (!*str)
                   return -1;
           else
                   memset(*str, 0, *mlen);
   
           /* search & replace */
           for (pos = data; *pos;) {
                   s = strstr(pos, find);
                   if (s)
                           slen = s - pos;
                   else
                           slen = strlen(pos);
                   /* 
                    * This hack was made due to behaviour of compiler against strncat(*str, pos, slen)!
                    */
                   memcpy(*str + strlen(*str), pos, slen);
                   if (s) {
                           if (replace)
                                   strncat(*str, replace, replace_len);
                           pos += find_len;
                   }
                   pos += slen;
           }
   
           return cnt;
 }  }

Removed from v.1.4.12.1  
changed lines
  Added in v.1.10.18.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>