]> diplodocus.org Git - nmh/blobdiff - sbr/seq_add.c
Disable assertions by default.
[nmh] / sbr / seq_add.c
index ff3e23a4544ec440fac052b8ab04ebdf24934fb8..47085f88f9ec61e88e50066b28a40be496d6472c 100644 (file)
@@ -2,8 +2,6 @@
 /*
  * seq_add.c -- add message(s) to a sequence
  *
 /*
  * seq_add.c -- add message(s) to a sequence
  *
- * $Id$
- *
  * 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.
  * 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.
@@ -27,7 +25,8 @@
 int
 seq_addsel (struct msgs *mp, char *cp, int public, int zero)
 {
 int
 seq_addsel (struct msgs *mp, char *cp, int public, int zero)
 {
-    int i, msgnum, new_seq = 1;
+    unsigned int i;
+    int msgnum, new_seq = 1;
 
     if (!seq_nameok (cp))
        return 0;
 
     if (!seq_nameok (cp))
        return 0;
@@ -42,8 +41,8 @@ seq_addsel (struct msgs *mp, char *cp, int public, int zero)
     /*
      * Get the number for this sequence
      */
     /*
      * Get the number for this sequence
      */
-    for (i = 0; mp->msgattrs[i]; i++) {
-       if (!strcmp (mp->msgattrs[i], cp)) {
+    for (i = 0; i < svector_size (mp->msgattrs); i++) {
+       if (!strcmp (svector_at (mp->msgattrs, i), cp)) {
            new_seq = 0;
            break;
        }
            new_seq = 0;
            break;
        }
@@ -53,22 +52,17 @@ seq_addsel (struct msgs *mp, char *cp, int public, int zero)
      * If this is a new sequence, add a slot for it
      */
     if (new_seq) {
      * If this is a new sequence, add a slot for it
      */
     if (new_seq) {
-       if (i >= NUMATTRS) {
-           advise (NULL, "only %d sequences allowed (no room for %s)!", NUMATTRS, cp);
-           return 0;
-       }
-       if (!(mp->msgattrs[i] = strdup (cp))) {
+       if (!(svector_push_back (mp->msgattrs, strdup (cp)))) {
            advise (NULL, "strdup failed");
            return 0;
        }
            advise (NULL, "strdup failed");
            return 0;
        }
-       mp->msgattrs[i + 1] = NULL;
     }
 
     /*
      * If sequence is new, or zero flag is set, then first
      * clear the bit for this sequence from all messages.
      */
     }
 
     /*
      * If sequence is new, or zero flag is set, then first
      * clear the bit for this sequence from all messages.
      */
-    if (new_seq || zero) {
+    if ((new_seq || zero) && mp->nummsg > 0) {
        for (msgnum = mp->lowmsg; msgnum <= mp->hghmsg; msgnum++)
            clear_sequence (mp, i, msgnum);
     }
        for (msgnum = mp->lowmsg; msgnum <= mp->hghmsg; msgnum++)
            clear_sequence (mp, i, msgnum);
     }
@@ -119,7 +113,8 @@ seq_addsel (struct msgs *mp, char *cp, int public, int zero)
 int
 seq_addmsg (struct msgs *mp, char *cp, int msgnum, int public, int zero)
 {
 int
 seq_addmsg (struct msgs *mp, char *cp, int msgnum, int public, int zero)
 {
-    int i, j, new_seq = 1;
+    unsigned int i;
+    int j, new_seq = 1;
 
     if (!seq_nameok (cp))
        return 0;
 
     if (!seq_nameok (cp))
        return 0;
@@ -133,8 +128,8 @@ seq_addmsg (struct msgs *mp, char *cp, int msgnum, int public, int zero)
     /*
      * Get the number for this sequence
      */
     /*
      * Get the number for this sequence
      */
-    for (i = 0; mp->msgattrs[i]; i++) {
-       if (!strcmp (mp->msgattrs[i], cp)) {
+    for (i = 0; i < svector_size (mp->msgattrs); i++) {
+       if (!strcmp (svector_at (mp->msgattrs, i), cp)) {
            new_seq = 0;
            break;
        }
            new_seq = 0;
            break;
        }
@@ -144,22 +139,17 @@ seq_addmsg (struct msgs *mp, char *cp, int msgnum, int public, int zero)
      * If this is a new sequence, add a slot for it
      */
     if (new_seq) {
      * If this is a new sequence, add a slot for it
      */
     if (new_seq) {
-       if (i >= NUMATTRS) {
-           advise (NULL, "only %d sequences allowed (no room for %s)!", NUMATTRS, cp);
-           return 0;
-       }
-       if (!(mp->msgattrs[i] = strdup (cp))) {
+       if (!(svector_push_back (mp->msgattrs, strdup (cp)))) {
            advise (NULL, "strdup failed");
            return 0;
        }
            advise (NULL, "strdup failed");
            return 0;
        }
-       mp->msgattrs[i + 1] = NULL;
     }
 
     /*
      * If sequence is new, or zero flag is set, then first
      * clear the bit for this sequence from all messages.
      */
     }
 
     /*
      * If sequence is new, or zero flag is set, then first
      * clear the bit for this sequence from all messages.
      */
-    if (new_seq || zero) {
+    if ((new_seq || zero) && mp->nummsg > 0) {
        for (j = mp->lowmsg; j <= mp->hghmsg; j++)
            clear_sequence (mp, i, j);
     }
        for (j = mp->lowmsg; j <= mp->hghmsg; j++)
            clear_sequence (mp, i, j);
     }