X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffolder_read.c;h=35dc1950a4f7dde864da0ea93c444cc27cf5f639;hp=c77ea1ea253fbd14710cc8fa839534b5d1070870;hb=30292c537fe4eab052f303f1d3179c0e2fd037d8;hpb=a485ed478abbd599d8c9aab48934e7a26733ecb1 diff --git a/sbr/folder_read.c b/sbr/folder_read.c index c77ea1e..35dc195 100644 --- a/sbr/folder_read.c +++ b/sbr/folder_read.c @@ -1,10 +1,10 @@ /* - * 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 @@ -13,16 +13,16 @@ #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; struct msgs *mp; @@ -30,21 +30,22 @@ folder_read (char *name) struct dirent *dp; DIR *dd; - name = m_mailpath (name); - if (!(dd = opendir (name))) { - free (name); + name = getcpy(toabsdir(name)); + if (!(dd = opendir(name))) { + free(name); return NULL; } - if (stat (name, &st) == -1) { - free (name); + if (stat(name, &st) == -1) { + free(name); + closedir(dd); return NULL; } /* Allocate the main structure for folder information */ - mp = (struct msgs *) mh_xmalloc ((size_t) sizeof(*mp)); + mp = (struct msgs *) mh_xmalloc((size_t) sizeof(*mp)); - clear_folder_flags (mp); + clear_folder_flags(mp); mp->foldpath = name; mp->lowmsg = 0; mp->hghmsg = 0; @@ -54,26 +55,26 @@ folder_read (char *name) mp->numsel = 0; mp->nummsg = 0; - if (access (name, W_OK) == -1) - set_readonly (mp); + if (access(name, W_OK) == -1) + set_readonly(mp); prefix_len = strlen(backup_prefix); /* - * 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 = (int *) mh_xmalloc((size_t) (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 = (int *) mh_xrealloc(mi, (size_t) (len * sizeof(*mi))); } /* Check if this is the first message we've seen */ @@ -81,7 +82,10 @@ 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; if (msgnum > mp->hghmsg) @@ -89,71 +93,71 @@ folder_read (char *name) } /* - * 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 */ + case '.': + case ',': + continue; + + default: + /* + ** skip any files beginning with + ** backup prefix + */ + if (strncmp(dp->d_name, backup_prefix, + prefix_len)==0) 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; + /* + ** 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. */ + + mp->msgstats = mh_xmalloc(MSGSTATSIZE(mp, mp->lowoff, mp->hghoff)); /* - * Clear all the flag bits for all the message - * status entries we just allocated. - */ + ** Clear all the flag bits for all the message + ** status entries we just allocated. + ** TODO: use memset() ? + */ for (msgnum = mp->lowoff; msgnum <= mp->hghoff; msgnum++) - clear_msg_flags (mp, 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 - * 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 */ + free(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; }