1 |
vapier 12/01/02 22:10:27 |
2 |
|
3 |
Added: udev-175-zlib.patch |
4 |
Log: |
5 |
Support reading of compressed pci/usb databases #360849 by Samuli Suominen. |
6 |
|
7 |
(Portage version: 2.2.0_alpha81/cvs/Linux x86_64) |
8 |
|
9 |
Revision Changes Path |
10 |
1.1 sys-fs/udev/files/udev-175-zlib.patch |
11 |
|
12 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-fs/udev/files/udev-175-zlib.patch?rev=1.1&view=markup |
13 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-fs/udev/files/udev-175-zlib.patch?rev=1.1&content-type=text/plain |
14 |
|
15 |
Index: udev-175-zlib.patch |
16 |
=================================================================== |
17 |
https://bugs.gentoo.org/360849 |
18 |
|
19 |
support opening the compressed pci/usb databases |
20 |
|
21 |
--- a/extras/usb-db/usb-db.c |
22 |
+++ b/extras/usb-db/usb-db.c |
23 |
@@ -90,19 +90,60 @@ |
24 |
#define HEXCHARS "0123456789abcdefABCDEF" |
25 |
#define WHITESPACE " \t\n\r" |
26 |
|
27 |
+#ifdef USE_ZLIB |
28 |
+ |
29 |
+#include <zlib.h> |
30 |
+ |
31 |
+static ssize_t gz_getline(char **lineptr, size_t *n, void *stream) |
32 |
+{ |
33 |
+ if (!*lineptr) |
34 |
+ *lineptr = malloc(*n = 4096); |
35 |
+ if (!*lineptr) |
36 |
+ return -1; |
37 |
+ if (gzgets(stream, *lineptr, *n - 1)) { |
38 |
+ (*lineptr)[*n - 1] = '\0'; |
39 |
+ /* should return strlen(*lineptr), but caller doesn't care */ |
40 |
+ return 0; |
41 |
+ } |
42 |
+ return -1; |
43 |
+} |
44 |
+static int gz_fclose(void *stream) |
45 |
+{ |
46 |
+ return gzclose(stream); |
47 |
+} |
48 |
+ |
49 |
+static ssize_t stdio_getline(char **lineptr, size_t *n, void *stream) |
50 |
+{ |
51 |
+ return getline(lineptr, n, stream); |
52 |
+} |
53 |
+static int stdio_fclose(void *stream) |
54 |
+{ |
55 |
+ return fclose(stream); |
56 |
+} |
57 |
+ |
58 |
+#endif |
59 |
+ |
60 |
static int lookup_vid_pid( |
61 |
uint16_t vid, |
62 |
uint16_t pid, |
63 |
char **vendor, |
64 |
char **product) { |
65 |
|
66 |
- FILE *f; |
67 |
+ void *f; |
68 |
int ret = -1; |
69 |
int found_vendor = 0; |
70 |
char *line = NULL; |
71 |
|
72 |
*vendor = *product = NULL; |
73 |
|
74 |
+#ifdef USE_ZLIB |
75 |
+ ssize_t (*getline)(char **lineptr, size_t *n, void *stream) = stdio_getline; |
76 |
+ int (*fclose)(void *stream) = stdio_fclose; |
77 |
+ if ((f = gzopen(DATABASE ".gz", "r"))) { |
78 |
+ getline = gz_getline; |
79 |
+ fclose = gz_fclose; |
80 |
+ } else |
81 |
+#endif |
82 |
if (!(f = fopen(DATABASE, "r"))) { |
83 |
fprintf(stderr, "Failed to open database file "DATABASE": %s\n", strerror(errno)); |
84 |
return -1; |
85 |
@@ -111,11 +152,6 @@ |
86 |
for (;;) { |
87 |
size_t n; |
88 |
|
89 |
- if (line) { |
90 |
- free(line); |
91 |
- line = NULL; |
92 |
- } |
93 |
- |
94 |
if (getline(&line, &n, f) < 0) |
95 |
break; |
96 |
|
97 |
--- a/Makefile.in |
98 |
+++ b/Makefile.in |
99 |
@@ -987,7 +987,7 @@ |
100 |
# ------------------------------------------------------------------------------ |
101 |
@ENABLE_HWDB_TRUE@extras_usb_db_usb_db_SOURCES = extras/usb-db/usb-db.c |
102 |
-@ENABLE_HWDB_TRUE@extras_usb_db_usb_db_CPPFLAGS = $(AM_CPPFLAGS) -DUSB_DATABASE=\"$(USB_DATABASE)\" -DBUILD_FOR_USB |
103 |
+@ENABLE_HWDB_TRUE@extras_usb_db_usb_db_CPPFLAGS = $(AM_CPPFLAGS) -DUSB_DATABASE=\"$(USB_DATABASE)\" -DBUILD_FOR_USB -DUSE_ZLIB |
104 |
-@ENABLE_HWDB_TRUE@extras_usb_db_usb_db_LDADD = libudev/libudev-private.la |
105 |
+@ENABLE_HWDB_TRUE@extras_usb_db_usb_db_LDADD = libudev/libudev-private.la -lz |
106 |
@ENABLE_HWDB_TRUE@extras_usb_db_pci_db_SOURCES = extras/usb-db/usb-db.c |
107 |
-@ENABLE_HWDB_TRUE@extras_usb_db_pci_db_CPPFLAGS = $(AM_CPPFLAGS) -DPCI_DATABASE=\"$(PCI_DATABASE)\" -DBUILD_FOR_PCI |
108 |
+@ENABLE_HWDB_TRUE@extras_usb_db_pci_db_CPPFLAGS = $(AM_CPPFLAGS) -DPCI_DATABASE=\"$(PCI_DATABASE)\" -DBUILD_FOR_PCI -DUSE_ZLIB |
109 |
-@ENABLE_HWDB_TRUE@extras_usb_db_pci_db_LDADD = libudev/libudev-private.la |
110 |
+@ENABLE_HWDB_TRUE@extras_usb_db_pci_db_LDADD = libudev/libudev-private.la -lz |