X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fnfs%2Fcacheio.c;h=48292f8a5d49841c48f323c1b5977691396ef6be;hp=9d271cd4733d77328a6f2b3e5ec8a80b5da8a73b;hb=01f6e717f3e0bf953fadd3de22096c9025c3d38d;hpb=44f7f2f92038572663acf22b4fd8dc34640c8c81 diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c index 9d271cd..48292f8 100644 --- a/support/nfs/cacheio.c +++ b/support/nfs/cacheio.c @@ -88,6 +88,37 @@ void qword_addhex(char **bpp, int *lp, char *buf, int blen) *lp = len; } +void qword_addint(char **bpp, int *lp, int n) +{ + int len; + + len = snprintf(*bpp, *lp, "%d ", n); + if (len > *lp) + len = *lp; + *bpp += len; + *lp -= len; +} + +void qword_adduint(char **bpp, int *lp, unsigned int n) +{ + int len; + + len = snprintf(*bpp, *lp, "%u ", n); + if (len > *lp) + len = *lp; + *bpp += len; + *lp -= len; +} + +void qword_addeol(char **bpp, int *lp) +{ + if (*lp <= 0) + return; + **bpp = '\n'; + (*bpp)++; + (*lp)--; +} + static char qword_buf[8192]; void qword_print(FILE *f, char *str) { @@ -192,23 +223,25 @@ int qword_get_int(char **bpp, int *anint) return 0; } +#define READLINE_BUFFER_INCREMENT 2048 + int readline(int fd, char **buf, int *lenp) { /* read a line into *buf, which is malloced *len long * realloc if needed until we find a \n * nul out the \n and return - * 0 of eof, 1 of success + * 0 on eof, 1 on success */ - int len = *lenp; + int len; - if (len == 0) { - char *b = malloc(128); + if (*lenp == 0) { + char *b = malloc(READLINE_BUFFER_INCREMENT); if (b == NULL) return 0; *buf = b; - *lenp = 128; + *lenp = READLINE_BUFFER_INCREMENT; } - len = read(fd, *buf, len); + len = read(fd, *buf, *lenp); if (len <= 0) return 0; while ((*buf)[len-1] != '\n') { @@ -217,7 +250,7 @@ int readline(int fd, char **buf, int *lenp) */ char *new; int nl; - *lenp *= 2; + *lenp += READLINE_BUFFER_INCREMENT; new = realloc(*buf, *lenp); if (new == NULL) return 0;