Convert NULL checks into KASSERT (and move them before the first

dereferencing) since a NULL value would be a bug here.

Note: Both affected functions look very similar. A refactoring may
be beneficial.

CID:		483, 485
Found with:	Coverity Prevent(tm)
Discussed with:	ariff
MFC after:	5 days
This commit is contained in:
netchild 2006-02-05 17:47:26 +00:00
parent 98ba0aaf4b
commit 363262abcc
2 changed files with 31 additions and 28 deletions

View File

@ -862,6 +862,10 @@ sndstat_prepare_pcm(struct sbuf *s, device_t dev, int verbose)
SLIST_FOREACH(sce, &d->channels, link) { SLIST_FOREACH(sce, &d->channels, link) {
c = sce->channel; c = sce->channel;
KASSERT(c->bufhard != NULL && c->bufsoft != NULL,
("hosed pcm channel setup"));
sbuf_printf(s, "\n\t"); sbuf_printf(s, "\n\t");
/* it would be better to indent child channels */ /* it would be better to indent child channels */
@ -877,24 +881,22 @@ sndstat_prepare_pcm(struct sbuf *s, device_t dev, int verbose)
sbuf_printf(s, ", pid %d", c->pid); sbuf_printf(s, ", pid %d", c->pid);
sbuf_printf(s, "\n\t"); sbuf_printf(s, "\n\t");
if (c->bufhard != NULL && c->bufsoft != NULL) { sbuf_printf(s, "interrupts %d, ", c->interrupts);
sbuf_printf(s, "interrupts %d, ", c->interrupts); if (c->direction == PCMDIR_REC)
if (c->direction == PCMDIR_REC) sbuf_printf(s, "overruns %d, hfree %d, sfree %d [b:%d/%d/%d|bs:%d/%d/%d]",
sbuf_printf(s, "overruns %d, hfree %d, sfree %d [b:%d/%d/%d|bs:%d/%d/%d]", c->xruns, sndbuf_getfree(c->bufhard), sndbuf_getfree(c->bufsoft),
c->xruns, sndbuf_getfree(c->bufhard), sndbuf_getfree(c->bufsoft), sndbuf_getsize(c->bufhard), sndbuf_getblksz(c->bufhard),
sndbuf_getsize(c->bufhard), sndbuf_getblksz(c->bufhard), sndbuf_getblkcnt(c->bufhard),
sndbuf_getblkcnt(c->bufhard), sndbuf_getsize(c->bufsoft), sndbuf_getblksz(c->bufsoft),
sndbuf_getsize(c->bufsoft), sndbuf_getblksz(c->bufsoft), sndbuf_getblkcnt(c->bufsoft));
sndbuf_getblkcnt(c->bufsoft)); else
else sbuf_printf(s, "underruns %d, ready %d [b:%d/%d/%d|bs:%d/%d/%d]",
sbuf_printf(s, "underruns %d, ready %d [b:%d/%d/%d|bs:%d/%d/%d]", c->xruns, sndbuf_getready(c->bufsoft),
c->xruns, sndbuf_getready(c->bufsoft), sndbuf_getsize(c->bufhard), sndbuf_getblksz(c->bufhard),
sndbuf_getsize(c->bufhard), sndbuf_getblksz(c->bufhard), sndbuf_getblkcnt(c->bufhard),
sndbuf_getblkcnt(c->bufhard), sndbuf_getsize(c->bufsoft), sndbuf_getblksz(c->bufsoft),
sndbuf_getsize(c->bufsoft), sndbuf_getblksz(c->bufsoft), sndbuf_getblkcnt(c->bufsoft));
sndbuf_getblkcnt(c->bufsoft)); sbuf_printf(s, "\n\t");
sbuf_printf(s, "\n\t");
}
sbuf_printf(s, "{%s}", (c->direction == PCMDIR_REC)? "hardware" : "userland"); sbuf_printf(s, "{%s}", (c->direction == PCMDIR_REC)? "hardware" : "userland");
sbuf_printf(s, " -> "); sbuf_printf(s, " -> ");

View File

@ -4465,6 +4465,9 @@ uaudio_sndstat_prepare_pcm(struct sbuf *s, device_t dev, int verbose)
c = sce->channel; c = sce->channel;
sbuf_printf(s, "\n\t"); sbuf_printf(s, "\n\t");
KASSERT(c->bufhard != NULL && c->bufsoft != NULL,
("hosed pcm channel setup"));
/* it would be better to indent child channels */ /* it would be better to indent child channels */
sbuf_printf(s, "%s[%s]: ", c->parentchannel? c->parentchannel->name : "", c->name); sbuf_printf(s, "%s[%s]: ", c->parentchannel? c->parentchannel->name : "", c->name);
sbuf_printf(s, "spd %d", c->speed); sbuf_printf(s, "spd %d", c->speed);
@ -4478,16 +4481,14 @@ uaudio_sndstat_prepare_pcm(struct sbuf *s, device_t dev, int verbose)
sbuf_printf(s, ", pid %d", c->pid); sbuf_printf(s, ", pid %d", c->pid);
sbuf_printf(s, "\n\t"); sbuf_printf(s, "\n\t");
if (c->bufhard != NULL && c->bufsoft != NULL) { sbuf_printf(s, "interrupts %d, ", c->interrupts);
sbuf_printf(s, "interrupts %d, ", c->interrupts); if (c->direction == PCMDIR_REC)
if (c->direction == PCMDIR_REC) sbuf_printf(s, "overruns %d, hfree %d, sfree %d",
sbuf_printf(s, "overruns %d, hfree %d, sfree %d", c->xruns, sndbuf_getfree(c->bufhard), sndbuf_getfree(c->bufsoft));
c->xruns, sndbuf_getfree(c->bufhard), sndbuf_getfree(c->bufsoft)); else
else sbuf_printf(s, "underruns %d, ready %d",
sbuf_printf(s, "underruns %d, ready %d", c->xruns, sndbuf_getready(c->bufsoft));
c->xruns, sndbuf_getready(c->bufsoft)); sbuf_printf(s, "\n\t");
sbuf_printf(s, "\n\t");
}
sbuf_printf(s, "{%s}", (c->direction == PCMDIR_REC)? "hardware" : "userland"); sbuf_printf(s, "{%s}", (c->direction == PCMDIR_REC)? "hardware" : "userland");
sbuf_printf(s, " -> "); sbuf_printf(s, " -> ");