--- tinycdb/cdb.c +++ tinycdb/cdb.c @@ -4,7 +4,9 @@ * Public domain. */ -#define _GNU_SOURCE /* #define this even on Windows */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE /* #define this even on Windows */ +#endif #ifdef _WIN32 /* by the way, how about win64? */ # include @@ -130,7 +132,8 @@ static int qmode(char *dbname, const char *key, int num, int flags) allocbuf(cdb_datalen(&c)); if (cdb_read(&c, buf, cdb_datalen(&c), cdb_datapos(&c)) != 0) error(errno, "unable to read value"); - fwrite(buf, 1, cdb_datalen(&c), stdout); + if (fwrite(buf, 1, cdb_datalen(&c), stdout) != cdb_datalen(&c)) + error(errno, "unable to output value"); if (flags & F_MAP) putchar('\n'); if (num) break; @@ -316,9 +319,7 @@ addrec(struct cdb_make *cdbmp, if (r < 0) error(errno, "cdb_make_put"); else if (r && (flags & F_WARNDUP)) { - fprintf(stderr, "%s: key `", progname); - fwrite(key, 1, klen, stderr); - fputs("' duplicated\n", stderr); + fprintf(stderr, "%s: key `%.*s' duplicated\n", progname, klen, key); if (flags & F_ERRDUP) exit(1); }