]> mj.ucw.cz Git - pciutils.git/blobdiff - setpci.c
On newer Linux systems, use libkmod to look up kernel modules
[pciutils.git] / setpci.c
index 55212853a9a84709ed6e0d512998f145c03322f4..731c612504e15e9404942407112581e1139606fe 100644 (file)
--- a/setpci.c
+++ b/setpci.c
@@ -10,7 +10,6 @@
 #include <string.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include <unistd.h>
 #include <errno.h>
 
 #define PCIUTILS_SETPCI
@@ -482,11 +481,12 @@ static const struct reg_name *parse_reg_name(char *name)
 static int parse_x32(char *c, char **stopp, unsigned int *resp)
 {
   char *stop;
+  unsigned long int l;
 
   if (!*c)
     return -1;
   errno = 0;
-  unsigned long int l = strtoul(c, &stop, 16);
+  l = strtoul(c, &stop, 16);
   if (errno)
     return -1;
   if ((l & ~0U) != l)
@@ -499,7 +499,11 @@ static int parse_x32(char *c, char **stopp, unsigned int *resp)
       return 0;
     }
   else
-    return 1;
+    {
+      if (stopp)
+       *stopp = NULL;
+      return 1;
+    }
 }
 
 static void parse_register(struct op *op, char *base)
@@ -630,13 +634,13 @@ static void parse_op(char *c, struct pci_dev **selected_devices)
       e = strchr(value, ',');
       if (e)
        *e++ = 0;
-      if (parse_x32(value, &f, &ll) < 0 || *f && *f != ':')
+      if (parse_x32(value, &f, &ll) < 0 || f && *f != ':')
        parse_err("Invalid value \"%s\"", value);
       lim = max_values[op->width];
       if (ll > lim && ll < ~0UL - lim)
        parse_err("Value \"%s\" is out of range", value);
       op->values[j].value = ll;
-      if (*f == ':')
+      if (f && *f == ':')
        {
          if (parse_x32(f+1, NULL, &ll) <= 0)
            parse_err("Invalid mask \"%s\"", f+1);