commit - dcdea5d144e2eb2dc27299e73c0713a2d03e44cd
commit + 836a2edc972102f05b1d6d7700b3ed8a8afcc5b8
blob - 5aca129f239d116940caa8c04508e86a789c5af6
blob + e0836997564c3b42ef6c0e2113046348b23a353a
--- mailcap.c
+++ mailcap.c
#include "mailcap.h"
#define DEFAULT_MAILCAP_ENTRY "*/*; xdg-open %s ; needsterminal"
-
-#define MAILCAP_NEEDSTERMINAL 0x1
-#define MAILCAP_COPIOUSOUTPUT 0x2
#define str_unappend(ch) if (sps.off > 0 && (ch) != EOF) { sps.off--; }
void
init_mailcap(void)
{
- FILE *f = NULL;
+ FILE *f;
+ char *copy;
+
+ if ((f = find_mailcap_file()) != NULL) {
+ mailcap_parse(f);
+ fclose(f);
+ }
+
+ if ((copy = strdup(DEFAULT_MAILCAP_ENTRY)) == NULL)
+ errx(1, "strdup");
+
+ /* Our own entry won't error. */
+ (void)parse_mailcap_line(copy);
+ free(copy);
+}
+
+void
+mailcap_parse(FILE *f)
+{
const char delims[3] = {'\\', '\\', '\0'};
char *buf, *copy;
size_t line = 0;
- if ((f = find_mailcap_file()) == NULL)
- goto add_default;
-
while ((buf = fparseln(f, NULL, &line, delims, 0)) != NULL) {
memset(&sps, 0, sizeof sps);
copy = buf;
}
free(copy);
}
- fclose(f);
-
-add_default:
- if ((copy = strdup(DEFAULT_MAILCAP_ENTRY)) == NULL)
- errx(1, "strdup");
-
- /* Our own entry won't error. */
- (void)parse_mailcap_line(copy);
- free(copy);
}
struct mailcap *
blob - 51e987db50d309bea75d1b0b472d9626b44d51ed
blob + de52a7d3e8da2b96e5fc3b13d4ab111b85282edb
--- mailcap.h
+++ mailcap.h
char *cmd;
char **cmd_argv;
int cmd_argc;
+
+#define MAILCAP_NEEDSTERMINAL 0x1
+#define MAILCAP_COPIOUSOUTPUT 0x2
int flags;
TAILQ_ENTRY(mailcap) mailcaps;
extern struct mailcaplist mailcaps;
void init_mailcap(void);
+void mailcap_parse(FILE *);
struct mailcap *mailcap_cmd_from_mimetype(char *, char *);
#endif