Coverty CID 1317: Avoid negative index.

This commit is contained in:
christos 2006-04-14 20:31:28 +00:00
parent bdbf984fe7
commit 838d9e686d
1 changed files with 20 additions and 17 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: athrate-sample.c,v 1.9 2006/04/02 05:52:50 gdamore Exp $ */
/* $NetBSD: athrate-sample.c,v 1.10 2006/04/14 20:31:28 christos Exp $ */
/*-
* Copyright (c) 2005 John Bicket
@ -41,7 +41,7 @@
__FBSDID("$FreeBSD: src/sys/dev/ath/ath_rate/sample/sample.c,v 1.9 2005/07/22 16:50:17 sam Exp $");
#endif
#ifdef __NetBSD__
__KERNEL_RCSID(0, "$NetBSD: athrate-sample.c,v 1.9 2006/04/02 05:52:50 gdamore Exp $");
__KERNEL_RCSID(0, "$NetBSD: athrate-sample.c,v 1.10 2006/04/14 20:31:28 christos Exp $");
#endif
@ -403,38 +403,41 @@ update_stats(struct ath_softc *sc, struct ath_node *an,
struct sample_softc *ssc = ATH_SOFTC_SAMPLE(sc);
int tt = 0;
int tries_so_far = 0;
int size_bin = 0;
int size = 0;
int rate = 0;
int size_bin;
int size;
int rate;
if (ndx0 == -1)
return;
size_bin = size_to_bin(frame_size);
size = bin_to_size(size_bin);
rate = sn->rates[ndx0].rate;
tt += calc_usecs_unicast_packet(sc, size, sn->rates[ndx0].rix,
short_tries-1,
MIN(tries0, tries) - 1);
tt += calc_usecs_unicast_packet(sc, size, sn->rates[ndx0].rix,
short_tries - 1, MIN(tries0, tries) - 1);
tries_so_far += tries0;
if (tries1 && tries0 < tries) {
tt += calc_usecs_unicast_packet(sc, size, sn->rates[ndx1].rix,
short_tries-1,
MIN(tries1 + tries_so_far, tries) - tries_so_far - 1);
tt += calc_usecs_unicast_packet(sc, size,
ndx1 == -1 ? 0 : sn->rates[ndx1].rix, short_tries - 1,
MIN(tries1 + tries_so_far, tries) - tries_so_far - 1);
}
tries_so_far += tries1;
if (tries2 && tries0 + tries1 < tries) {
tt += calc_usecs_unicast_packet(sc, size, sn->rates[ndx2].rix,
short_tries-1,
MIN(tries2 + tries_so_far, tries) - tries_so_far - 1);
tt += calc_usecs_unicast_packet(sc, size,
ndx2 == -1 ? 0 : sn->rates[ndx2].rix, short_tries - 1,
MIN(tries2 + tries_so_far, tries) - tries_so_far - 1);
}
tries_so_far += tries2;
if (tries3 && tries0 + tries1 + tries2 < tries) {
tt += calc_usecs_unicast_packet(sc, size, sn->rates[ndx3].rix,
short_tries-1,
MIN(tries3 + tries_so_far, tries) - tries_so_far - 1);
tt += calc_usecs_unicast_packet(sc, size,
ndx3 == -1 ? 0 : sn->rates[ndx3].rix, short_tries - 1,
MIN(tries3 + tries_so_far, tries) - tries_so_far - 1);
}
if (sn->stats[size_bin][ndx0].total_packets < (100 / (100 - ssc->ath_smoothing_rate))) {
/* just average the first few packets */
int avg_tx = sn->stats[size_bin][ndx0].average_tx_time;