X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/2c9922047eb2831310f0f893039d62db924ed9c9..7cca9c4da3b90561d4cdf7de97f534d6c98ae1f4:/sbr/folder_read.c diff --git a/sbr/folder_read.c b/sbr/folder_read.c index 5c52abde..eab1e1f4 100644 --- a/sbr/folder_read.c +++ b/sbr/folder_read.c @@ -1,6 +1,4 @@ - -/* - * folder_read.c -- initialize folder structure and read folder +/* folder_read.c -- initialize folder structure and read folder * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -25,11 +23,11 @@ struct msgs * folder_read (char *name, int lockflag) { - int msgnum, prefix_len, len, *mi; + int msgnum, len, *mi; struct msgs *mp; struct dirent *dp; DIR *dd; - bvector_t *v; + struct bvector *v; size_t i; name = m_mailpath (name); @@ -39,8 +37,7 @@ folder_read (char *name, int lockflag) } /* Allocate the main structure for folder information */ - mp = (struct msgs *) mh_xmalloc ((size_t) sizeof(*mp)); - + NEW(mp); clear_folder_flags (mp); mp->foldpath = name; mp->lowmsg = 0; @@ -55,7 +52,6 @@ folder_read (char *name, int lockflag) if (access (name, W_OK) == -1) set_readonly (mp); - prefix_len = strlen(BACKUP_PREFIX); /* * Allocate a temporary place to record the @@ -101,7 +97,7 @@ folder_read (char *name, int lockflag) default: /* skip any files beginning with backup prefix */ - if (!strncmp (dp->d_name, BACKUP_PREFIX, prefix_len)) + if (has_prefix(dp->d_name, BACKUP_PREFIX)) continue; /* skip the LINK file */ @@ -140,18 +136,11 @@ folder_read (char *name, int lockflag) mp->num_msgstats = MSGSTATNUM (mp->lowoff, mp->hghoff); mp->msgstats = mh_xmalloc (MSGSTATSIZE(mp)); for (i = 0, v = mp->msgstats; i < mp->num_msgstats; ++i, ++v) { - *v = bvector_create (0); + bvector_init(v); } mp->msgattrs = svector_create (0); - /* - * Clear all the flag bits for all the message - * status entries we just allocated. - */ - for (msgnum = mp->lowoff; msgnum <= mp->hghoff; msgnum++) - clear_msg_flags (mp, msgnum); - /* * Scan through the array of messages we've seen and * setup the initial flags for those messages in the @@ -165,7 +154,15 @@ folder_read (char *name, int lockflag) /* * Read and initialize the sequence information. */ - seq_read (mp, lockflag); + if (seq_read (mp, lockflag) == NOTOK) { + char seqfile[PATH_MAX]; + + /* Failed to lock sequence file. */ + snprintf (seqfile, sizeof(seqfile), "%s/%s", mp->foldpath, mh_seq); + advise (seqfile, "failed to lock"); + + return NULL; + } return mp; }