1 #include <str_replace.h>
\r
8 str_replace(char **str, const char *what, const char *with,
9 const char *delimiters)
\r
15 \r\rif (!*str || !what)
23 \r\rif (!(delimited = (char *) calloc((strlen(what) + 2), sizeof(char))))
25 \r\rlen = strlen(delimiters);
26 \r\rfor (i = 0; i < len; i++)
28 \rmemset(delimited, 0, (strlen(what) + 2));
29 \r\rsprintf(delimited, "%s%c", what, delimiters[i]);
30 \r\rif ((begin = strstr(*str, delimited)))
37 \rbegin = strstr(*str, what);
38 \r\r\rif (!begin && (size = (int) strlen(*str) - (int) strlen(what)) >= 0
39 && !strcmp(*str + size, what))
40 \rbegin = strstr(*str, what);
46 \r\rpos = begin - *str;
48 \r\rpos += strlen(what);
49 \r\rif (begin == *str)
53 (char *) calloc((with ? strlen(with) : 0) +
55 strlen(*str)) ? strlen(*str + pos) : 0) + 1,
60 \r\rif (pos < strlen(*str))
61 \rstrcpy(buf + (with ? strlen(with) : 0), *str + pos);
68 (char *) calloc((begin - *str) + (with ? strlen(with) : 0) +
70 strlen(*str)) ? strlen(*str + pos) : 0) + 1,
73 \r\rstrncpy(buf, *str, (begin - *str));
75 \rstrcpy(buf + (begin - *str), with);
76 \r\rif (pos < strlen(*str))
77 \rstrcpy(buf + (begin - *str) + (with ? strlen(with) : 0),
86 str_replace_all(char **str, const char *what, const char *with,
87 const char *delimiters)
\r
90 \r\rwhile (!(rv = str_replace(str, what, with, delimiters)));
91 \r\rreturn (errno == ESRCH) ? 0 : -1;