X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffolder_read.c;h=011958f861d342ab1998d8af3d8d2456d4622515;hp=c77ea1ea253fbd14710cc8fa839534b5d1070870;hb=b3d32781d25365c2270210bc9ef7b645d83b8dbe;hpb=a485ed478abbd599d8c9aab48934e7a26733ecb1 diff --git a/sbr/folder_read.c b/sbr/folder_read.c index c77ea1e..011958f 100644 --- a/sbr/folder_read.c +++ b/sbr/folder_read.c @@ -1,50 +1,54 @@ /* - * 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 - * complete copyright information. - */ - +** 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 +** complete copyright information. +*/ + +#include #include #include +#include +#include /* We allocate the `mi' array 1024 elements at a time */ #define NUMMSGS 1024 /* - * 1) Create the folder/message structure - * 2) Read the directory (folder) and temporarily - * record the numbers of the messages we have seen. - * 3) Then allocate the array for message attributes and - * set the initial flags for all messages we've seen. - * 4) Read and initialize the sequence information. - */ +** 1) Create the folder/message structure +** 2) Read the directory (folder) and temporarily +** record the numbers of the messages we have seen. +** 3) Then allocate the array for message attributes and +** set the initial flags for all messages we've seen. +** 4) Read and initialize the sequence information. +*/ struct msgs * -folder_read (char *name) +folder_read(char *name) { - int msgnum, prefix_len, len, *mi; + int msgnum, len, *mi; struct msgs *mp; struct stat st; struct dirent *dp; DIR *dd; - name = m_mailpath (name); - if (!(dd = opendir (name))) { - free (name); + name = mh_xstrdup(toabsdir(name)); + if (!(dd = opendir(name))) { + mh_free0(&name); return NULL; } - if (stat (name, &st) == -1) { - free (name); + if (stat(name, &st) == -1) { + mh_free0(&name); + closedir(dd); return NULL; } /* Allocate the main structure for folder information */ - mp = (struct msgs *) mh_xmalloc ((size_t) sizeof(*mp)); + mp = mh_xcalloc(1, sizeof(*mp)); - clear_folder_flags (mp); + clear_folder_flags(mp); mp->foldpath = name; mp->lowmsg = 0; mp->hghmsg = 0; @@ -54,26 +58,25 @@ folder_read (char *name) mp->numsel = 0; mp->nummsg = 0; - if (access (name, W_OK) == -1) - set_readonly (mp); - prefix_len = strlen(backup_prefix); + if (access(name, W_OK) == -1) + set_readonly(mp); /* - * Allocate a temporary place to record the - * name of the messages in this folder. - */ + ** Allocate a temporary place to record the + ** name of the messages in this folder. + */ len = NUMMSGS; - mi = (int *) mh_xmalloc ((size_t) (len * sizeof(*mi))); + mi = mh_xcalloc(len, sizeof(*mi)); - while ((dp = readdir (dd))) { - if ((msgnum = m_atoi (dp->d_name)) && msgnum > 0) { + while ((dp = readdir(dd))) { + if ((msgnum = m_atoi(dp->d_name)) && msgnum > 0) { /* - * Check if we need to allocate more - * temporary elements for message names. - */ + ** Check if we need to allocate more + ** temporary elements for message names. + */ if (mp->nummsg >= len) { len += NUMMSGS; - mi = (int *) mh_xrealloc (mi, (size_t) (len * sizeof(*mi))); + mi = mh_xrealloc(mi, len * sizeof(*mi)); } /* Check if this is the first message we've seen */ @@ -81,79 +84,66 @@ folder_read (char *name) mp->lowmsg = msgnum; mp->hghmsg = msgnum; } else { - /* Check if this is it the highest or lowest we've seen? */ + /* + ** Check if this is it the highest or + ** lowest we've seen? + */ if (msgnum < mp->lowmsg) - mp->lowmsg = msgnum; + mp->lowmsg = msgnum; if (msgnum > mp->hghmsg) - mp->hghmsg = msgnum; + mp->hghmsg = msgnum; } /* - * Now increment count, and record message - * number in a temporary place for now. - */ + ** Now increment count, and record message + ** number in a temporary place for now. + */ mi[mp->nummsg++] = msgnum; } else { switch (dp->d_name[0]) { - case '.': - case ',': -#ifdef MHE - case '+': -#endif /* MHE */ - continue; - - default: - /* skip any files beginning with backup prefix */ - if (!strncmp (dp->d_name, backup_prefix, prefix_len)) - continue; - - /* skip the altmsg link file */ - if (!strcmp (dp->d_name, altmsglink)) - continue; - - /* indicate that there are other files in folder */ - set_other_files (mp); - continue; + case '.': + case ',': + continue; + + default: + /* + ** indicate that there are other + ** files in folder + */ + set_other_files(mp); + continue; } } } - closedir (dd); - mp->lowoff = max (mp->lowmsg, 1); + closedir(dd); + mp->lowoff = max(mp->lowmsg, 1); /* Go ahead and allocate space for 100 additional messages. */ mp->hghoff = mp->hghmsg + 100; /* for testing, allocate minimal necessary space */ - /* mp->hghoff = max (mp->hghmsg, 1); */ + /* mp->hghoff = max(mp->hghmsg, 1); */ - /* - * Allocate space for status of each message. - */ - mp->msgstats = mh_xmalloc (MSGSTATSIZE(mp, mp->lowoff, mp->hghoff)); + /* Allocate space for status of each message. */ - /* - * 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); + mp->msgstats = mh_xcalloc(MSGSTATSIZE(mp, mp->lowoff, mp->hghoff), 1); /* - * Scan through the array of messages we've seen and - * setup the initial flags for those messages in the - * newly allocated mp->msgstats area. - */ + ** Scan through the array of messages we've seen and + ** setup the initial flags for those messages in the + ** newly allocated mp->msgstats area. + */ for (msgnum = 0; msgnum < mp->nummsg; msgnum++) - set_exists (mp, mi[msgnum]); + set_exists(mp, mi[msgnum]); - free (mi); /* We don't need this anymore */ + mh_free0(&mi); /* We don't need this anymore */ /* - * Read and initialize the sequence information. - */ - seq_read (mp); + ** Read and initialize the sequence information. + */ + seq_read(mp); return mp; }