From: Roy Marples Date: Fri, 12 Jun 2015 09:54:09 +0000 (+0000) Subject: Check fclose(3) writes correctly, thanks to Bob. X-Git-Tag: v6.9.1~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=32897869f1afd4bd2c6d943ee65d21492856048b;p=thirdparty%2Fdhcpcd.git Check fclose(3) writes correctly, thanks to Bob. --- diff --git a/auth.c b/auth.c index 4bfbfdc5..b24f7572 100644 --- a/auth.c +++ b/auth.c @@ -415,7 +415,8 @@ get_next_rdm_monotonic_counter(struct auth *auth) rdm++; if (fseek(fp, 0, SEEK_SET) == -1 || ftruncate(fileno(fp), 0) == -1 || - fprintf(fp, "0x%016" PRIu64 "\n", rdm) != 19) + fprintf(fp, "0x%016" PRIu64 "\n", rdm) != 19 || + fflush(fp) == EOF) { if (!auth->last_replay_set) { auth->last_replay = rdm; @@ -424,7 +425,6 @@ get_next_rdm_monotonic_counter(struct auth *auth) rdm = ++auth->last_replay; /* report error? */ } - fflush(fp); #ifdef LOCK_EX if (flocked == 0) flock(fileno(fp), LOCK_UN); diff --git a/duid.c b/duid.c index d24ebc47..b84c497e 100644 --- a/duid.c +++ b/duid.c @@ -140,7 +140,8 @@ duid_get(unsigned char *d, const struct interface *ifp) } len = duid_make(d, ifp, DUID_LLT); x = fprintf(fp, "%s\n", hwaddr_ntoa(d, len, line, sizeof(line))); - fclose(fp); + if (fclose(fp) == EOF) + x = -1; /* Failed to write the duid? scrub it, we cannot use it */ if (x < 1) { logger(ifp->ctx, LOG_ERR, "error writing DUID: %s: %m", DUID); diff --git a/ipv6.c b/ipv6.c index 00d74b46..2db5816c 100644 --- a/ipv6.c +++ b/ipv6.c @@ -251,7 +251,8 @@ ipv6_readsecret(struct dhcpcd_ctx *ctx) goto eexit; x = fprintf(fp, "%s\n", hwaddr_ntoa(ctx->secret, ctx->secret_len, line, sizeof(line))); - fclose(fp); + if (fclose(fp) == EOF) + x = -1; if (x > 0) return (ssize_t)ctx->secret_len;