|
@@ -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 { \
|