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

version 1.9.30.1, 2023/03/14 22:33:43 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 - 2019Copyright 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 522  str_getString2(char * __restrict data, int dlen, char  Line 522  str_getString2(char * __restrict data, int dlen, char 
         if (next)          if (next)
                 *next = (char*) pos + 1;                  *next = (char*) pos + 1;
         return pos - data;          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.9.30.1  
changed lines
  Added in v.1.10.18.1


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