X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=common.c;h=8ea52fa6d7b5398d2ff4a1c90cd9faa10ca410a7;hb=refs%2Ftags%2Fv3.1.7;hp=ed439b4d54868c282a9a110789b199f1c91cbea7;hpb=cb6ee324dd157dc5dec68eab488e7c829e92e2a2;p=pciutils.git diff --git a/common.c b/common.c index ed439b4..8ea52fa 100644 --- a/common.c +++ b/common.c @@ -44,6 +44,38 @@ xrealloc(void *ptr, unsigned int howmuch) return p; } +char * +xstrdup(char *str) +{ + int len = strlen(str) + 1; + char *copy = xmalloc(len); + memcpy(copy, str, len); + return copy; +} + +static void +set_pci_method(struct pci_access *pacc, char *arg) +{ + char *name; + int i; + + if (!strcmp(arg, "help")) + { + printf("Known PCI access methods:\n\n"); + for (i=0; name = pci_get_method_name(i); i++) + if (name[0]) + printf("%s\n", name); + exit(0); + } + else + { + i = pci_lookup_method(arg); + if (i < 0) + die("No such PCI access method: %s (see `-A help' for a list)", arg); + pacc->method = i; + } +} + static void set_pci_option(struct pci_access *pacc, char *arg) { @@ -62,7 +94,7 @@ set_pci_option(struct pci_access *pacc, char *arg) die("Invalid PCI access parameter syntax: %s", arg); *sep++ = 0; if (pci_set_param(pacc, arg, sep) < 0) - die("Unrecognized PCI access parameter: %s", arg); + die("Unrecognized PCI access parameter: %s (see `-O help' for a list)", arg); } } @@ -71,12 +103,6 @@ parse_generic_option(int i, struct pci_access *pacc, char *optarg) { switch (i) { -#ifdef PCI_HAVE_PM_LINUX_PROC - case 'P': - pci_set_param(pacc, "proc.path", optarg); - pacc->method = PCI_ACCESS_PROC_BUS_PCI; - break; -#endif #ifdef PCI_HAVE_PM_INTEL_CONF case 'H': if (!strcmp(optarg, "1")) @@ -93,6 +119,9 @@ parse_generic_option(int i, struct pci_access *pacc, char *optarg) pacc->method = PCI_ACCESS_DUMP; break; #endif + case 'A': + set_pci_method(pacc, optarg); + break; case 'G': pacc->debugging++; break;