Messages in this thread Patch in this message |  | | Subject | Re: SiS/Trident 4DWave sound driver oops | From | Robert Love <> | Date | 25 Oct 2001 23:28:02 -0400 |
| |
On Thu, 2001-10-25 at 23:13, David Weinehall wrote: > I think the way this is coded stinks anyway. the {0,} should be used > as a loop-terminator, not ARRAY_SIZE(blaha) - 1. Yes, using 0-termination > wastes space. But it's cleaner and in line with what most other code > does.
Agreed. Also, I didn't check if other ac97 code uses the {0,} as a terminator. Removing it may break that.
The patch below accomplishes this.
However, now that I am actually looking at the code <g>, I don't see why this would be a problem either way. Even though the loop reads the "terminal" entry, it just checks whether it equals the specified id. It is equal to 0 so I assume it never will...we aren't dereferencing it or anything.
diff -u linux-2.4.12-ac6/drivers/sound/ac97_codec.c linux/drivers/sound/ac97_codec.c --- linux-2.4.12-ac6/drivers/sound/ac97_codec.c Tue Oct 23 17:16:20 2001 +++ linux/drivers/sound/ac97_codec.c Thu Oct 25 23:21:02 2001 @@ -669,7 +669,7 @@ { u16 id1, id2; u16 audio, modem; - int i; + int i = 0; /* probing AC97 codec, AC97 2.0 says that bit 15 of register 0x00 (reset) should * be read zero. @@ -700,13 +700,14 @@ id1 = codec->codec_read(codec, AC97_VENDOR_ID1); id2 = codec->codec_read(codec, AC97_VENDOR_ID2); - for (i = 0; i < ARRAY_SIZE(ac97_codec_ids); i++) { + while(a97_codec_ids[i].id != 0) { if (ac97_codec_ids[i].id == ((id1 << 16) | id2)) { codec->type = ac97_codec_ids[i].id; codec->name = ac97_codec_ids[i].name; codec->codec_ops = ac97_codec_ids[i].ops; break; } + i++; } if (codec->name == NULL) codec->name = "Unknown";
Robert Love
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |