Add checking of zmsg and zsocket arguments that take printf formats
Gcc has support for attributes that trap errors in format strings at
compile time. Not highly esthetic but it works.
diff --git a/include/zmsg.h b/include/zmsg.h
index bf866ff..d0d6fcd 100644
--- a/include/zmsg.h
+++ b/include/zmsg.h
@@ -27,6 +27,15 @@
#ifndef __ZMSG_H_INCLUDED__
#define __ZMSG_H_INCLUDED__
+// If using GCC this causes checking of syntax of format strings
+#ifndef GCC_PRINTFLIKE
+#ifdef __GNUC__
+#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+#else
+#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
+#endif
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -84,12 +93,14 @@ int
// Push string as new frame to front of message.
// Returns 0 on success, -1 on error.
int
- zmsg_pushstr (zmsg_t *self, const char *format, ...);
+ zmsg_pushstr (zmsg_t *self, const char *format, ...)
+ GCC_PRINTFLIKE(2,3);
// Push string as new frame to end of message.
// Returns 0 on success, -1 on error.
int
- zmsg_addstr (zmsg_t *self, const char *format, ...);
+ zmsg_addstr (zmsg_t *self, const char *format, ...)
+ GCC_PRINTFLIKE(2,3);
// Pop frame off front of message, return as fresh string
char *
diff --git a/include/zsocket.h b/include/zsocket.h
index 8e7b993..7737888 100644
--- a/include/zsocket.h
+++ b/include/zsocket.h
@@ -27,10 +27,20 @@
#ifndef __ZSOCKET_H_INCLUDED__
#define __ZSOCKET_H_INCLUDED__
+/* Macro for usage of GCC's printf compilation warnings */
+#ifndef GCC_PRINTFLIKE
+#ifdef __GNUC__
+#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+#else
+#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
+#endif
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
+
// @interface
// This port range is defined by IANA for dynamic or private ports
// We use this when choosing a port for dynamic binding.
@@ -54,12 +64,14 @@ void
// bind succeeded with the specified port number. Always returns the
// port number if successful.
int
- zsocket_bind (void *socket, const char *format, ...);
+ zsocket_bind (void *socket, const char *format, ...)
+ GCC_PRINTFLIKE(2,3);
// Connect a socket to a formatted endpoint
// Returns 0 if OK, -1 if the endpoint was invalid.
int
- zsocket_connect (void *socket, const char *format, ...);
+ zsocket_connect (void *socket, const char *format, ...)
+ GCC_PRINTFLIKE(2,3);
// Returns socket type as printable constant string
char *
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev