From 4fdbdae926cb7809eebb197a12696e509e1e1ec7 Mon Sep 17 00:00:00 2001 From: Reuben Thomas Date: Thu, 13 Mar 2008 16:57:40 +0000 Subject: Refactor the bodies of getln and slurp into a single routine, get_upto. --- plpftp/ftp.cc | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) (limited to 'plpftp') 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 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 -- cgit v1.2.3