commit f0ccb95
hovercats
·
2026-07-08 18:54:43 +0000 UTC
parent e296e14
pciutils: import
11 files changed,
+399,
-0
+5,
-0
1@@ -470,3 +470,8 @@
2 path = pkg/exfatprogs/src
3 url = https://github.com/exfatprogs/exfatprogs.git
4 shallow = true
5+[submodule "pkg/pciutils/src"]
6+ path = pkg/pciutils/src
7+ url = https://git.kernel.org/pub/scm/utils/pciutils/pciutils.git
8+ ignore = all
9+ shallow = true
+1,
-0
1@@ -81,6 +81,7 @@ subgen 'openntpd'
2 subgen 'openssh'
3 subgen 'opus'
4 subgen 'pax'
5+subgen 'pciutils'
6 subgen 'pcre'
7 subgen 'pdpmake'
8 subgen 'pigz'
+9,
-0
1@@ -0,0 +1,9 @@
2+#define PCI_CONFIG_H
3+#define PCI_OS_LINUX
4+#define PCI_HAVE_PM_LINUX_SYSFS
5+#define PCI_HAVE_LINUX_BYTEORDER_H
6+#define PCI_PATH_SYS_BUS_PCI "/sys/bus/pci"
7+#define PCI_HAVE_64BIT_ADDRESS
8+#define PCI_IDS "pci.ids"
9+#define PCI_PATH_IDS_DIR "/share"
10+#define PCILIB_VERSION "3.14.0"
+58,
-0
1@@ -0,0 +1,58 @@
2+cflags{
3+ '-Wall', '-Wpedantic', '-Wno-parentheses',
4+ '-I $dir',
5+ '-isystem $builddir/pkg/linux-headers/include',
6+}
7+
8+pkg.deps = {
9+ 'pkg/linux-headers/headers',
10+}
11+
12+lib('libpci.a', [[
13+ lib/(
14+ init.c
15+ access.c
16+ generic.c
17+ dump.c
18+ names.c
19+ filter.c
20+ names-hash.c
21+ names-parse.c
22+ names-net.c
23+ names-cache.c
24+ names-hwdb.c
25+ params.c
26+ caps.c
27+ sysfs.c
28+ )
29+]])
30+
31+cc('common.c')
32+
33+exe('lspci', {
34+ 'lspci.c',
35+ 'ls-vpd.c',
36+ 'ls-caps.c',
37+ 'ls-caps-vendor.c',
38+ 'ls-ecaps.c',
39+ 'ls-kernel.c',
40+ 'ls-tree.c',
41+ 'ls-map.c',
42+ 'common.c.o',
43+ 'libpci.a',
44+})
45+file('bin/lspci', '755', '$outdir/lspci')
46+man({'lspci.man'}, '8')
47+
48+exe('setpci', {
49+ 'setpci.c',
50+ 'common.c.o',
51+ 'libpci.a',
52+})
53+file('bin/setpci', '755', '$outdir/setpci')
54+man({'setpci.man'}, '8')
55+
56+file('share/pci.ids', '644', '$srcdir/pci.ids')
57+man({'pci.ids.man'}, '5')
58+
59+fetch 'git'
1@@ -0,0 +1,131 @@
2+From 346f1dd1d0b3749a5e579f04f9ab07497ed4f92c Mon Sep 17 00:00:00 2001
3+From: Michael Forney <mforney@mforney.org>
4+Date: Sun, 16 Aug 2020 16:14:04 -0700
5+Subject: [PATCH] Avoid empty top-level declarations
6+
7+These are not allowed in ISO C.
8+---
9+ lib/access.c | 32 ++++++++++++++++----------------
10+ lib/filter.c | 46 +++++++++++++++++++++++-----------------------
11+ lib/init.c | 8 ++++----
12+ 3 files changed, 43 insertions(+), 43 deletions(-)
13+
14+diff --git a/lib/access.c b/lib/access.c
15+index baaabcb..be97943 100644
16+--- a/lib/access.c
17++++ b/lib/access.c
18+@@ -206,22 +206,22 @@ pci_fill_info_v313(struct pci_dev *d, int flags)
19+
20+ /* In version 3.1, pci_fill_info got new flags => versioned alias */
21+ /* In versions 3.2, 3.3, 3.4, 3.5, 3.8 and 3.12, the same has happened */
22+-STATIC_ALIAS(int pci_fill_info(struct pci_dev *d, int flags), pci_fill_info_v313(d, flags));
23+-DEFINE_ALIAS(int pci_fill_info_v30(struct pci_dev *d, int flags), pci_fill_info_v313);
24+-DEFINE_ALIAS(int pci_fill_info_v31(struct pci_dev *d, int flags), pci_fill_info_v313);
25+-DEFINE_ALIAS(int pci_fill_info_v32(struct pci_dev *d, int flags), pci_fill_info_v313);
26+-DEFINE_ALIAS(int pci_fill_info_v33(struct pci_dev *d, int flags), pci_fill_info_v313);
27+-DEFINE_ALIAS(int pci_fill_info_v34(struct pci_dev *d, int flags), pci_fill_info_v313);
28+-DEFINE_ALIAS(int pci_fill_info_v35(struct pci_dev *d, int flags), pci_fill_info_v313);
29+-DEFINE_ALIAS(int pci_fill_info_v38(struct pci_dev *d, int flags), pci_fill_info_v313);
30+-SYMBOL_VERSION(pci_fill_info_v30, pci_fill_info@LIBPCI_3.0);
31+-SYMBOL_VERSION(pci_fill_info_v31, pci_fill_info@LIBPCI_3.1);
32+-SYMBOL_VERSION(pci_fill_info_v32, pci_fill_info@LIBPCI_3.2);
33+-SYMBOL_VERSION(pci_fill_info_v33, pci_fill_info@LIBPCI_3.3);
34+-SYMBOL_VERSION(pci_fill_info_v34, pci_fill_info@LIBPCI_3.4);
35+-SYMBOL_VERSION(pci_fill_info_v35, pci_fill_info@LIBPCI_3.5);
36+-SYMBOL_VERSION(pci_fill_info_v38, pci_fill_info@LIBPCI_3.8);
37+-SYMBOL_VERSION(pci_fill_info_v313, pci_fill_info@@LIBPCI_3.13);
38++STATIC_ALIAS(int pci_fill_info(struct pci_dev *d, int flags), pci_fill_info_v313(d, flags))
39++DEFINE_ALIAS(int pci_fill_info_v30(struct pci_dev *d, int flags), pci_fill_info_v313)
40++DEFINE_ALIAS(int pci_fill_info_v31(struct pci_dev *d, int flags), pci_fill_info_v313)
41++DEFINE_ALIAS(int pci_fill_info_v32(struct pci_dev *d, int flags), pci_fill_info_v313)
42++DEFINE_ALIAS(int pci_fill_info_v33(struct pci_dev *d, int flags), pci_fill_info_v313)
43++DEFINE_ALIAS(int pci_fill_info_v34(struct pci_dev *d, int flags), pci_fill_info_v313)
44++DEFINE_ALIAS(int pci_fill_info_v35(struct pci_dev *d, int flags), pci_fill_info_v313)
45++DEFINE_ALIAS(int pci_fill_info_v38(struct pci_dev *d, int flags), pci_fill_info_v313)
46++SYMBOL_VERSION(pci_fill_info_v30, pci_fill_info@LIBPCI_3.0)
47++SYMBOL_VERSION(pci_fill_info_v31, pci_fill_info@LIBPCI_3.1)
48++SYMBOL_VERSION(pci_fill_info_v32, pci_fill_info@LIBPCI_3.2)
49++SYMBOL_VERSION(pci_fill_info_v33, pci_fill_info@LIBPCI_3.3)
50++SYMBOL_VERSION(pci_fill_info_v34, pci_fill_info@LIBPCI_3.4)
51++SYMBOL_VERSION(pci_fill_info_v35, pci_fill_info@LIBPCI_3.5)
52++SYMBOL_VERSION(pci_fill_info_v38, pci_fill_info@LIBPCI_3.8)
53++SYMBOL_VERSION(pci_fill_info_v313, pci_fill_info@@LIBPCI_3.13)
54+
55+ void
56+ pci_setup_cache(struct pci_dev *d, byte *cache, int len)
57+diff --git a/lib/filter.c b/lib/filter.c
58+index 4221f57..441eb51 100644
59+--- a/lib/filter.c
60++++ b/lib/filter.c
61+@@ -309,26 +309,26 @@ pci_filter_match_v30(struct pci_filter_v30 *f, struct pci_dev *d)
62+ // Version 3.3 is the same as version 3.8, only device_class_mask and prog_if were not implemented
63+ // (their positions in struct pci_filter were declared as RFU).
64+
65+-STATIC_ALIAS(void pci_filter_init(struct pci_access *a, struct pci_filter *f), pci_filter_init_v38(a, f));
66+-DEFINE_ALIAS(void pci_filter_init_v33(struct pci_access *a, struct pci_filter *f), pci_filter_init_v38);
67+-SYMBOL_VERSION(pci_filter_init_v30, pci_filter_init@LIBPCI_3.0);
68+-SYMBOL_VERSION(pci_filter_init_v33, pci_filter_init@LIBPCI_3.3);
69+-SYMBOL_VERSION(pci_filter_init_v38, pci_filter_init@@LIBPCI_3.8);
70+-
71+-STATIC_ALIAS(char *pci_filter_parse_slot(struct pci_filter *f, char *str), pci_filter_parse_slot_v38(f, str));
72+-DEFINE_ALIAS(char *pci_filter_parse_slot_v33(struct pci_filter *f, char *str), pci_filter_parse_slot_v38);
73+-SYMBOL_VERSION(pci_filter_parse_slot_v30, pci_filter_parse_slot@LIBPCI_3.0);
74+-SYMBOL_VERSION(pci_filter_parse_slot_v33, pci_filter_parse_slot@LIBPCI_3.3);
75+-SYMBOL_VERSION(pci_filter_parse_slot_v38, pci_filter_parse_slot@@LIBPCI_3.8);
76+-
77+-STATIC_ALIAS(char *pci_filter_parse_id(struct pci_filter *f, char *str), pci_filter_parse_id_v38(f, str));
78+-DEFINE_ALIAS(char *pci_filter_parse_id_v33(struct pci_filter *f, char *str), pci_filter_parse_id_v38);
79+-SYMBOL_VERSION(pci_filter_parse_id_v30, pci_filter_parse_id@LIBPCI_3.0);
80+-SYMBOL_VERSION(pci_filter_parse_id_v33, pci_filter_parse_id@LIBPCI_3.3);
81+-SYMBOL_VERSION(pci_filter_parse_id_v38, pci_filter_parse_id@@LIBPCI_3.8);
82+-
83+-STATIC_ALIAS(int pci_filter_match(struct pci_filter *f, struct pci_dev *d), pci_filter_match_v38(f, d));
84+-DEFINE_ALIAS(int pci_filter_match_v33(struct pci_filter *f, struct pci_dev *d), pci_filter_match_v38);
85+-SYMBOL_VERSION(pci_filter_match_v30, pci_filter_match@LIBPCI_3.0);
86+-SYMBOL_VERSION(pci_filter_match_v33, pci_filter_match@LIBPCI_3.3);
87+-SYMBOL_VERSION(pci_filter_match_v38, pci_filter_match@@LIBPCI_3.8);
88++STATIC_ALIAS(void pci_filter_init(struct pci_access *a, struct pci_filter *f), pci_filter_init_v38(a, f))
89++DEFINE_ALIAS(void pci_filter_init_v33(struct pci_access *a, struct pci_filter *f), pci_filter_init_v38)
90++SYMBOL_VERSION(pci_filter_init_v30, pci_filter_init@LIBPCI_3.0)
91++SYMBOL_VERSION(pci_filter_init_v33, pci_filter_init@LIBPCI_3.3)
92++SYMBOL_VERSION(pci_filter_init_v38, pci_filter_init@@LIBPCI_3.8)
93++
94++STATIC_ALIAS(char *pci_filter_parse_slot(struct pci_filter *f, char *str), pci_filter_parse_slot_v38(f, str))
95++DEFINE_ALIAS(char *pci_filter_parse_slot_v33(struct pci_filter *f, char *str), pci_filter_parse_slot_v38)
96++SYMBOL_VERSION(pci_filter_parse_slot_v30, pci_filter_parse_slot@LIBPCI_3.0)
97++SYMBOL_VERSION(pci_filter_parse_slot_v33, pci_filter_parse_slot@LIBPCI_3.3)
98++SYMBOL_VERSION(pci_filter_parse_slot_v38, pci_filter_parse_slot@@LIBPCI_3.8)
99++
100++STATIC_ALIAS(char *pci_filter_parse_id(struct pci_filter *f, char *str), pci_filter_parse_id_v38(f, str))
101++DEFINE_ALIAS(char *pci_filter_parse_id_v33(struct pci_filter *f, char *str), pci_filter_parse_id_v38)
102++SYMBOL_VERSION(pci_filter_parse_id_v30, pci_filter_parse_id@LIBPCI_3.0)
103++SYMBOL_VERSION(pci_filter_parse_id_v33, pci_filter_parse_id@LIBPCI_3.3)
104++SYMBOL_VERSION(pci_filter_parse_id_v38, pci_filter_parse_id@@LIBPCI_3.8)
105++
106++STATIC_ALIAS(int pci_filter_match(struct pci_filter *f, struct pci_dev *d), pci_filter_match_v38(f, d))
107++DEFINE_ALIAS(int pci_filter_match_v33(struct pci_filter *f, struct pci_dev *d), pci_filter_match_v38)
108++SYMBOL_VERSION(pci_filter_match_v30, pci_filter_match@LIBPCI_3.0)
109++SYMBOL_VERSION(pci_filter_match_v33, pci_filter_match@LIBPCI_3.3)
110++SYMBOL_VERSION(pci_filter_match_v38, pci_filter_match@@LIBPCI_3.8)
111+diff --git a/lib/init.c b/lib/init.c
112+index b0e5018..9867a47 100644
113+--- a/lib/init.c
114++++ b/lib/init.c
115+@@ -531,10 +531,10 @@ pci_init_v35(struct pci_access *a)
116+ a->error("Cannot find any working access method.");
117+ }
118+
119+-STATIC_ALIAS(void pci_init(struct pci_access *a), pci_init_v35(a));
120+-DEFINE_ALIAS(void pci_init_v30(struct pci_access *a), pci_init_v35);
121+-SYMBOL_VERSION(pci_init_v30, pci_init@LIBPCI_3.0);
122+-SYMBOL_VERSION(pci_init_v35, pci_init@@LIBPCI_3.5);
123++STATIC_ALIAS(void pci_init(struct pci_access *a), pci_init_v35(a))
124++DEFINE_ALIAS(void pci_init_v30(struct pci_access *a), pci_init_v35)
125++SYMBOL_VERSION(pci_init_v30, pci_init@LIBPCI_3.0)
126++SYMBOL_VERSION(pci_init_v35, pci_init@@LIBPCI_3.5)
127+
128+ struct pci_access *
129+ pci_clone_access(struct pci_access *a)
130+--
131+2.49.0
132+
1@@ -0,0 +1,77 @@
2+From 1419e1101d2420db610a98a83bd41f0535ed70cb Mon Sep 17 00:00:00 2001
3+From: Michael Forney <mforney@mforney.org>
4+Date: Sun, 16 Aug 2020 16:23:10 -0700
5+Subject: [PATCH] Fix pointer type of sscanf arguments
6+
7+---
8+ lib/dump.c | 10 +++++-----
9+ lib/sysfs.c | 4 ++--
10+ ls-kernel.c | 2 +-
11+ 3 files changed, 8 insertions(+), 8 deletions(-)
12+
13+diff --git a/lib/dump.c b/lib/dump.c
14+index 00ebc9e..59af0a1 100644
15+--- a/lib/dump.c
16++++ b/lib/dump.c
17+@@ -62,7 +62,7 @@ dump_init(struct pci_access *a)
18+ FILE *f;
19+ char buf[256];
20+ struct pci_dev *dev = NULL;
21+- int len, mn, bn, dn, fn, i, j;
22++ unsigned int len, mn, bn, dn, fn, i, j;
23+
24+ if (!name)
25+ a->error("dump: File name not given.");
26+@@ -81,10 +81,10 @@ dump_init(struct pci_access *a)
27+ *z-- = 0;
28+ len = z - buf + 1;
29+ mn = 0;
30+- if (dump_validate(buf, "##:##.# ") && sscanf(buf, "%x:%x.%d", &bn, &dn, &fn) == 3 ||
31+- dump_validate(buf, "####:##:##.# ") && sscanf(buf, "%x:%x:%x.%d", &mn, &bn, &dn, &fn) == 4 ||
32+- dump_validate(buf, "#####:##:##.# ") && sscanf(buf, "%x:%x:%x.%d", &mn, &bn, &dn, &fn) == 4 ||
33+- dump_validate(buf, "######:##:##.# ") && sscanf(buf, "%x:%x:%x.%d", &mn, &bn, &dn, &fn) == 4)
34++ if (dump_validate(buf, "##:##.# ") && sscanf(buf, "%x:%x.%u", &bn, &dn, &fn) == 3 ||
35++ dump_validate(buf, "####:##:##.# ") && sscanf(buf, "%x:%x:%x.%u", &mn, &bn, &dn, &fn) == 4 ||
36++ dump_validate(buf, "#####:##:##.# ") && sscanf(buf, "%x:%x:%x.%u", &mn, &bn, &dn, &fn) == 4 ||
37++ dump_validate(buf, "######:##:##.# ") && sscanf(buf, "%x:%x:%x.%u", &mn, &bn, &dn, &fn) == 4)
38+ {
39+ dev = pci_get_dev(a, mn, bn, dn, fn);
40+ dump_alloc_data(dev, 256);
41+diff --git a/lib/sysfs.c b/lib/sysfs.c
42+index 7dedc0b..4f5c003 100644
43+--- a/lib/sysfs.c
44++++ b/lib/sysfs.c
45+@@ -257,7 +257,7 @@ static void sysfs_scan(struct pci_access *a)
46+ continue;
47+
48+ d = pci_alloc_dev(a);
49+- if (sscanf(entry->d_name, "%x:%x:%x.%d", &dom, &bus, &dev, &func) < 4)
50++ if (sscanf(entry->d_name, "%x:%x:%x.%u", &dom, &bus, &dev, &func) < 4)
51+ a->error("sysfs_scan: Couldn't parse entry name %s", entry->d_name);
52+
53+ /* Ensure kernel provided domain that fits in a signed integer */
54+@@ -398,7 +398,7 @@ sysfs_fill_info(struct pci_dev *d, unsigned int flags)
55+ name = name ? name+1 : name;
56+ parent = NULL;
57+
58+- if (name && sscanf(name, "%x:%x:%x.%d", &domain, &bus, &dev, &func) == 4 && domain <= 0x7fffffff)
59++ if (name && sscanf(name, "%x:%x:%x.%u", &domain, &bus, &dev, &func) == 4 && domain <= 0x7fffffff)
60+ for (parent = d->access->devices; parent; parent = parent->next)
61+ if (parent->domain == (int)domain && parent->bus == bus && parent->dev == dev && parent->func == func)
62+ break;
63+diff --git a/ls-kernel.c b/ls-kernel.c
64+index c939c52..13b29f7 100644
65+--- a/ls-kernel.c
66++++ b/ls-kernel.c
67+@@ -157,7 +157,7 @@ show_kernel_init(void)
68+ *c++ = 0;
69+
70+ e = xmalloc(sizeof(*e) + strlen(line));
71+- if (sscanf(c, "%i%i%i%i%i%i",
72++ if (sscanf(c, "%u%u%u%u%u%u",
73+ &e->vendor, &e->device,
74+ &e->subvendor, &e->subdevice,
75+ &e->class, &e->class_mask) != 6)
76+--
77+2.49.0
78+
1@@ -0,0 +1,52 @@
2+From f900e34e7b01e68449972652f7d0eef47262053f Mon Sep 17 00:00:00 2001
3+From: Michael Forney <mforney@mforney.org>
4+Date: Sun, 16 Aug 2020 16:23:49 -0700
5+Subject: [PATCH] Avoid return of void expression
6+
7+---
8+ lib/filter.c | 2 +-
9+ lib/init.c | 2 +-
10+ lib/internal.h | 1 +
11+ 3 files changed, 3 insertions(+), 2 deletions(-)
12+
13+diff --git a/lib/filter.c b/lib/filter.c
14+index 441eb51..145861a 100644
15+--- a/lib/filter.c
16++++ b/lib/filter.c
17+@@ -309,7 +309,7 @@ pci_filter_match_v30(struct pci_filter_v30 *f, struct pci_dev *d)
18+ // Version 3.3 is the same as version 3.8, only device_class_mask and prog_if were not implemented
19+ // (their positions in struct pci_filter were declared as RFU).
20+
21+-STATIC_ALIAS(void pci_filter_init(struct pci_access *a, struct pci_filter *f), pci_filter_init_v38(a, f))
22++STATIC_ALIAS_VOID(void pci_filter_init(struct pci_access *a, struct pci_filter *f), pci_filter_init_v38(a, f))
23+ DEFINE_ALIAS(void pci_filter_init_v33(struct pci_access *a, struct pci_filter *f), pci_filter_init_v38)
24+ SYMBOL_VERSION(pci_filter_init_v30, pci_filter_init@LIBPCI_3.0)
25+ SYMBOL_VERSION(pci_filter_init_v33, pci_filter_init@LIBPCI_3.3)
26+diff --git a/lib/init.c b/lib/init.c
27+index 9867a47..232dba3 100644
28+--- a/lib/init.c
29++++ b/lib/init.c
30+@@ -531,7 +531,7 @@ pci_init_v35(struct pci_access *a)
31+ a->error("Cannot find any working access method.");
32+ }
33+
34+-STATIC_ALIAS(void pci_init(struct pci_access *a), pci_init_v35(a))
35++STATIC_ALIAS_VOID(void pci_init(struct pci_access *a), pci_init_v35(a))
36+ DEFINE_ALIAS(void pci_init_v30(struct pci_access *a), pci_init_v35)
37+ SYMBOL_VERSION(pci_init_v30, pci_init@LIBPCI_3.0)
38+ SYMBOL_VERSION(pci_init_v35, pci_init@@LIBPCI_3.5)
39+diff --git a/lib/internal.h b/lib/internal.h
40+index 43be8d1..8fe9ad8 100644
41+--- a/lib/internal.h
42++++ b/lib/internal.h
43+@@ -39,6 +39,7 @@
44+ #else
45+ #define VERSIONED_ABI
46+ #define STATIC_ALIAS(_decl, _for) _decl { return _for; }
47++#define STATIC_ALIAS_VOID(_decl, _for) _decl { _for; }
48+ #define DEFINE_ALIAS(_decl, _for)
49+ #define SYMBOL_VERSION(_int, _ext)
50+ #endif
51+--
52+2.49.0
53+
1@@ -0,0 +1,25 @@
2+From e46d12ba3ac9ed1f06b59d000684cfbe3ed61180 Mon Sep 17 00:00:00 2001
3+From: Michael Forney <mforney@mforney.org>
4+Date: Sun, 16 Aug 2020 17:15:34 -0700
5+Subject: [PATCH] Use flexible array member instead of zero-length array
6+
7+---
8+ setpci.c | 2 +-
9+ 1 file changed, 1 insertion(+), 1 deletion(-)
10+
11+diff --git a/setpci.c b/setpci.c
12+index 2a2c72a..3e98d49 100644
13+--- a/setpci.c
14++++ b/setpci.c
15+@@ -41,7 +41,7 @@ struct op {
16+ unsigned int width; /* Byte width of the access */
17+ unsigned int num_values; /* Number of values to write; 0=read */
18+ unsigned int number; /* The n-th capability of that id */
19+- struct value values[0];
20++ struct value values[];
21+ };
22+
23+ struct group {
24+--
25+2.49.0
26+
1@@ -0,0 +1,39 @@
2+From 9e6d578db0a4a55be5dbba40aba78e830181734d Mon Sep 17 00:00:00 2001
3+From: Michael Forney <mforney@mforney.org>
4+Date: Sun, 16 Aug 2020 17:16:31 -0700
5+Subject: [PATCH] Use strerror instead of GNU %m format specifier
6+
7+---
8+ ls-kernel.c | 5 +++--
9+ 1 file changed, 3 insertions(+), 2 deletions(-)
10+
11+diff --git a/ls-kernel.c b/ls-kernel.c
12+index 13b29f7..1f7933a 100644
13+--- a/ls-kernel.c
14++++ b/ls-kernel.c
15+@@ -8,6 +8,7 @@
16+ * SPDX-License-Identifier: GPL-2.0-or-later
17+ */
18+
19++#include <errno.h>
20+ #include <stdio.h>
21+ #include <string.h>
22+
23+@@ -125,12 +126,12 @@ show_kernel_init(void)
24+ {
25+ f = fopen(name, "r");
26+ if (!f)
27+- die("Cannot open pcimap file %s: %m", name);
28++ die("Cannot open pcimap file %s: %s", name, strerror(errno));
29+ }
30+ else
31+ {
32+ if (uname(&uts) < 0)
33+- die("uname() failed: %m");
34++ die("uname() failed: %s", strerror(errno));
35+ name = alloca(64 + strlen(uts.release));
36+ sprintf(name, "/lib/modules/%s/modules.pcimap", uts.release);
37+ f = fopen(name, "r");
38+--
39+2.49.0
40+
+1,
-0
1@@ -0,0 +1 @@
2+Subproject commit c6030ae1576b6bf1de9b41f53a9ed76137181d99
+1,
-0
1@@ -0,0 +1 @@
2+3.14.0 r0