| 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 */ |