Since "sizeof buffer" won't work with dynamically allocated buffers,
and we still sometimes need to know the size of the whole buffer, we
need a way to always obtain said size.

Signed-off-by: Alexander Shishkin <[email protected]>
---
 include/libbb.h |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/include/libbb.h b/include/libbb.h
index 85fcbb0..656e5c6 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -234,15 +234,22 @@ typedef unsigned long uoff_t;
 #define RESERVE_CONFIG_BUFFER(buffer,len)  char buffer[len]
 #define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char buffer[len]
 #define RELEASE_CONFIG_BUFFER(buffer)      ((void)0)
+#define CONFIG_BUFFER_SIZE(buffer)         (sizeof buffer)
 #else
 #if ENABLE_FEATURE_BUFFERS_GO_IN_BSS
 #define RESERVE_CONFIG_BUFFER(buffer,len)  static          char buffer[len]
 #define RESERVE_CONFIG_UBUFFER(buffer,len) static unsigned char buffer[len]
 #define RELEASE_CONFIG_BUFFER(buffer)      ((void)0)
+#define CONFIG_BUFFER_SIZE(buffer)         (sizeof buffer)
 #else
-#define RESERVE_CONFIG_BUFFER(buffer,len)  char *buffer = xmalloc(len)
-#define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char *buffer = xmalloc(len)
+#define RESERVE_CONFIG_BUFFER(buffer,len) \
+       char *buffer = xmalloc(len);      \
+       const size_t __ ## buffer ## _size = len;
+#define RESERVE_CONFIG_UBUFFER(buffer,len) \
+       unsigned char *buffer = xmalloc(len); \
+       const size_t __ ## buffer ## _size = len;
 #define RELEASE_CONFIG_BUFFER(buffer)      free(buffer)
+#define CONFIG_BUFFER_SIZE(buffer)         __ ## buffer ##_size
 #endif
 #endif
 
-- 
1.7.1

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to