bin/74360: [patch] ndiscvt(8) generate a driver which doesn't match any hardware

Andrew Belashov bel at orel.ru
Mon Mar 28 01:20:06 PST 2005


The following reply was made to PR bin/74360; it has been noted by GNATS.

From: Andrew Belashov <bel at orel.ru>
To: freebsd-gnats-submit at FreeBSD.org
Cc:  
Subject: Re: bin/74360: [patch] ndiscvt(8) generate a driver which doesn't
 match any hardware
Date: Mon, 28 Mar 2005 13:18:42 +0400

 Sorry, ndiscvt does not processing some .INF files with my first version of the patch.
 Corrected version of patch.
 
 --- ndiscvt.patch begins here ---
 --- usr.sbin/ndiscvt/inf.c.orig	Sun Mar  7 05:49:06 2004
 +++ usr.sbin/ndiscvt/inf.c	Mon Mar  7 20:16:11 2005
 @@ -233,7 +233,8 @@ dump_pci_id(const char *s)
   static void
   dump_deviceids_pci()
   {
 -	struct assign *manf, *dev;
 +	struct assign *manf, *dev, *devid;
 +	const char *p;
   	struct section *sec;
   	struct assign *assign;
   	char xpsec[256];
 @@ -258,8 +259,9 @@ dump_deviceids_pci()
 
   	TAILQ_FOREACH(assign, &ah, link) {
   		if (assign->section == sec) {
 -			dev = find_assign("strings", assign->key);
 -			if (strcasestr(assign->vals[1], "PCI") != NULL) {
 +			devid = find_assign("strings", assign->vals[1]);
 +			p = (devid == NULL) ? assign->vals[1] : devid->vals[0];
 +			if (strcasestr(p, "PCI") != NULL) {
   				found++;
   				break;
   			}
 @@ -285,9 +287,11 @@ retry:
   	TAILQ_FOREACH(assign, &ah, link) {
   		if (assign->section == sec) {
   			dev = find_assign("strings", assign->key);
 +			devid = find_assign("strings", assign->vals[1]);
 +			p = (devid == NULL) ? assign->vals[1] : devid->vals[0];
   			/* Emit device IDs. */
 -			if (strcasestr(assign->vals[1], "PCI") != NULL)
 -				dump_pci_id(assign->vals[1]);
 +			if (strcasestr(p, "PCI") != NULL)
 +				dump_pci_id(p);
   			else
   				continue;
   			/* Emit device description */
 @@ -312,7 +316,8 @@ retry:
   static void
   dump_deviceids_pcmcia()
   {
 -	struct assign *manf, *dev;
 +	struct assign *manf, *dev, *devid;
 +	const char *p;
   	struct section *sec;
   	struct assign *assign;
   	char xpsec[256];
 @@ -337,8 +342,9 @@ dump_deviceids_pcmcia()
 
   	TAILQ_FOREACH(assign, &ah, link) {
   		if (assign->section == sec) {
 -			dev = find_assign("strings", assign->key);
 -			if (strcasestr(assign->vals[1], "PCMCIA") != NULL) {
 +			devid = find_assign("strings", assign->vals[1]);
 +			p = (devid == NULL) ? assign->vals[1] : devid->vals[0];
 +			if (strcasestr(p, "PCMCIA") != NULL) {
   				found++;
   				break;
   			}
 @@ -364,9 +370,11 @@ retry:
   	TAILQ_FOREACH(assign, &ah, link) {
   		if (assign->section == sec) {
   			dev = find_assign("strings", assign->key);
 +			devid = find_assign("strings", assign->vals[1]);
 +			p = (devid == NULL) ? assign->vals[1] : devid->vals[0];
   			/* Emit device IDs. */
 -			if (strcasestr(assign->vals[1], "PCMCIA") != NULL)
 -				dump_pcmcia_id(assign->vals[1]);
 +			if (strcasestr(p, "PCMCIA") != NULL)
 +				dump_pcmcia_id(p);
   			else
   				continue;
   			/* Emit device description */
 --- ndiscvt.patch ends here ---


More information about the freebsd-bugs mailing list