#include <stdlib.h>\r
\r
#include <stdio.h>\r
-\r
-int\r
-str_replace(char** str, const char* what, const char* with, const char* delimiters)\r
-{\r
- size_t pos, i, len;\r
- char* begin = NULL;\r
- char* buf;\r
- int size;\r
-\r
- if(!*str || !what)\r
- {\r
- errno = EINVAL;\r
- return -1;\r
- }\r
-\r
- if(delimiters)\r
- {\r
- char* delimited;\r
-\r
- if(!(delimited = (char*) calloc((strlen(what) + 2) , sizeof(char))))\r
- return -1;\r
-\r
- len = strlen(delimiters);\r
-\r
- for(i = 0; i < len; i++)\r
- {\r
- memset(delimited, 0, (strlen(what) + 2));\r
-\r
- sprintf(delimited,"%s%c", what, delimiters[i]);\r
-\r
- if((begin = strstr(*str, delimited)))\r
- break;\r
- }\r
-\r
- free(delimited);\r
- }\r
- else\r
- begin = strstr(*str, what);\r
-\r
-\r
- if(!begin && (size = (int)strlen(*str) - (int)strlen(what)) >= 0 && !strcmp(*str + size, what))\r
- begin = strstr(*str, what);\r
-\r
- if(!begin)\r
- {\r
- errno = ESRCH;\r
- return -1;\r
- }\r
-\r
- pos = begin - *str;\r
-\r
- i = 0;\r
-\r
- pos += strlen(what);\r
-\r
- if(begin == *str)\r
- {\r
- if(!(buf = (char*) calloc((with ? strlen(with) : 0) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char))))\r
- return -1;\r
-\r
- if(with)\r
- strcpy(buf, with);\r
-\r
- if(pos < strlen(*str))\r
- strcpy(buf + (with ? strlen(with) : 0), *str + pos);\r
- }\r
- else\r
- {\r
- if(!(buf = (char*) calloc((begin - *str) + (with ? strlen(with) : 0) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char))))\r
- return -1;\r
-\r
- strncpy(buf, *str, (begin - *str));\r
-\r
- if(with)\r
- strcpy(buf + (begin - *str) , with);\r
-\r
- if(pos < strlen(*str))\r
- strcpy(buf + (begin - *str) + (with ? strlen(with) : 0), *str + pos);\r
- }\r
-\r
- free(*str);\r
-\r
- *str = buf;\r
-\r
- return 0;\r
-\r
-}\r
-\r
-int\r
-str_replace_all(char** str, const char* what, const char* with, const char* delimiters)\r
-{\r
- int rv;\r
-\r
- while(!(rv = str_replace(str, what, with, delimiters)));\r
-\r
- return (errno == ESRCH) ? 0 : -1;\r
-}\r
-\r
-\r
-\r
-\r
-\r
+\rint \r
+str_replace(char **str, const char *what, const char *with,
+ const char *delimiters) \r
+{
+ \rsize_t pos, i, len;
+ \rchar *begin = NULL;
+ \rchar *buf;
+ \rint size;
+ \r\rif (!*str || !what)
+ \r {
+ \rerrno = EINVAL;
+ \rreturn -1;
+ \r}
+ \r\rif (delimiters)
+ \r {
+ \rchar *delimited;
+ \r\rif (!(delimited = (char *) calloc((strlen(what) + 2), sizeof(char))))
+ \rreturn -1;
+ \r\rlen = strlen(delimiters);
+ \r\rfor (i = 0; i < len; i++)
+ \r {
+ \rmemset(delimited, 0, (strlen(what) + 2));
+ \r\rsprintf(delimited, "%s%c", what, delimiters[i]);
+ \r\rif ((begin = strstr(*str, delimited)))
+ \rbreak;
+ \r}
+ \r\rfree(delimited);
+ \r}
+ \r
+ else
+ \rbegin = strstr(*str, what);
+ \r\r\rif (!begin && (size = (int) strlen(*str) - (int) strlen(what)) >= 0
+ && !strcmp(*str + size, what))
+ \rbegin = strstr(*str, what);
+ \r\rif (!begin)
+ \r {
+ \rerrno = ESRCH;
+ \rreturn -1;
+ \r}
+ \r\rpos = begin - *str;
+ \r\ri = 0;
+ \r\rpos += strlen(what);
+ \r\rif (begin == *str)
+ \r {
+ \rif (!
+ (buf =
+ (char *) calloc((with ? strlen(with) : 0) +
+ ((pos <
+ strlen(*str)) ? strlen(*str + pos) : 0) + 1,
+ sizeof(char))))
+ \rreturn -1;
+ \r\rif (with)
+ \rstrcpy(buf, with);
+ \r\rif (pos < strlen(*str))
+ \rstrcpy(buf + (with ? strlen(with) : 0), *str + pos);
+ \r}
+ \r
+ else
+ \r {
+ \rif (!
+ (buf =
+ (char *) calloc((begin - *str) + (with ? strlen(with) : 0) +
+ ((pos <
+ strlen(*str)) ? strlen(*str + pos) : 0) + 1,
+ sizeof(char))))
+ \rreturn -1;
+ \r\rstrncpy(buf, *str, (begin - *str));
+ \r\rif (with)
+ \rstrcpy(buf + (begin - *str), with);
+ \r\rif (pos < strlen(*str))
+ \rstrcpy(buf + (begin - *str) + (with ? strlen(with) : 0),
+ *str + pos);
+ \r}
+ \r\rfree(*str);
+ \r\r*str = buf;
+ \r\rreturn 0;
+\r\r}
+
+\r\rint \r
+str_replace_all(char **str, const char *what, const char *with,
+ const char *delimiters) \r
+{
+ \rint rv;
+ \r\rwhile (!(rv = str_replace(str, what, with, delimiters)));
+ \r\rreturn (errno == ESRCH) ? 0 : -1;
+\r}
+
+\r\r\r\r\r\r