Modified version of http://cvs.openpkg.org/fileview?f=openpkg-src/cvsps/cvsps.patch&v=1.13 Index: cache.c --- cache.c.orig 2008-04-02 03:18:44 +0200 +++ cache.c 2008-04-02 09:10:25 +0200 @@ -361,7 +361,7 @@ strcpy(buff, p_buff); - while ((s = strsep(&p, ";"))) + while ((s = my_strsep(&p, ";"))) { char * c = strchr(s, ':'); Index: cvs_direct.c --- cvs_direct.c.orig 2008-04-02 03:18:44 +0200 +++ cvs_direct.c 2008-04-02 09:10:25 +0200 @@ -92,12 +92,12 @@ strcpy_a(root, p_root, PATH_MAX); - tok = strsep(&p, ":"); + tok = my_strsep(&p, ":"); /* if root string looks like :pserver:... then the first token will be empty */ if (strlen(tok) == 0) { - char * method = strsep(&p, ":"); + char * method = my_strsep(&p, ":"); if (strcmp(method, "pserver") == 0) { ctx = open_ctx_pserver(ctx, p); @@ -185,14 +185,14 @@ strcpy_a(root, p_root, PATH_MAX); - tok = strsep(&p, ":"); + tok = my_strsep(&p, ":"); if (strlen(tok) == 0 || !p) { debug(DEBUG_APPERROR, "parse error on third token"); goto out_free_err; } - tok2 = strsep(&tok, "@"); + tok2 = my_strsep(&tok, "@"); if (!strlen(tok2) || (!tok || !strlen(tok))) { debug(DEBUG_APPERROR, "parse error on user@server in pserver"); @@ -272,7 +272,7 @@ strcpy_a(root, p_root, PATH_MAX); /* if there's a ':', it's remote */ - tok = strsep(&p, ":"); + tok = my_strsep(&p, ":"); if (p) { @@ -281,7 +281,7 @@ if (!cvs_rsh) cvs_rsh = "rsh"; - tok2 = strsep(&tok, "@"); + tok2 = my_strsep(&tok, "@"); if (tok) snprintf(execcmd, PATH_MAX, "%s -l %s %s %s server", cvs_rsh, tok2, tok, cvs_server); @@ -776,7 +776,7 @@ static int parse_patch_arg(char * arg, char ** str) { char *tok, *tok2 = ""; - tok = strsep(str, " "); + tok = my_strsep(str, " "); if (!tok) return 0; @@ -796,7 +796,7 @@ /* see if command wants two args and they're separated by ' ' */ if (tok[2] == 0 && strchr("BdDFgiorVxYz", tok[1])) { - tok2 = strsep(str, " "); + tok2 = my_strsep(str, " "); if (!tok2) { debug(DEBUG_APPERROR, "diff_opts parse_error: argument %s requires two arguments", tok); Index: util.c --- util.c.orig 2008-04-02 03:18:44 +0200 +++ util.c 2008-04-02 09:10:25 +0200 @@ -316,3 +316,31 @@ exit(1); } } + +char *my_strsep(char **stringp, const char *delim) +{ + char *s; + const char *spanp; + int c, sc; + char *tok; + + if ((s = *stringp) == NULL) + return NULL; + for (tok = s;;) { + c = *s++; + spanp = delim; + do { + if ((sc = *spanp++) == c) { + if (c == 0) + s = NULL; + else + s[-1] = 0; + *stringp = s; + return tok; + } + } while (sc != 0); + } + /* NOTREACHED */ + return NULL; +} + Index: util.h --- util.h.orig 2008-04-02 03:18:44 +0200 +++ util.h 2008-04-02 09:15:35 +0200 @@ -24,5 +24,6 @@ void timing_stop(const char *); int my_system(const char *); int escape_filename(char *, int, const char *); +char *my_strsep(char **, const char *); #endif /* UTIL_H */