Annotation of embedaddon/pciutils/common.c, revision 1.1.1.1
1.1 misho 1: /*
2: * The PCI Utilities -- Common Functions
3: *
4: * Copyright (c) 1997--2008 Martin Mares <mj@ucw.cz>
5: *
6: * Can be freely distributed and used under the terms of the GNU GPL.
7: */
8:
9: #include <stdio.h>
10: #include <string.h>
11: #include <stdlib.h>
12: #include <stdarg.h>
13: #include <unistd.h>
14:
15: #include "pciutils.h"
16:
17: void NONRET
18: die(char *msg, ...)
19: {
20: va_list args;
21:
22: va_start(args, msg);
23: fprintf(stderr, "%s: ", program_name);
24: vfprintf(stderr, msg, args);
25: fputc('\n', stderr);
26: exit(1);
27: }
28:
29: void *
30: xmalloc(unsigned int howmuch)
31: {
32: void *p = malloc(howmuch);
33: if (!p)
34: die("Unable to allocate %d bytes of memory", howmuch);
35: return p;
36: }
37:
38: void *
39: xrealloc(void *ptr, unsigned int howmuch)
40: {
41: void *p = realloc(ptr, howmuch);
42: if (!p)
43: die("Unable to allocate %d bytes of memory", howmuch);
44: return p;
45: }
46:
47: char *
48: xstrdup(char *str)
49: {
50: int len = strlen(str) + 1;
51: char *copy = xmalloc(len);
52: memcpy(copy, str, len);
53: return copy;
54: }
55:
56: static void
57: set_pci_method(struct pci_access *pacc, char *arg)
58: {
59: char *name;
60: int i;
61:
62: if (!strcmp(arg, "help"))
63: {
64: printf("Known PCI access methods:\n\n");
65: for (i=0; name = pci_get_method_name(i); i++)
66: if (name[0])
67: printf("%s\n", name);
68: exit(0);
69: }
70: else
71: {
72: i = pci_lookup_method(arg);
73: if (i < 0)
74: die("No such PCI access method: %s (see `-A help' for a list)", arg);
75: pacc->method = i;
76: }
77: }
78:
79: static void
80: set_pci_option(struct pci_access *pacc, char *arg)
81: {
82: if (!strcmp(arg, "help"))
83: {
84: struct pci_param *p;
85: printf("Known PCI access parameters:\n\n");
86: for (p=NULL; p=pci_walk_params(pacc, p);)
87: printf("%-20s %s (%s)\n", p->param, p->help, p->value);
88: exit(0);
89: }
90: else
91: {
92: char *sep = strchr(arg, '=');
93: if (!sep)
94: die("Invalid PCI access parameter syntax: %s", arg);
95: *sep++ = 0;
96: if (pci_set_param(pacc, arg, sep) < 0)
97: die("Unrecognized PCI access parameter: %s (see `-O help' for a list)", arg);
98: }
99: }
100:
101: int
102: parse_generic_option(int i, struct pci_access *pacc, char *optarg)
103: {
104: switch (i)
105: {
106: #ifdef PCI_HAVE_PM_INTEL_CONF
107: case 'H':
108: if (!strcmp(optarg, "1"))
109: pacc->method = PCI_ACCESS_I386_TYPE1;
110: else if (!strcmp(optarg, "2"))
111: pacc->method = PCI_ACCESS_I386_TYPE2;
112: else
113: die("Unknown hardware configuration type %s", optarg);
114: break;
115: #endif
116: #ifdef PCI_HAVE_PM_DUMP
117: case 'F':
118: pci_set_param(pacc, "dump.name", optarg);
119: pacc->method = PCI_ACCESS_DUMP;
120: break;
121: #endif
122: case 'A':
123: set_pci_method(pacc, optarg);
124: break;
125: case 'G':
126: pacc->debugging++;
127: break;
128: case 'O':
129: set_pci_option(pacc, optarg);
130: break;
131: default:
132: return 0;
133: }
134: return 1;
135: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>