#include "main.h"
#include "cli.h"
+#define REALLOC_REPLY(r, a, m) \
+ do { \
+ if ((a)) { \
+ (r) = REALLOC((r), (m) * 2); \
+ if ((r)) { \
+ memset((r) + (m), 0, (m)); \
+ (m) *= 2; \
+ } \
+ } \
+ } while (0)
+
int
show_paths (char ** r, int * len, struct vectors * vecs, char * style)
{
again = ((c - reply) == (maxlen - 1));
- if (again)
- reply = REALLOC(reply, maxlen *= 2);
-
+ REALLOC_REPLY(reply, again, maxlen);
}
*r = reply;
*len = (int)(c - reply + 1);
c += snprint_multipath_topology(c, reply + maxlen - c, mpp, 2);
again = ((c - reply) == (maxlen - 1));
- if (again)
- reply = REALLOC(reply, maxlen *= 2);
-
+ REALLOC_REPLY(reply, again, maxlen);
}
*r = reply;
*len = (int)(c - reply + 1);
again = ((c - reply) == (maxlen - 1));
- if (again)
- reply = REALLOC(reply, maxlen *= 2);
-
+ REALLOC_REPLY(reply, again, maxlen);
}
*r = reply;
*len = (int)(c - reply + 1);
c += snprint_defaults(c, reply + maxlen - c);
again = ((c - reply) == maxlen);
if (again) {
- reply = REALLOC(reply, maxlen *= 2);
+ reply = REALLOC(reply, maxlen * 2);
+ if (!reply)
+ return 1;
+ memset(reply + maxlen, 0, maxlen);
+ maxlen *= 2;
continue;
}
c += snprint_blacklist(c, reply + maxlen - c);
again = ((c - reply) == maxlen);
if (again) {
- reply = REALLOC(reply, maxlen *= 2);
+ reply = REALLOC(reply, maxlen * 2);
+ if (!reply)
+ return 1;
+ memset(reply + maxlen, 0, maxlen);
+ maxlen *= 2;
continue;
}
c += snprint_blacklist_except(c, reply + maxlen - c);
again = ((c - reply) == maxlen);
if (again) {
- reply = REALLOC(reply, maxlen *= 2);
+ reply = REALLOC(reply, maxlen * 2);
+ if (!reply)
+ return 1;
+ memset(reply + maxlen, 0, maxlen);
+ maxlen *= 2;
continue;
}
c += snprint_hwtable(c, reply + maxlen - c, conf->hwtable);
again = ((c - reply) == maxlen);
if (again) {
- reply = REALLOC(reply, maxlen *= 2);
+ reply = REALLOC(reply, maxlen * 2);
+ if (!reply)
+ return 1;
+ memset(reply + maxlen, 0, maxlen);
+ maxlen *= 2;
continue;
}
c += snprint_mptable(c, reply + maxlen - c, conf->mptable);
again = ((c - reply) == maxlen);
- if (again)
- reply = REALLOC(reply, maxlen *= 2);
+ REALLOC_REPLY(reply, again, maxlen);
}
*r = reply;
*len = (int)(c - reply + 1);
again = ((c - reply) == (maxlen - 1));
- if (again)
- reply = REALLOC(reply, maxlen *= 2);
+ REALLOC_REPLY(reply, again, maxlen);
}
*r = reply;
*len = (int)(c - reply + 1);
unsigned int maxlen = INITIAL_REPLY_LEN;
int again = 1;
+ reply = MALLOC(maxlen);
+
while (again) {
- reply = MALLOC(maxlen);
if (!reply)
return 1;
c = reply;
c += snprint_blacklist_report(c, maxlen);
again = ((c - reply) == maxlen);
- if (again) {
- maxlen *= 2;
- FREE(reply);
- continue;
- }
+ REALLOC_REPLY(reply, again, maxlen);
}
*r = reply;
unsigned int maxlen = INITIAL_REPLY_LEN;
int again = 1;
+ reply = MALLOC(maxlen);
+
while (again) {
- reply = MALLOC(maxlen);
if (!reply)
return 1;
c = reply;
c += snprint_devices(c, maxlen, vecs);
again = ((c - reply) == maxlen);
- if (again) {
- maxlen *= 2;
- FREE(reply);
- continue;
- }
+ REALLOC_REPLY(reply, again, maxlen);
}
*r = reply;