summaryrefslogtreecommitdiffstats
path: root/lib/libdevstat
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2001-08-20 15:43:14 +0000
committerbrian <brian@FreeBSD.org>2001-08-20 15:43:14 +0000
commitf6df81abf7c436587911b4f8494b943eddbe6af8 (patch)
treedbf521d16a4edf150e49aec21b39fd2c3dab2077 /lib/libdevstat
parentad3a696e2958bcd36a6b684da7342ccdd7f9b4af (diff)
downloadFreeBSD-src-f6df81abf7c436587911b4f8494b943eddbe6af8.zip
FreeBSD-src-f6df81abf7c436587911b4f8494b943eddbe6af8.tar.gz
Better snprintf() handling.
Prompted by: bde
Diffstat (limited to 'lib/libdevstat')
-rw-r--r--lib/libdevstat/devstat.c61
1 files changed, 23 insertions, 38 deletions
diff --git a/lib/libdevstat/devstat.c b/lib/libdevstat/devstat.c
index 86694ea..b3c424d 100644
--- a/lib/libdevstat/devstat.c
+++ b/lib/libdevstat/devstat.c
@@ -246,60 +246,45 @@ devstat_getversion(kvm_t *kd)
int
devstat_checkversion(kvm_t *kd)
{
- int retval = 0;
- int errlen = 0;
char *func_name = "devstat_checkversion";
- int version;
+ int buflen, res, retval = 0, version;
version = devstat_getversion(kd);
if (version != DEVSTAT_VERSION) {
- int buflen = 0;
- char tmpstr[256];
-
/*
- * This is really pretty silly, but basically the idea is
- * that if getversion() returns an error (i.e. -1), then it
+ * If getversion() returns an error (i.e. -1), then it
* has printed an error message in the buffer. Therefore,
* we need to add a \n to the end of that message before we
* print our own message in the buffer.
*/
- if (version == -1) {
+ if (version == -1)
buflen = strlen(devstat_errbuf);
- errlen = snprintf(tmpstr, sizeof(tmpstr), "\n");
- strncat(devstat_errbuf, tmpstr,
- DEVSTAT_ERRBUF_SIZE - buflen - 1);
- if (errlen > 0)
- buflen += errlen;
- }
+ else
+ buflen = 0;
- errlen = snprintf(tmpstr, sizeof(tmpstr),
- "%s: userland devstat version %d is not "
- "the same as the kernel\n%s: devstat "
- "version %d\n", func_name, DEVSTAT_VERSION,
- func_name, version);
-
- if (version == -1) {
- strncat(devstat_errbuf, tmpstr,
- DEVSTAT_ERRBUF_SIZE - buflen - 1);
- if (errlen > 0)
- buflen += errlen;
- } else {
- strncpy(devstat_errbuf, tmpstr, DEVSTAT_ERRBUF_SIZE);
- devstat_errbuf[DEVSTAT_ERRBUF_SIZE - 1] = '\0';
- }
+ res = snprintf(devstat_errbuf + buflen,
+ DEVSTAT_ERRBUF_SIZE - buflen,
+ "%s%s: userland devstat version %d is not "
+ "the same as the kernel\n%s: devstat version %d\n",
+ version == -1 ? "\n" : "", func_name, DEVSTAT_VERSION,
+ func_name, version);
+
+ if (res < 0)
+ devstat_errbuf[buflen] = '\0';
+ buflen = strlen(devstat_errbuf);
if (version < DEVSTAT_VERSION)
- snprintf(tmpstr, sizeof(tmpstr),
- "%s: libdevstat newer than kernel\n",
- func_name);
+ res = snprintf(devstat_errbuf + buflen,
+ DEVSTAT_ERRBUF_SIZE - buflen,
+ "%s: libdevstat newer than kernel\n", func_name);
else
- snprintf(tmpstr, sizeof(tmpstr),
- "%s: kernel newer than libdevstat\n",
- func_name);
+ res = snprintf(devstat_errbuf + buflen,
+ DEVSTAT_ERRBUF_SIZE - buflen,
+ "%s: kernel newer than libdevstat\n", func_name);
- strncat(devstat_errbuf, tmpstr,
- DEVSTAT_ERRBUF_SIZE - buflen - 1);
+ if (res < 0)
+ devstat_errbuf[buflen] = '\0';
retval = -1;
}
OpenPOWER on IntegriCloud