X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fseq_list.c;h=1e2e606a6b418a92c84c62dd767f50c6fbc10f85;hp=afa8671c5bc479266d5dffdb868e8772c60553e7;hb=714b5c530ece27ea2835a313013f5b770163403c;hpb=1691e80890e5d8ba258c51c214a3e91880e1db2b diff --git a/sbr/seq_list.c b/sbr/seq_list.c index afa8671..1e2e606 100644 --- a/sbr/seq_list.c +++ b/sbr/seq_list.c @@ -1,12 +1,14 @@ - /* - * seq_list.c -- Get all messages in a sequence and return them - * -- as a space separated list of message ranges. - * - * $Id$ - */ +** seq_list.c -- Get all messages in a sequence and return them +** -- as a space separated list of message ranges. +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ #include +#include /* allocate this much buffer space at a time */ #define MAXBUFFER 1024 @@ -19,86 +21,84 @@ static int len = 0; char * seq_list(struct msgs *mp, char *seqname) { - int i, j, seqnum; - char *bp; - - /* On first invocation, allocate initial buffer space */ - if (!buffer) { - len = MAXBUFFER; - if (!(buffer = malloc ((size_t) len))) - adios (NULL, "unable to malloc storage in seq_list"); - } - - /* - * Special processing for "cur" sequence. We assume that the - * "cur" sequence and mp->curmsg are in sync (see seq_add.c). - * This is returned, even if message doesn't exist or the - * folder is empty. - */ - if (!strcmp (current, seqname)) { - if (mp->curmsg) { - sprintf(buffer, "%s", m_name(mp->curmsg)); - return (buffer); - } else - return (NULL); - } - - /* If the folder is empty, just return NULL */ - if (mp->nummsg == 0) - return NULL; - - /* Get the index of the sequence */ - if ((seqnum = seq_getnum (mp, seqname)) == -1) - return NULL; - - bp = buffer; - - for (i = mp->lowmsg; i <= mp->hghmsg; ++i) { - /* - * If message doesn't exist, or isn't in - * the sequence, then continue. - */ - if (!does_exist(mp, i) || !in_sequence(mp, seqnum, i)) - continue; + int i, j, seqnum; + char *bp; - /* - * See if we need to enlarge buffer. Since we don't know - * exactly how many character this particular message range - * will need, we enlarge the buffer if we are within - * 50 characters of the end. - */ - if (bp - buffer > len - 50) { - char *newbuf; - - len += MAXBUFFER; - if (!(newbuf = realloc (buffer, (size_t) len))) - adios (NULL, "unable to realloc storage in seq_list"); - bp = newbuf + (bp - buffer); - buffer = newbuf; + /* On first invocation, allocate initial buffer space */ + if (!buffer) { + len = MAXBUFFER; + buffer = mh_xmalloc((size_t) len); } /* - * If this is not the first message range in - * the list, first add a space. - */ - if (bp > buffer) - *bp++ = ' '; - - sprintf(bp, "%s", m_name(i)); - bp += strlen(bp); - j = i; /* Remember beginning of message range */ + ** Special processing for "cur" sequence. We assume that the + ** "cur" sequence and mp->curmsg are in sync (see seq_add.c). + ** This is returned, even if message doesn't exist or the + ** folder is empty. + */ + if (!strcmp(current, seqname)) { + if (mp->curmsg) { + sprintf(buffer, "%s", m_name(mp->curmsg)); + return (buffer); + } else + return (NULL); + } - /* - * Scan to the end of this message range - */ - for (++i; i <= mp->hghmsg && does_exist(mp, i) && in_sequence(mp, seqnum, i); - ++i) - ; - - if (i - j > 1) { - sprintf(bp, "-%s", m_name(i - 1)); - bp += strlen(bp); + /* If the folder is empty, just return NULL */ + if (mp->nummsg == 0) + return NULL; + + /* Get the index of the sequence */ + if ((seqnum = seq_getnum(mp, seqname)) == -1) + return NULL; + + bp = buffer; + + for (i = mp->lowmsg; i <= mp->hghmsg; ++i) { + /* + ** If message doesn't exist, or isn't in + ** the sequence, then continue. + */ + if (!does_exist(mp, i) || !in_sequence(mp, seqnum, i)) + continue; + + /* + ** See if we need to enlarge buffer. Since we don't know + ** exactly how many character this particular message range + ** will need, we enlarge the buffer if we are within + ** 50 characters of the end. + */ + if (bp - buffer > len - 50) { + char *newbuf; + + len += MAXBUFFER; + newbuf = mh_xrealloc(buffer, (size_t) len); + bp = newbuf + (bp - buffer); + buffer = newbuf; + } + + /* + ** If this is not the first message range in + ** the list, first add a space. + */ + if (bp > buffer) + *bp++ = ' '; + + sprintf(bp, "%s", m_name(i)); + bp += strlen(bp); + j = i; /* Remember beginning of message range */ + + /* + ** Scan to the end of this message range + */ + for (++i; i <= mp->hghmsg && does_exist(mp, i) && in_sequence(mp, seqnum, i); + ++i) + ; + + if (i - j > 1) { + sprintf(bp, "-%s", m_name(i - 1)); + bp += strlen(bp); + } } - } - return (bp > buffer? buffer : NULL); + return (bp > buffer? buffer : NULL); }