#include <string.h>
#include <ctype.h>
-static FILE *cmitmsg, *patchfile, *filelist;
+static FILE *cmitmsg, *patchfile;
static char line[1000];
+static char date[1000];
static char name[1000];
static char email[1000];
static char subject[1000];
return 1;
}
+static void handle_date(char *line)
+{
+ strcpy(date, line);
+}
+
static void handle_subject(char *line)
{
strcpy(subject, line);
cont = 0;
return;
}
+ if (!memcmp(line, "Date:", 5) && isspace(line[5])) {
+ handle_date(line+6);
+ cont = 0;
+ return;
+ }
if (!memcmp(line, "Subject:", 8) && isspace(line[8])) {
handle_subject(line+9);
cont = 1;
if (isspace(*line)) {
switch (cont) {
case 0:
- fprintf(stderr, "I don't do 'From:' line continuations\n");
+ fprintf(stderr, "I don't do 'Date:' or 'From:' line continuations\n");
break;
case 1:
add_subject_line(line);
}
}
-/*
- * Hacky hacky. This depends not only on -p1, but on
- * filenames not having some special characters in them,
- * like tilde.
- */
-static void show_filename(char *line)
-{
- int len;
- char *name = strchr(line, '/');
-
- if (!name || !isspace(*line))
- return;
- name++;
- len = 0;
- for (;;) {
- unsigned char c = name[len];
- switch (c) {
- default:
- len++;
- continue;
-
- case 0: case ' ':
- case '\t': case '\n':
- break;
-
- /* patch tends to special-case these things.. */
- case '~':
- break;
- }
- break;
- }
- /* remove ".orig" from the end - common patch behaviour */
- if (len > 5 && !memcmp(name+len-5, ".orig", 5))
- len -=5;
- if (!len)
- return;
- fprintf(filelist, "%.*s\n", len, name);
-}
-
static void handle_rest(void)
{
char *sub = cleanup_subject(subject);
cleanup_space(name);
+ cleanup_space(date);
cleanup_space(email);
cleanup_space(sub);
- printf("Author: %s\nEmail: %s\nSubject: %s\n\n", name, email, sub);
+ printf("Author: %s\nEmail: %s\nSubject: %s\nDate: %s\n\n", name, email, sub, date);
FILE *out = cmitmsg;
do {
- /* Track filename information from the patch.. */
- if (!memcmp("---", line, 3)) {
+ if (!memcmp("diff -", line, 6) ||
+ !memcmp("---", line, 3))
out = patchfile;
- show_filename(line+3);
- }
-
- if (!memcmp("+++", line, 3))
- show_filename(line+3);
fputs(line, out);
} while (fgets(line, sizeof(line), stdin) != NULL);
static void usage(void)
{
- fprintf(stderr, "mailinfo msg-file path-file filelist-file < email\n");
+ fprintf(stderr, "mailinfo msg-file path-file < email\n");
exit(1);
}
int main(int argc, char ** argv)
{
- if (argc != 4)
+ if (argc != 3)
usage();
cmitmsg = fopen(argv[1], "w");
if (!cmitmsg) {
perror(argv[2]);
exit(1);
}
- filelist = fopen(argv[3], "w");
- if (!filelist) {
- perror(argv[3]);
- exit(1);
- }
while (fgets(line, sizeof(line), stdin) != NULL) {
int len = eatspace(line);
if (!len) {