lib: fix some strtoul() use cases

...otherwise 4294967295 is not a valid value on 32bit systems
diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c
index 05bc304..abb85fd 100644
--- a/bgpd/bgp_routemap.c
+++ b/bgpd/bgp_routemap.c
@@ -525,8 +525,13 @@
   char *endptr = NULL;
   unsigned long tmpval;
 
+  /* Metric value shoud be integer. */
+  if (! all_digit (arg))
+    return NULL;
+
+  errno = 0;
   tmpval = strtoul (arg, &endptr, 10);
-  if (*endptr != '\0' || tmpval == ULONG_MAX || tmpval > UINT32_MAX)
+  if (*endptr != '\0' || errno || tmpval > UINT32_MAX)
     return NULL;
     
   med = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));
@@ -1002,8 +1007,9 @@
   if (! all_digit (arg))
     return NULL;
   
+  errno = 0;
   tmp = strtoul (arg, &endptr, 10);
-  if (*endptr != '\0' || tmp == ULONG_MAX || tmp > UINT32_MAX)
+  if (*endptr != '\0' || errno || tmp > UINT32_MAX)
     return NULL;
    
   local_pref = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t)); 
@@ -1070,9 +1076,9 @@
   if (! all_digit (arg))
     return NULL;
 
-
+  errno = 0;
   tmp = strtoul (arg, &endptr, 10);
-  if (*endptr != '\0' || tmp == ULONG_MAX || tmp > UINT32_MAX)
+  if (*endptr != '\0' || errno || tmp > UINT32_MAX)
     return NULL;
   
   weight = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));
@@ -1161,8 +1167,9 @@
   if (all_digit (arg))
     {
       /* set metric value check*/
+      errno = 0;
       larg = strtoul (arg, &endptr, 10);
-      if (*endptr != '\0' || larg == ULONG_MAX || larg > UINT32_MAX)
+      if (*endptr != '\0' || errno || larg > UINT32_MAX)
         return NULL;
       metric = larg;
     }
@@ -1174,8 +1181,9 @@
 	   || (! all_digit (arg+1)))
 	return NULL;
 
+      errno = 0;
       larg = strtoul (arg+1, &endptr, 10);
-      if (*endptr != '\0' || larg == ULONG_MAX || larg > UINT32_MAX)
+      if (*endptr != '\0' || errno || larg > UINT32_MAX)
 	return NULL;
       metric = larg;
     }