summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2013-01-11 21:46:18 +0100
committerDavid Lamparter <equinox@opensourcerouting.org>2013-01-11 21:46:22 +0100
commitb2e5bdbe10c4145f508fcf1486ffe29d5ce516f7 (patch)
treefae70e8c1580d99fee0c2a59d6bef831c4c9465c /lib
parenta16dcf7c11d80775b07a0fa6f3ac5527190fb486 (diff)
parente0630cb4d61557f956318a088f68f1fc4d261ef3 (diff)
Merge remote-tracking branch 'savannah/sf/ospfd'
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/vty.h46
1 files changed, 32 insertions, 14 deletions
diff --git a/lib/vty.h b/lib/vty.h
index e5158687..1798585e 100644
--- a/lib/vty.h
+++ b/lib/vty.h
@@ -149,8 +149,8 @@ struct vty
#define PRINTF_ATTRIBUTE(a,b)
#endif /* __GNUC__ */
-/* Utility macros to convert VTY argument to unsigned long or integer. */
-#define VTY_GET_LONG(NAME,V,STR) \
+/* Utility macros to convert VTY argument to unsigned long */
+#define VTY_GET_ULONG(NAME,V,STR) \
do { \
char *endptr = NULL; \
errno = 0; \
@@ -162,20 +162,38 @@ do { \
} \
} while (0)
-#define VTY_GET_INTEGER_RANGE(NAME,V,STR,MIN,MAX) \
-do { \
- unsigned long tmpl; \
- VTY_GET_LONG(NAME, tmpl, STR); \
- if ( (tmpl < (MIN)) || (tmpl > (MAX))) \
- { \
- vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
- return CMD_WARNING; \
- } \
- (V) = tmpl; \
+/*
+ * The logic below ((TMPL) <= ((MIN) && (TMPL) != (MIN)) is
+ * done to circumvent the compiler complaining about
+ * comparing unsigned numbers against zero, if MIN is zero.
+ * NB: The compiler isn't smart enough to supress the warning
+ * if you write (MIN) != 0 && tmpl < (MIN).
+ */
+#define VTY_GET_INTEGER_RANGE_HEART(NAME,TMPL,STR,MIN,MAX) \
+do { \
+ VTY_GET_ULONG(NAME, (TMPL), STR); \
+ if ( ((TMPL) <= (MIN) && (TMPL) != (MIN)) || (TMPL) > (MAX) ) \
+ { \
+ vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE);\
+ return CMD_WARNING; \
+ } \
+} while (0)
+
+#define VTY_GET_INTEGER_RANGE(NAME,V,STR,MIN,MAX) \
+do { \
+ unsigned long tmpl; \
+ VTY_GET_INTEGER_RANGE_HEART(NAME,tmpl,STR,MIN,MAX); \
+ (V) = tmpl; \
+} while (0)
+
+#define VTY_CHECK_INTEGER_RANGE(NAME,STR,MIN,MAX) \
+do { \
+ unsigned long tmpl; \
+ VTY_GET_INTEGER_RANGE_HEART(NAME,tmpl,STR,MIN,MAX); \
} while (0)
-#define VTY_GET_INTEGER(NAME,V,STR) \
- VTY_GET_INTEGER_RANGE(NAME,V,STR,0U,UINT32_MAX)
+#define VTY_GET_INTEGER(NAME,V,STR) \
+ VTY_GET_INTEGER_RANGE(NAME,V,STR,0U,UINT32_MAX)
#define VTY_GET_IPV4_ADDRESS(NAME,V,STR) \
do { \