summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
5f37eb1)
Provide new macros SBUF_DEFINE and SBUF which replace the open coded
rotating static buffers in ipaddr_getbuf (ipaddr_to_string and
subnet_to_string) and iaddr_to_string.
No functional change.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
-#define IPADDR_NBUFS_SHIFT 4
-#define IPADDR_NBUFS (1 << IPADDR_NBUFS_SHIFT)
#define IPADDR_BUFLEN 20
static char *ipaddr_getbuf(void)
{
#define IPADDR_BUFLEN 20
static char *ipaddr_getbuf(void)
{
- static int b;
- static char bufs[IPADDR_NBUFS][IPADDR_BUFLEN];
-
- b++;
- b &= IPADDR_NBUFS-1;
+ SBUF_DEFINE(16, IPADDR_BUFLEN);
#endif /* CONFIG_IPV6 */
}
#endif /* CONFIG_IPV6 */
}
-#define IADDR_NBUFS_SHIFT 3
-#define IADDR_NBUFS (1 << IADDR_NBUFS_SHIFT)
const char *iaddr_to_string(const union iaddr *ia)
{
const char *iaddr_to_string(const union iaddr *ia)
{
- static int b;
-
- b++;
- b &= IADDR_NBUFS-1;
-
- static char bufs[IADDR_NBUFS][100];
+ SBUF_DEFINE(IADDR_NBUFS, 100);
assert(ia->sa.sa_family == AF_INET);
assert(ia->sa.sa_family == AF_INET);
#else /* CONFIG_IPV6 => we have adns_addr2text */
#else /* CONFIG_IPV6 => we have adns_addr2text */
- static char bufs[IADDR_NBUFS][1+ADNS_ADDR2TEXT_BUFLEN+20];
+ SBUF_DEFINE(IADDR_NBUFS, 1+ADNS_ADDR2TEXT_BUFLEN+20);
-#define SBUF (bufs[b]) /* temporary macro */
+/*
+ * SBUF_DEFINE(int nbufs, size_t size);
+ * // Generates a number of definitions and statements organising
+ * // nbufs rotating char[size] buffers such that subsequent code
+ * // may refer to:
+ * char *const SBUF;
+ */
+#define SBUF_DEFINE(nbufs, size) \
+ static int static_bufs__bufnum; \
+ static char static_bufs__bufs[(nbufs)][(size)]; \
+ static_bufs__bufnum++; \
+ static_bufs__bufnum %= (nbufs); \
+ static_bufs__bufs[static_bufs__bufnum]
+#define SBUF (static_bufs__bufs[static_bufs__bufnum])
/*----- line-buffered asynch input -----*/
/*----- line-buffered asynch input -----*/