diff options
author | Russell Bryant <russell@digium.com> | 2008-08-03 23:04:23 +0000 |
---|---|---|
committer | Russell Bryant <russell@digium.com> | 2008-08-03 23:04:23 +0000 |
commit | ad007219e5b1c186d9804da4c177ecfdd936f7a3 (patch) | |
tree | fe03cf9ac0cef1316985b72cb5e88c346246c4f9 /drivers/dahdi/dahdi-base.c | |
parent | bc7451c076f9e6efa19ed362de942e52eaf2bb05 (diff) |
Re-work a for loop in proc_read. This loop traversed the array of all DAHDI
channels and determined whether they belonged to the span being printed or
not. This has been simplified by simply traversing the array of channels on
the span structure, itself.
Thanks to tzafrir for the idea in #asterisk-dev.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@4690 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/dahdi-base.c')
-rw-r--r-- | drivers/dahdi/dahdi-base.c | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c index 0db218d..245e1ad 100644 --- a/drivers/dahdi/dahdi-base.c +++ b/drivers/dahdi/dahdi-base.c @@ -604,39 +604,42 @@ static int dahdi_proc_read(char *page, char **start, off_t off, int count, int * len += sprintf(page + len, "\tTiming slips: %d\n", spans[span]->timingslips); len += sprintf(page + len, "\n"); - for (x = 1; x < DAHDI_MAX_CHANNELS; x++) { - if (!chans[x]) - continue; + for (x = 0; x < spans[span]->channels; x++) { + struct dahdi_chan *chan = spans[span]->chans[x]; - if (chans[x]->span && (chans[x]->span->spanno == span)) { - if (chans[x]->name) - len += sprintf(page + len, "\t%4d %s ", x, chans[x]->name); - if (chans[x]->sig) { - if (chans[x]->sig == DAHDI_SIG_SLAVE) - len += sprintf(page + len, "%s ", sigstr(chans[x]->master->sig)); - else { - len += sprintf(page + len, "%s ", sigstr(chans[x]->sig)); - if (chans[x]->nextslave && chans[x]->master->channo == x) - len += sprintf(page + len, "Master "); - } + if (chan->name) + len += sprintf(page + len, "\t%4d %s ", x, chan->name); + + if (chan->sig) { + if (chan->sig == DAHDI_SIG_SLAVE) + len += sprintf(page + len, "%s ", sigstr(chan->master->sig)); + else { + len += sprintf(page + len, "%s ", sigstr(chan->sig)); + if (chan->nextslave && chan->master->channo == x) + len += sprintf(page + len, "Master "); } - if (test_bit(DAHDI_FLAGBIT_OPEN, &chans[x]->flags)) - len += sprintf(page + len, "(In use) "); + } + + if (test_bit(DAHDI_FLAGBIT_OPEN, &chan->flags)) + len += sprintf(page + len, "(In use) "); + #ifdef OPTIMIZE_CHANMUTE - if (chans[x]->chanmute) - len += sprintf(page + len, "(no pcm) "); + if (chan->chanmute) + len += sprintf(page + len, "(no pcm) "); #endif - len += fill_alarm_string(page + len, count - len, chans[x]->chan_alarms); - if (chans[x]->ec_factory) - len += sprintf(page + len, " (EC: %s) ", chans[x]->ec_factory->name); + len += fill_alarm_string(page + len, count - len, chan->chan_alarms); + + if (chan->ec_factory) + len += sprintf(page + len, " (EC: %s) ", chan->ec_factory->name); + + len += sprintf(page + len, "\n"); - len += sprintf(page + len, "\n"); - } if (len <= off) { /* If everything printed so far is before beginning of request */ off -= len; len = 0; } + if (len > off + count) /* stop if we've already generated enough */ break; } |