]> diplodocus.org Git - nmh/blobdiff - sbr/seq_del.c
That didn't work, try adding -pedantic-errors.
[nmh] / sbr / seq_del.c
index ed70c5d9db74efc7edf4a96b7f2ff53252d25588..670872efb0109b92e1b88f441e520c0901a22867 100644 (file)
@@ -2,7 +2,9 @@
 /*
  * seq_del.c -- delete message(s) from a sequence
  *
 /*
  * seq_del.c -- delete message(s) from 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.
  */
 
 #include <h/mh.h>
  */
 
 #include <h/mh.h>
@@ -23,7 +25,8 @@
 int
 seq_delsel (struct msgs *mp, char *cp, int public, int zero)
 {
 int
 seq_delsel (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;
@@ -31,8 +34,8 @@ seq_delsel (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;
        }
@@ -47,15 +50,10 @@ seq_delsel (struct msgs *mp, char *cp, int public, int zero)
         * create the sequence, if necessary
         */
        if (new_seq) {
         * create the sequence, if necessary
         */
        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;
        }
        /*
         * now add sequence bit to all existing messages
        }
        /*
         * now add sequence bit to all existing messages
@@ -80,6 +78,12 @@ seq_delsel (struct msgs *mp, char *cp, int public, int zero)
        if (is_selected (mp, msgnum))
            clear_sequence (mp, i, msgnum);
 
        if (is_selected (mp, msgnum))
            clear_sequence (mp, i, msgnum);
 
+    if (! strcmp (cp, current)  &&
+        mp->lowsel <= mp->curmsg  &&  mp->curmsg <= mp->hghsel) {
+        /* Removed current message indication, so reset curmsg. */
+        mp->curmsg = 0;
+    }
+
     /*
      * Set the public/private bit for this sequence.
      */
     /*
      * Set the public/private bit for this sequence.
      */
@@ -112,13 +116,13 @@ seq_delsel (struct msgs *mp, char *cp, int public, int zero)
 int
 seq_delmsg (struct msgs *mp, char *cp, int msgnum)
 {
 int
 seq_delmsg (struct msgs *mp, char *cp, int msgnum)
 {
-    int i;
+    size_t i;
 
     if (!seq_nameok (cp))
        return 0;
 
 
     if (!seq_nameok (cp))
        return 0;
 
-    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)) {
            clear_sequence (mp, i, msgnum);
            mp->msgflags |= SEQMOD;
            return 1;
            clear_sequence (mp, i, msgnum);
            mp->msgflags |= SEQMOD;
            return 1;