From 01f6e717f3e0bf953fadd3de22096c9025c3d38d Mon Sep 17 00:00:00 2001 From: Kevin Coffman Date: Fri, 12 Oct 2007 16:35:00 -0400 Subject: [PATCH] Copy new cacheio functions used by svcgssd to nfslib Copy private qword_ functions from the svcgssd version into the general nfslib library. Add prototypes as needed. Also, update readline to use a bigger buffer allocation as is needed in the svcgssd version. Signed-off-by: Kevin Coffman Signed-off-by: Neil Brown --- support/include/nfslib.h | 5 +++++ support/nfs/cacheio.c | 47 ++++++++++++++++++++++++++++++++++------ 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/support/include/nfslib.h b/support/include/nfslib.h index ffa2440..422b012 100644 --- a/support/include/nfslib.h +++ b/support/include/nfslib.h @@ -144,6 +144,11 @@ int qword_get(char **bpp, char *dest, int bufsize); int qword_get_int(char **bpp, int *anint); void cache_flush(int force); int check_new_cache(void); +void qword_add(char **bpp, int *lp, char *str); +void qword_addhex(char **bpp, int *lp, char *buf, int blen); +void qword_addint(char **bpp, int *lp, int n); +void qword_adduint(char **bpp, int *lp, unsigned int n); +void qword_addeol(char **bpp, int *lp); void closeall(int min); 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; -- 2.39.2