2 * Copyright (C) 2009 Toni Gundogdu.
3 * Copyright (C) Laird Shaw.
7 * http://creativeandcritical.net/sites/default/files/replacebench.c
11 * Changes to the original code:
12 * - This revision _releases_ the source string
13 * - Rename "replace_opt" -> "strepl"
14 * - Minor style changes
23 char *strepl(const char *str
, const char *old
, const char *new)
25 size_t oldlen
, count
, retlen
, newlen
;
34 for (count
= 0, p
= str
; (q
= strstr(p
, old
)) != 0; p
= q
+ oldlen
)
36 retlen
= p
- str
+ strlen(p
) + count
* (newlen
- oldlen
);
41 if ((ret
= malloc(retlen
+ 1)) == 0)
44 for (r
= ret
, p
= str
; (q
= strstr(p
, old
)) != 0; p
= q
+ oldlen
)
53 memcpy(r
, new, newlen
);
58 /* See the notes above. */
64 /* vim: set ts=2 sw=2 tw=72 expandtab: */