X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fseq_read.c;h=041f632786e66ce8e53ef7b4c97a4bbb54a58595;hp=448f9ef9a9ecf8f4e492b23d3f4712e172652395;hb=e917512db8efcbf3b5b5baeb64b6d345fd3686db;hpb=ced6090a330d3d83d0bce709f756aa3d7d65fea4 diff --git a/sbr/seq_read.c b/sbr/seq_read.c index 448f9ef..041f632 100644 --- a/sbr/seq_read.c +++ b/sbr/seq_read.c @@ -7,15 +7,16 @@ ** complete copyright information. */ +#include #include #include /* ** static prototypes */ -static int seq_init (struct msgs *, char *, char *); -static void seq_public (struct msgs *); -static void seq_private (struct msgs *); +static int seq_init(struct msgs *, char *, char *); +static void seq_public(struct msgs *); +static void seq_private(struct msgs *); /* @@ -25,25 +26,25 @@ static void seq_private (struct msgs *); */ void -seq_read (struct msgs *mp) +seq_read(struct msgs *mp) { /* ** Initialize the list of sequence names. Go ahead and - ** add the "cur" sequence to the list of sequences. + ** add the cur sequence to the list of sequences. */ - mp->msgattrs[0] = getcpy (current); + mp->msgattrs[0] = mh_xstrdup(seq_cur); mp->msgattrs[1] = NULL; - make_all_public (mp); /* initially, make all public */ + make_all_public(mp); /* initially, make all public */ /* If folder is empty, don't scan for sequence information */ if (mp->nummsg == 0) return; /* Initialize the public sequences */ - seq_public (mp); + seq_public(mp); /* Initialize the private sequences */ - seq_private (mp); + seq_private(mp); } @@ -52,64 +53,51 @@ seq_read (struct msgs *mp) */ static void -seq_public (struct msgs *mp) +seq_public(struct msgs *mp) { - int state; - char *cp, seqfile[PATH_MAX]; - char name[NAMESZ], field[BUFSIZ]; + enum state state; + struct field f = {{0}}; + char seqfile[PATH_MAX]; FILE *fp; /* - ** If mh_seq == NULL (such as if nmh been compiled with - ** NOPUBLICSEQ), or if *mh_seq == '\0' (the user has defined - ** the "mh-sequences" profile entry, but left it empty), - ** then just return, and do not initialize any public sequences. + ** If public sequences are disabled (e.g. the user has defined + ** an empty `Mh-Sequences' profile entry), then just return. */ if (mh_seq == NULL || *mh_seq == '\0') return; /* get filename of sequence file */ - snprintf (seqfile, sizeof(seqfile), "%s/%s", mp->foldpath, mh_seq); + snprintf(seqfile, sizeof(seqfile), "%s/%s", mp->foldpath, mh_seq); - if ((fp = lkfopen (seqfile, "r")) == NULL) + if ((fp = lkfopen(seqfile, "r")) == NULL) return; /* Use m_getfld to scan sequence file */ - for (state = FLD;;) { - switch (state = m_getfld (state, name, field, sizeof(field), fp)) { - case FLD: - case FLDPLUS: - case FLDEOF: - if (state == FLDPLUS) { - cp = getcpy (field); - while (state == FLDPLUS) { - state = m_getfld (state, name, field, sizeof(field), fp); - cp = add (field, cp); - } - seq_init (mp, getcpy (name), trimcpy (cp)); - free (cp); - } else { - seq_init (mp, getcpy (name), trimcpy (field)); - } - if (state == FLDEOF) - break; - continue; - - case BODY: - case BODYEOF: - adios (NULL, "no blank lines are permitted in %s", seqfile); - /* fall */ - - case FILEEOF: - break; - - default: - adios (NULL, "%s is poorly formatted", seqfile); + for (state = FLD2;;) { + switch (state = m_getfld2(state, &f, fp)) { + case LENERR2: + state = FLD2; + /* FALL */ + case FLD2: + seq_init(mp, mh_xstrdup(f.name), trimcpy(f.value)); + continue; + + case BODY2: + adios(EX_CONFIG, NULL, "no blank lines are permitted in %s", + seqfile); + /* FALL */ + + case FILEEOF2: + break; + + default: + adios(EX_CONFIG, NULL, "%s is poorly formatted", seqfile); } - break; /* break from for loop */ + break; } - lkfclose (fp, seqfile); + lkfclose(fp, seqfile); } @@ -121,24 +109,24 @@ seq_public (struct msgs *mp) */ static void -seq_private (struct msgs *mp) +seq_private(struct msgs *mp) { int i, j, alen, plen; char *cp; struct node *np; - alen = strlen ("atr-"); - plen = strlen (mp->foldpath) + 1; + alen = strlen("atr-"); + plen = strlen(mp->foldpath) + 1; for (np = m_defs; np; np = np->n_next) { - if (ssequal ("atr-", np->n_name) - && (j = strlen (np->n_name) - plen) > alen - && *(np->n_name + j) == '-' - && strcmp (mp->foldpath, np->n_name + j + 1) == 0) { - cp = getcpy (np->n_name + alen); + if (strncmp(np->n_name, "atr-", alen)==0 && + (j = strlen(np->n_name) - plen) > alen && + *(np->n_name + j) == '-' && + strcmp(mp->foldpath, np->n_name + j + 1)==0) { + cp = mh_xstrdup(np->n_name + alen); *(cp + j - alen) = '\0'; - if ((i = seq_init (mp, cp, getcpy (np->n_field))) != -1) - make_seq_private (mp, i); + if ((i = seq_init(mp, cp, mh_xstrdup(np->n_field))) != -1) + make_seq_private(mp, i); } } } @@ -155,16 +143,17 @@ seq_private (struct msgs *mp) */ static int -seq_init (struct msgs *mp, char *name, char *field) +seq_init(struct msgs *mp, char *name, char *field) { - int i, j, k, is_current; + unsigned int i; + int j, k, is_current; char *cp, **ap; /* - ** Check if this is "cur" sequence, + ** Check if this is the cur sequence, ** so we can do some special things. */ - is_current = !strcmp (current, name); + is_current = (strcmp(seq_cur, name)==0); /* ** Search for this sequence name to see if we've seen @@ -173,17 +162,17 @@ seq_init (struct msgs *mp, char *name, char *field) ** mesages in this folder. */ for (i = 0; mp->msgattrs[i]; i++) { - if (!strcmp (mp->msgattrs[i], name)) { + if (strcmp(mp->msgattrs[i], name)==0) { for (j = mp->lowmsg; j <= mp->hghmsg; j++) - clear_sequence (mp, i, j); + clear_sequence(mp, i, j); break; } } /* Return error, if too many sequences */ if (i >= NUMATTRS) { - free (name); - free (field); + mh_free0(&name); + mh_free0(&field); return -1; } @@ -192,7 +181,7 @@ seq_init (struct msgs *mp, char *name, char *field) ** name string. Else add it to the list of sequence names. */ if (mp->msgattrs[i]) { - free (name); + mh_free0(&name); } else { mp->msgattrs[i] = name; mp->msgattrs[i + 1] = NULL; @@ -201,14 +190,14 @@ seq_init (struct msgs *mp, char *name, char *field) /* ** Split up the different message ranges at whitespace */ - for (ap = brkstring (field, " ", "\n"); *ap; ap++) { + for (ap = brkstring(field, " ", "\n"); *ap; ap++) { if ((cp = strchr(*ap, '-'))) *cp++ = '\0'; - if ((j = m_atoi (*ap)) > 0) { - k = cp ? m_atoi (cp) : j; + if ((j = m_atoi(*ap)) > 0) { + k = cp ? m_atoi(cp) : j; /* - ** Keep mp->curmsg and "cur" sequence in synch. Unlike + ** Keep mp->curmsg and cur sequence in sync. Unlike ** other sequences, this message doesn't need to exist. ** Think about the series of command (rmm; next) to ** understand why this can be the case. But if it does @@ -222,12 +211,13 @@ seq_init (struct msgs *mp, char *name, char *field) ** and flip on bit for this sequence. */ for (; j <= k; j++) { - if (j >= mp->lowmsg && j <= mp->hghmsg && does_exist(mp, j)) - add_sequence (mp, i, j); + if (j >= mp->lowmsg && j <= mp->hghmsg && + does_exist(mp, j)) + add_sequence(mp, i, j); } } } - free (field); /* free string containing message ranges */ + mh_free0(&field); /* free string containing message ranges */ return i; }