|
@@ -177,56 +177,6 @@ tor_memmem(const void *_haystack, size_t hlen,
|
|
|
#endif /* defined(HAVE_MEMMEM) && (!defined(__GNUC__) || __GNUC__ >= 2) */
|
|
|
}
|
|
|
|
|
|
-/** Helper for tor_strtok_r_impl: Advances cp past all characters in
|
|
|
- * <b>sep</b>, and returns its new value. */
|
|
|
-static char *
|
|
|
-strtok_helper(char *cp, const char *sep)
|
|
|
-{
|
|
|
- if (sep[1]) {
|
|
|
- while (*cp && strchr(sep, *cp))
|
|
|
- ++cp;
|
|
|
- } else {
|
|
|
- while (*cp && *cp == *sep)
|
|
|
- ++cp;
|
|
|
- }
|
|
|
- return cp;
|
|
|
-}
|
|
|
-
|
|
|
-/** Implementation of strtok_r for platforms whose coders haven't figured out
|
|
|
- * how to write one. Hey, retrograde libc developers! You can use this code
|
|
|
- * here for free! */
|
|
|
-char *
|
|
|
-tor_strtok_r_impl(char *str, const char *sep, char **lasts)
|
|
|
-{
|
|
|
- char *cp, *start;
|
|
|
- tor_assert(*sep);
|
|
|
- if (str) {
|
|
|
- str = strtok_helper(str, sep);
|
|
|
- if (!*str)
|
|
|
- return NULL;
|
|
|
- start = cp = *lasts = str;
|
|
|
- } else if (!*lasts || !**lasts) {
|
|
|
- return NULL;
|
|
|
- } else {
|
|
|
- start = cp = *lasts;
|
|
|
- }
|
|
|
-
|
|
|
- if (sep[1]) {
|
|
|
- while (*cp && !strchr(sep, *cp))
|
|
|
- ++cp;
|
|
|
- } else {
|
|
|
- cp = strchr(cp, *sep);
|
|
|
- }
|
|
|
-
|
|
|
- if (!cp || !*cp) {
|
|
|
- *lasts = NULL;
|
|
|
- } else {
|
|
|
- *cp++ = '\0';
|
|
|
- *lasts = strtok_helper(cp, sep);
|
|
|
- }
|
|
|
- return start;
|
|
|
-}
|
|
|
-
|
|
|
/** Represents a lockfile on which we hold the lock. */
|
|
|
struct tor_lockfile_t {
|
|
|
/** Name of the file */
|