X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffolder_read.c;h=722ee2fd51f7abcc023f39f57383ce344e7fb230;hp=222b490f27198ed09dbf248688fb28b621e0e858;hb=b6823062c9806496b39ff12bf1fbe43ae127c96c;hpb=714b5c530ece27ea2835a313013f5b770163403c diff --git a/sbr/folder_read.c b/sbr/folder_read.c index 222b490..722ee2f 100644 --- a/sbr/folder_read.c +++ b/sbr/folder_read.c @@ -6,8 +6,11 @@ ** complete copyright information. */ +#include #include #include +#include +#include /* We allocate the `mi' array 1024 elements at a time */ #define NUMMSGS 1024 @@ -24,25 +27,26 @@ struct msgs * 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); + name = mh_xstrdup(toabsdir(name)); if (!(dd = opendir(name))) { - free(name); + mh_free0(&name); return NULL; } if (stat(name, &st) == -1) { - free(name); + 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); mp->foldpath = name; @@ -56,14 +60,13 @@ folder_read(char *name) 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. */ 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) { @@ -73,7 +76,7 @@ folder_read(char *name) */ 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 */ @@ -86,9 +89,9 @@ folder_read(char *name) ** lowest we've seen? */ if (msgnum < mp->lowmsg) - mp->lowmsg = msgnum; + mp->lowmsg = msgnum; if (msgnum > mp->hghmsg) - mp->hghmsg = msgnum; + mp->hghmsg = msgnum; } /* @@ -99,31 +102,17 @@ folder_read(char *name) } 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; } } } @@ -137,14 +126,14 @@ folder_read(char *name) /* for testing, allocate minimal necessary space */ /* 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_xcalloc(MSGSTATSIZE(mp, mp->lowoff, mp->hghoff), 1); /* ** 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); @@ -157,7 +146,7 @@ folder_read(char *name) for (msgnum = 0; msgnum < mp->nummsg; 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.