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'
+131, -0
  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+
+77, -0
 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+
+52, -0
 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+
+25, -0
 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+
+39, -0
 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