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>