X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fnfs%2Fcacheio.c;h=4df80a6f3efcf97e7be438e09b95a6f28669c045;hp=33231b01e1daae34cbff3933224b307978b7be37;hb=e91ff0175602cc56f223f1d92de6511099fa40d1;hpb=83e21e0398d4aa4028fb14586a7726da9088b65f diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c index 33231b0..4df80a6 100644 --- a/support/nfs/cacheio.c +++ b/support/nfs/cacheio.c @@ -109,10 +109,10 @@ void qword_printint(FILE *f, int num) fprintf(f, "%d ", num); } -void qword_eol(FILE *f) +int qword_eol(FILE *f) { fprintf(f,"\n"); - fflush(f); + return fflush(f); } @@ -205,16 +205,17 @@ int readline(int fd, char **buf, int *lenp) */ char *new; int nl; - *lenp += 128; + *lenp *= 2; new = realloc(*buf, *lenp); if (new == NULL) return 0; - nl = read(fd, *buf +len, *lenp - len); - if (nl <= 0 ) + *buf = new; + nl = read(fd, *buf + len, *lenp - len); + if (nl <= 0) return 0; - new += nl; + len += nl; } - (*buf)[len-1] = 0; + (*buf)[len-1] = '\0'; return 1; } @@ -246,8 +247,9 @@ cache_flush(int force) int c; char stime[20]; char path[200]; + time_t now; /* Note: the order of these caches is important. - * The need to be flushed in dependancy order. So + * They need to be flushed in dependancy order. So * a cache that references items in another cache, * as nfsd.fh entries reference items in nfsd.export, * must be flushed before the cache that it references. @@ -258,9 +260,11 @@ cache_flush(int force) "nfsd.export", NULL }; - stb.st_mtime = time(0); - if (!force) - stat(_PATH_ETAB, &stb); + now = time(0); + if (force || + stat(_PATH_ETAB, &stb) != 0 || + stb.st_mtime > now) + stb.st_mtime = time(0); sprintf(stime, "%ld\n", stb.st_mtime); for (c=0; cachelist[c]; c++) {