]>
diplodocus.org Git - mdfrm/blob - mdfrm.c
30a3b29f93ff4a2db9b53cde85eb2cc565d9199a
1 /* mdfrm.c -- mdfrm(1) for maildir.
5 * This program is in the public domain.
18 /* Note that PATH_MAX is supposed to include the terminating null. */
23 #define PATH_MAX MAXPATHLEN
28 FROMLEN
= 6, /* "From: " */
29 SUBJLEN
= 9, /* "Subject: " */
31 /* Number of characters for each field we actually output. This
32 * must also be changed in the printf functions at the end.
38 static char rcsid
[] = "$Id$";
41 main(int argc
, char *argv
[])
46 struct dirent
*dirent
;
49 char *line
, *fromheader
, *subjheader
;
50 size_t len
, fromcount
, subjcount
;
52 if (argv
[1] && argv
[1][0] == '-' && argv
[1][1] == 'v') {
57 if (!(dirname
= argv
[1])) {
58 if (!(dirname
= getenv("MAILDIR"))) {
59 if (!(dirname
= getenv("HOME"))) {
60 errx(EX_UNAVAILABLE
, "Could not find maildir.");
62 snprintf(buf
, PATH_MAX
, "%s/Maildir", dirname
);
68 if (chdir(dirname
) != 0) {
69 err(EX_OSERR
, "Failed chdir(%s)", dirname
);
72 if (chdir("new") != 0) {
73 err(EX_OSERR
, "Failed chdir(%s/new)", dirname
);
78 err(EX_OSERR
, "Failed opendir(%s/new)", dirname
);
81 fromheader
= malloc(FROMCOUNT
+ 1);
82 subjheader
= malloc(SUBJCOUNT
+ 1);
83 for (dirent
= readdir(dir
); dirent
; dirent
= readdir(dir
)) {
84 filename
= dirent
->d_name
;
85 if (filename
[0] == '.') {
89 if (!(file
= fopen(filename
, "r"))) {
90 err(EX_OSERR
, "Failed fopen(%s)", filename
);
93 fromheader
[0] = subjheader
[0] = '\0';
94 fromcount
= subjcount
= 0;
95 while ((line
= fgetln(file
, &len
))) {
102 && strncmp(line
, "From: ", FROMLEN
) == 0) {
105 if (len
< FROMCOUNT
) {
108 fromcount
= FROMCOUNT
;
110 strncpy(fromheader
, line
, fromcount
);
111 } else if (len
> SUBJLEN
112 && strncmp(line
, "Subject: ", SUBJLEN
) == 0) {
115 if (len
< SUBJCOUNT
) {
118 subjcount
= SUBJCOUNT
;
120 strncpy(subjheader
, line
, subjcount
);
124 printf("%-24s ", fromheader
);
125 printf("%-53s\n", subjheader
);