diff options
author | Reuben Thomas <rrt@sc3d.org> | 2008-03-13 16:57:40 +0000 |
---|---|---|
committer | Reuben Thomas <rrt@sc3d.org> | 2008-03-13 16:57:40 +0000 |
commit | 4fdbdae926cb7809eebb197a12696e509e1e1ec7 (patch) | |
tree | 24a96e0cc6192c1da6c8cd29a97a686454375f1e | |
parent | 6a1bc6abcb370c2238a1f0f878cdaec9dda18b2b (diff) | |
download | plptools-4fdbdae926cb7809eebb197a12696e509e1e1ec7.tar.gz plptools-4fdbdae926cb7809eebb197a12696e509e1e1ec7.tar.bz2 plptools-4fdbdae926cb7809eebb197a12696e509e1e1ec7.zip |
Refactor the bodies of getln and slurp into a single routine, get_upto.
-rw-r--r-- | plpftp/ftp.cc | 37 |
1 files changed, 11 insertions, 26 deletions
diff --git a/plpftp/ftp.cc b/plpftp/ftp.cc index 3a4b612..360cde3 100644 --- a/plpftp/ftp.cc +++ b/plpftp/ftp.cc @@ -254,14 +254,14 @@ stopPrograms(rpcs & r, const char *file) { } static char * -getln(FILE *fp) +get_upto(FILE *fp, const char *term, size_t *final_len) { size_t len = 256; int c; char *l = (char *)malloc(len), *s = l; assert(l); - for (c = getc(fp); c != '\n' && c != EOF; c = getc(fp)) { + for (c = getc(fp); c != EOF && strchr(term, c) == NULL; c = getc(fp)) { if (s == l + len) { l = (char *)realloc(l, len * 2); assert(l); @@ -275,11 +275,19 @@ getln(FILE *fp) } *s++ = '\0'; + if (final_len) + *final_len = s - l; l = (char *)realloc(l, s - l); assert(l); return l; } +static char* +getln(FILE *fp) +{ + return get_upto(fp, "\n", NULL); +} + static int startPrograms(rpcs & r, rfsv & a, const char *file) { Enum<rfsv::errs> res; @@ -415,33 +423,10 @@ ascii2PsiText(char *buf, int len) { } } -// FIXME: This is almost the same as getln. Ugh. static char * slurp(FILE *fp, size_t *final_len) { - size_t len = 256; - int c; - char *l = (char *)malloc(len), *s = l; - - assert(l); - for (c = getc(fp); c != EOF; c = getc(fp)) { - if (s == l + len) { - l = (char *)realloc(l, len * 2); - assert(l); - len *= 2; - } - *s++ = c; - } - if (s == l + len) { - l = (char *)realloc(l, len + 1); - assert(l); - } - *s++ = '\0'; - - *final_len = s - l; - l = (char *)realloc(l, s - l); - assert(l); - return l; + return get_upto(fp, "", final_len); } int |