]> git.ipfire.org Git - thirdparty/pciutils.git/blame - lib/params.c
Released as 3.5.2
[thirdparty/pciutils.git] / lib / params.c
CommitLineData
d6dcc545
MM
1/*
2 * The PCI Library -- Parameters
3 *
4 * Copyright (c) 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 <stdlib.h>
11#include <string.h>
12
13#include "internal.h"
14
15char *
16pci_get_param(struct pci_access *acc, char *param)
17{
18 struct pci_param *p;
19
20 for (p=acc->params; p; p=p->next)
21 if (!strcmp(p->param, param))
22 return p->value;
23 return NULL;
24}
25
26void
27pci_define_param(struct pci_access *acc, char *param, char *value, char *help)
28{
29 struct pci_param *p = pci_malloc(acc, sizeof(*p));
30
31 p->next = acc->params;
32 acc->params = p;
33 p->param = param;
34 p->value = value;
35 p->value_malloced = 0;
36 p->help = help;
37}
38
39int
40pci_set_param_internal(struct pci_access *acc, char *param, char *value, int copy)
41{
42 struct pci_param *p;
43
44 for (p=acc->params; p; p=p->next)
45 if (!strcmp(p->param, param))
46 {
47 if (p->value_malloced)
48 pci_mfree(p->value);
49 p->value_malloced = copy;
50 if (copy)
51 p->value = pci_strdup(acc, value);
52 else
53 p->value = value;
54 return 0;
55 }
56 return -1;
57}
58
59int
60pci_set_param(struct pci_access *acc, char *param, char *value)
61{
62 return pci_set_param_internal(acc, param, value, 1);
63}
64
65void
66pci_free_params(struct pci_access *acc)
67{
68 struct pci_param *p;
69
70 while (p = acc->params)
71 {
72 acc->params = p->next;
73 if (p->value_malloced)
74 pci_mfree(p->value);
75 pci_mfree(p);
76 }
77}
78
79struct pci_param *
80pci_walk_params(struct pci_access *acc, struct pci_param *prev)
81{
82 /* So far, the params form a simple linked list, but this can change in the future */
83 if (!prev)
84 return acc->params;
85 else
86 return prev->next;
87}