- unsigned long pos;
- datetime_sec time;
- DIR *dir;
- direntry *d;
- struct prioq_elt pe;
- struct stat st;
- int i;
-
- numm = 0;
-
- time = now();
-
- if (dir = opendir("tmp"))
- {
- while (d = readdir(dir))
- {
- if (str_equal(d->d_name,".")) continue;
- if (str_equal(d->d_name,"..")) continue;
- if (!stralloc_copys(&newname,"tmp/")) die_nomem();
- if (!stralloc_cats(&newname,d->d_name)) die_nomem();
- if (!stralloc_0(&newname)) die_nomem();
- if (stat(newname.s,&st) == 0)
- if (time > st.st_atime + 129600)
- unlink(newname.s);
- }
- closedir(dir);
- }
-
- if (!stralloc_copys(&filenames,"")) die_nomem();
-
- if (dir = opendir("new"))
- {
- while (d = readdir(dir))
- {
- if (str_equal(d->d_name,".")) continue;
- if (str_equal(d->d_name,"..")) continue;
- pos = filenames.len;
- if (!stralloc_cats(&filenames,"new/")) die_nomem();
- if (!stralloc_cats(&filenames,d->d_name)) die_nomem();
- if (!stralloc_0(&filenames)) die_nomem();
- if (stat(filenames.s + pos,&st) == 0)
- {
- pe.dt = st.st_mtime;
- pe.id = pos;
- if (!prioq_insert(&pq,&pe)) die_nomem();
- ++numm;
- }
- }
- closedir(dir);
- }
-
- if (dir = opendir("cur"))
- {
- while (d = readdir(dir))
- {
- if (str_equal(d->d_name,".")) continue;
- if (str_equal(d->d_name,"..")) continue;
- pos = filenames.len;
- if (!stralloc_cats(&filenames,"cur/")) die_nomem();
- if (!stralloc_cats(&filenames,d->d_name)) die_nomem();
- if (!stralloc_0(&filenames)) die_nomem();
- if (stat(filenames.s + pos,&st) == 0)
- {
- pe.dt = st.st_mtime;
- pe.id = pos;
- if (!prioq_insert(&pq,&pe)) die_nomem();
- ++numm;
- }
- }
- closedir(dir);
- }
-
- m = (struct message *) alloc(numm * sizeof(struct message));
- if (!m) die_nomem();
-
- for (i = 0;i < numm;++i)
- {
- if (!prioq_min(&pq,&pe)) { numm = i; break; }
- prioq_delmin(&pq);
- m[i].fn = filenames.s + pe.id;
- m[i].flagdeleted = 0;
- if (stat(m[i].fn,&st) == -1)
- m[i].size = 0;
- else
- m[i].size = st.st_size;
+ struct prioq_elt pe;
+ struct stat st;
+ int i;
+
+ maildir_clean(&line);
+ if (maildir_scan(&pq,&filenames,1,1) == -1) die_scan();
+
+ numm = pq.p ? pq.len : 0;
+ m = (struct message *) alloc(numm * sizeof(struct message));
+ if (!m) die_nomem();
+
+ for (i = 0;i < numm;++i) {
+ if (!prioq_min(&pq,&pe)) { numm = i; break; }
+ prioq_delmin(&pq);
+ m[i].fn = filenames.s + pe.id;
+ m[i].flagdeleted = 0;
+ if (stat(m[i].fn,&st) == -1)
+ m[i].size = 0;
+ else
+ m[i].size = st.st_size;