summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorRussell Bryant <russell@digium.com>2008-08-03 23:04:23 +0000
committerRussell Bryant <russell@digium.com>2008-08-03 23:04:23 +0000
commitad007219e5b1c186d9804da4c177ecfdd936f7a3 (patch)
treefe03cf9ac0cef1316985b72cb5e88c346246c4f9 /drivers
parentbc7451c076f9e6efa19ed362de942e52eaf2bb05 (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')
-rw-r--r--drivers/dahdi/dahdi-base.c49
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;
}