- add a few basic tests for pidof(8)
[oweals/busybox.git] / libbb / xgetlarg.c
index 598b0b3d6fb21d235dc8fc71eed7154d582ab19d..f24492beef15267675911ac3c76732f133598104 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * Copyright (C) 2003 Erik Andersen <andersee@debian.org>
+ * Copyright (C) 2003-2004 Erik Andersen <andersen@codepoet.org>
  */
 
 
@@ -9,20 +9,29 @@
 #include <getopt.h>
 #include <errno.h>
 #include <assert.h>
+#include <ctype.h>
 
 #include "busybox.h"
 
-extern long bb_xgetlarg(char *arg, int base, long lower, long upper)
+extern long bb_xgetlarg(const char *arg, int base, long lower, long upper)
 {
        long result;
        char *endptr;
        int errno_save = errno;
 
        assert(arg!=NULL);
+
+       /* Don't allow leading whitespace.
+        * Wrap isspace in () to make sure we call the 
+        * function rather than the macro. */
+       if ((isspace)(*arg)) {
+               bb_show_usage();
+       }
+
        errno = 0;
        result = strtol(arg, &endptr, base);
-       if (errno != 0 || *endptr!='\0' || result < lower || result > upper)
-               show_usage();
+       if (errno != 0 || *endptr!='\0' || endptr==arg || result < lower || result > upper)
+               bb_show_usage();
        errno = errno_save;
        return result;
 }