aboutsummaryrefslogtreecommitdiffstats
path: root/plpftp
diff options
context:
space:
mode:
authorReuben Thomas <rrt@sc3d.org>2008-03-13 16:57:40 +0000
committerReuben Thomas <rrt@sc3d.org>2008-03-13 16:57:40 +0000
commit4fdbdae926cb7809eebb197a12696e509e1e1ec7 (patch)
tree24a96e0cc6192c1da6c8cd29a97a686454375f1e /plpftp
parent6a1bc6abcb370c2238a1f0f878cdaec9dda18b2b (diff)
downloadplptools-4fdbdae926cb7809eebb197a12696e509e1e1ec7.tar.gz
plptools-4fdbdae926cb7809eebb197a12696e509e1e1ec7.tar.bz2
plptools-4fdbdae926cb7809eebb197a12696e509e1e1ec7.zip
Refactor the bodies of getln and slurp into a single routine, get_upto.
Diffstat (limited to 'plpftp')
-rw-r--r--plpftp/ftp.cc37
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