patch-2.3.31 linux/drivers/pci/gen-devlist.c
Next file: linux/drivers/pci/names.c
Previous file: linux/drivers/pci/Makefile
Back to the patch index
Back to the overall index
- Lines: 122
- Date:
Tue Dec 7 15:37:17 1999
- Orig file:
v2.3.30/linux/drivers/pci/gen-devlist.c
- Orig date:
Tue Dec 7 09:32:44 1999
diff -u --recursive --new-file v2.3.30/linux/drivers/pci/gen-devlist.c linux/drivers/pci/gen-devlist.c
@@ -1,5 +1,5 @@
/*
- * Generate devlist.h from the PCI ID file.
+ * Generate devlist.h and classlist.h from the PCI ID file.
*
* (c) 1999 Martin Mares <mj@suse.cz>
*/
@@ -8,13 +8,13 @@
#include <string.h>
static void
-pq(char *c)
+pq(FILE *f, char *c)
{
while (*c) {
if (*c == '"')
- printf("\\\"");
+ fprintf(f, "\\\"");
else
- putchar(*c);
+ fputc(*c, f);
c++;
}
}
@@ -24,6 +24,15 @@
{
char line[1024], *c, vend[8];
int vendors = 0;
+ int mode = 0;
+ FILE *devf, *clsf;
+
+ devf = fopen("devlist.h", "w");
+ clsf = fopen("classlist.h", "w");
+ if (!devf || !clsf) {
+ fprintf(stderr, "Cannot create output file!\n");
+ return 1;
+ }
while (fgets(line, sizeof(line)-1, stdin)) {
if ((c = strchr(line, '\n')))
@@ -31,36 +40,65 @@
if (!line[0] || line[0] == '#')
continue;
if (line[1] == ' ') {
- vend[0] = 0;
- continue;
+ if (line[0] == 'C' && strlen(line) > 4 && line[4] == ' ') {
+ vend[0] = line[2];
+ vend[1] = line[3];
+ vend[2] = 0;
+ mode = 2;
+ } else goto err;
}
- if (line[0] == '\t') {
- if (vend[0] && strlen(line) > 5 && line[5] == ' ') {
- c = line + 5;
- while (*c == ' ')
- *c++ = 0;
- printf("\tDEVICE(%s,%s,\"", vend, line+1);
- pq(c);
- puts("\")");
+ else if (line[0] == '\t') {
+ if (line[1] == '\t')
+ continue;
+ switch (mode) {
+ case 1:
+ if (strlen(line) > 5 && line[5] == ' ') {
+ c = line + 5;
+ while (*c == ' ')
+ *c++ = 0;
+ fprintf(devf, "\tDEVICE(%s,%s,\"", vend, line+1);
+ pq(devf, c);
+ fputs("\")\n", devf);
+ } else goto err;
+ break;
+ case 2:
+ if (strlen(line) > 3 && line[3] == ' ') {
+ c = line + 3;
+ while (*c == ' ')
+ *c++ = 0;
+ fprintf(clsf, "CLASS(%s%s, \"%s\")\n", vend, line+1, c);
+ } else goto err;
+ break;
+ default:
+ goto err;
}
} else if (strlen(line) > 4 && line[4] == ' ') {
c = line + 4;
while (*c == ' ')
*c++ = 0;
if (vendors)
- puts("ENDVENDOR()\n");
+ fputs("ENDVENDOR()\n\n", devf);
vendors++;
strcpy(vend, line);
- printf("VENDOR(%s,\"", vend);
- pq(c);
- puts("\")");
+ fprintf(devf, "VENDOR(%s,\"", vend);
+ pq(devf, c);
+ fputs("\")\n", devf);
+ mode = 1;
+ } else {
+ err:
+ fprintf(stderr, "Syntax error in mode %d: %s\n", mode, line);
+ return 1;
}
}
- puts("ENDVENDOR()\n\
+ fputs("ENDVENDOR()\n\
\n\
#undef VENDOR\n\
#undef DEVICE\n\
-#undef ENDVENDOR");
+#undef ENDVENDOR\n", devf);
+ fputs("\n#undef CLASS", clsf);
+
+ fclose(devf);
+ fclose(clsf);
return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)