sizeof(saddr), \
buf, len, NULL, 0, \
flags | NI_NUMERICHOST); \
- return (err != 0 ? -1 : (int)strlen(buf)); \
+ D("getnameinfo err: %i, errno %i", err, errno); \
+ return (err == 0 ? (int)strlen(buf) : \
+ (err == EAI_OVERFLOW || err == EAI_SYSTEM) ? (int)len : -1);\
}
#define SNPRINTF_IP(mask, f) \
size = snprintf_ipv6(buf, len, flags, ip, cidr);
else
return -1;
+ D("size %i, len %u", size, len);
SNPRINTF_FAILURE(size, len, offset);
D("len: %u, offset %u", len, offset);
int len, ret, loop = 0;
retry:
- len = IPSET_OUTBUFLEN - strlen(session->outbuf);
+ len = strlen(session->outbuf);
+ D("len: %u, retry %u", len, loop);
va_start(args, fmt);
- ret = vsnprintf(session->outbuf + IPSET_OUTBUFLEN - len, len,
+ ret = vsnprintf(session->outbuf + len, IPSET_OUTBUFLEN - len,
fmt, args);
va_end(args);
return ipset_err(session,
"Internal error at printing to output buffer");
- if (ret >= len) {
+ if (ret >= IPSET_OUTBUFLEN - len) {
/* Buffer was too small, push it out and retry */
+ D("print buffer and try again: %u", len);
if (loop++)
return ipset_err(session,
"Internal error at printing, loop detected!");
- session->outbuf[IPSET_OUTBUFLEN - len] = '\0';
+ session->outbuf[len] = '\0';
if (!call_outfn(session))
goto retry;
}
int len, ret, loop = 0;
retry:
- len = IPSET_OUTBUFLEN - strlen(session->outbuf);
- ret = fn(session->outbuf + IPSET_OUTBUFLEN - len, len,
+ len = strlen(session->outbuf);
+ D("len: %u, retry %u", len, loop);
+ ret = fn(session->outbuf + len, IPSET_OUTBUFLEN - len,
session->data, opt, session->envopts);
if (ret < 0)
return ipset_err(session,
"Internal error at printing to output buffer");
- if (ret >= len) {
+ if (ret >= IPSET_OUTBUFLEN - len) {
/* Buffer was too small, push it out and retry */
+ D("print buffer and try again: %u", len);
if (loop++)
return ipset_err(session,
"Internal error at printing, loop detected!");
- session->outbuf[IPSET_OUTBUFLEN - len] = '\0';
+ session->outbuf[len] = '\0';
if (!call_outfn(session))
goto retry;
}