I was told there was no particular reason to use realloc here.
This is basically a sed job:
Index: dkstats.c
===================================================================
RCS file: /var/cvs/src/usr.bin/vmstat/dkstats.c,v
retrieving revision 1.38
diff -u -p -r1.38 dkstats.c
--- dkstats.c 24 Dec 2015 03:25:08 -0000 1.38
+++ dkstats.c 5 Jan 2016 22:33:28 -0000
@@ -235,32 +235,32 @@ dkreadstats(void)
last.dk_time[i] = last.dk_time[j];
}
- cur.dk_select = realloc(cur.dk_select,
- dk_ndrive * sizeof(*cur.dk_select));
- cur.dk_rxfer = realloc(cur.dk_rxfer,
- dk_ndrive * sizeof(*cur.dk_rxfer));
- cur.dk_wxfer = realloc(cur.dk_wxfer,
- dk_ndrive * sizeof(*cur.dk_wxfer));
- cur.dk_seek = realloc(cur.dk_seek,
- dk_ndrive * sizeof(*cur.dk_seek));
- cur.dk_rbytes = realloc(cur.dk_rbytes,
- dk_ndrive * sizeof(*cur.dk_rbytes));
- cur.dk_wbytes = realloc(cur.dk_wbytes,
- dk_ndrive * sizeof(*cur.dk_wbytes));
- cur.dk_time = realloc(cur.dk_time,
- dk_ndrive * sizeof(*cur.dk_time));
- last.dk_rxfer = realloc(last.dk_rxfer,
- dk_ndrive * sizeof(*last.dk_rxfer));
- last.dk_wxfer = realloc(last.dk_wxfer,
- dk_ndrive * sizeof(*last.dk_wxfer));
- last.dk_seek = realloc(last.dk_seek,
- dk_ndrive * sizeof(*last.dk_seek));
- last.dk_rbytes = realloc(last.dk_rbytes,
- dk_ndrive * sizeof(*last.dk_rbytes));
- last.dk_wbytes = realloc(last.dk_wbytes,
- dk_ndrive * sizeof(*last.dk_wbytes));
- last.dk_time = realloc(last.dk_time,
- dk_ndrive * sizeof(*last.dk_time));
+ cur.dk_select = reallocarray(cur.dk_select,
+ dk_ndrive, sizeof(*cur.dk_select));
+ cur.dk_rxfer = reallocarray(cur.dk_rxfer,
+ dk_ndrive, sizeof(*cur.dk_rxfer));
+ cur.dk_wxfer = reallocarray(cur.dk_wxfer,
+ dk_ndrive, sizeof(*cur.dk_wxfer));
+ cur.dk_seek = reallocarray(cur.dk_seek,
+ dk_ndrive, sizeof(*cur.dk_seek));
+ cur.dk_rbytes = reallocarray(cur.dk_rbytes,
+ dk_ndrive, sizeof(*cur.dk_rbytes));
+ cur.dk_wbytes = reallocarray(cur.dk_wbytes,
+ dk_ndrive, sizeof(*cur.dk_wbytes));
+ cur.dk_time = reallocarray(cur.dk_time,
+ dk_ndrive, sizeof(*cur.dk_time));
+ last.dk_rxfer = reallocarray(last.dk_rxfer,
+ dk_ndrive, sizeof(*last.dk_rxfer));
+ last.dk_wxfer = reallocarray(last.dk_wxfer,
+ dk_ndrive, sizeof(*last.dk_wxfer));
+ last.dk_seek = reallocarray(last.dk_seek,
+ dk_ndrive, sizeof(*last.dk_seek));
+ last.dk_rbytes = reallocarray(last.dk_rbytes,
+ dk_ndrive, sizeof(*last.dk_rbytes));
+ last.dk_wbytes = reallocarray(last.dk_wbytes,
+ dk_ndrive, sizeof(*last.dk_wbytes));
+ last.dk_time = reallocarray(last.dk_time,
+ dk_ndrive, sizeof(*last.dk_time));
if (!cur.dk_select || !cur.dk_rxfer ||
!cur.dk_wxfer || !cur.dk_seek ||
@@ -271,32 +271,32 @@ dkreadstats(void)
!last.dk_time)
errx(1, "Memory allocation failure.");
} else {
- cur.dk_select = realloc(cur.dk_select,
- dk_ndrive * sizeof(*cur.dk_select));
- cur.dk_rxfer = realloc(cur.dk_rxfer,
- dk_ndrive * sizeof(*cur.dk_rxfer));
- cur.dk_wxfer = realloc(cur.dk_wxfer,
- dk_ndrive * sizeof(*cur.dk_wxfer));
- cur.dk_seek = realloc(cur.dk_seek,
- dk_ndrive * sizeof(*cur.dk_seek));
- cur.dk_rbytes = realloc(cur.dk_rbytes,
- dk_ndrive * sizeof(*cur.dk_rbytes));
- cur.dk_wbytes = realloc(cur.dk_wbytes,
- dk_ndrive * sizeof(*cur.dk_wbytes));
- cur.dk_time = realloc(cur.dk_time,
- dk_ndrive * sizeof(*cur.dk_time));
- last.dk_rxfer = realloc(last.dk_rxfer,
- dk_ndrive * sizeof(*last.dk_rxfer));
- last.dk_wxfer = realloc(last.dk_wxfer,
- dk_ndrive * sizeof(*last.dk_wxfer));
- last.dk_seek = realloc(last.dk_seek,
- dk_ndrive * sizeof(*last.dk_seek));
- last.dk_rbytes = realloc(last.dk_rbytes,
- dk_ndrive * sizeof(*last.dk_rbytes));
- last.dk_wbytes = realloc(last.dk_wbytes,
- dk_ndrive * sizeof(*last.dk_wbytes));
- last.dk_time = realloc(last.dk_time,
- dk_ndrive * sizeof(*last.dk_time));
+ cur.dk_select = reallocarray(cur.dk_select,
+ dk_ndrive, sizeof(*cur.dk_select));
+ cur.dk_rxfer = reallocarray(cur.dk_rxfer,
+ dk_ndrive, sizeof(*cur.dk_rxfer));
+ cur.dk_wxfer = reallocarray(cur.dk_wxfer,
+ dk_ndrive, sizeof(*cur.dk_wxfer));
+ cur.dk_seek = reallocarray(cur.dk_seek,
+ dk_ndrive, sizeof(*cur.dk_seek));
+ cur.dk_rbytes = reallocarray(cur.dk_rbytes,
+ dk_ndrive, sizeof(*cur.dk_rbytes));
+ cur.dk_wbytes = reallocarray(cur.dk_wbytes,
+ dk_ndrive, sizeof(*cur.dk_wbytes));
+ cur.dk_time = reallocarray(cur.dk_time,
+ dk_ndrive, sizeof(*cur.dk_time));
+ last.dk_rxfer = reallocarray(last.dk_rxfer,
+ dk_ndrive, sizeof(*last.dk_rxfer));
+ last.dk_wxfer = reallocarray(last.dk_wxfer,
+ dk_ndrive, sizeof(*last.dk_wxfer));
+ last.dk_seek = reallocarray(last.dk_seek,
+ dk_ndrive, sizeof(*last.dk_seek));
+ last.dk_rbytes = reallocarray(last.dk_rbytes,
+ dk_ndrive, sizeof(*last.dk_rbytes));
+ last.dk_wbytes = reallocarray(last.dk_wbytes,
+ dk_ndrive, sizeof(*last.dk_wbytes));
+ last.dk_time = reallocarray(last.dk_time,
+ dk_ndrive, sizeof(*last.dk_time));
if (!cur.dk_select || !cur.dk_rxfer ||
!cur.dk_wxfer || !cur.dk_seek ||