Avoid misleading success message on error
[git.git] / mailinfo.c
index de105ac..9f95f37 100644 (file)
@@ -8,12 +8,9 @@
 #include <string.h>
 #include <ctype.h>
 #include <iconv.h>
+#include "git-compat-util.h"
 #include "cache.h"
 
-#ifdef NO_STRCASESTR
-extern char *gitstrcasestr(const char *haystack, const char *needle);
-#endif
-
 static FILE *cmitmsg, *patchfile;
 
 static int keep_subject = 0;
@@ -43,13 +40,43 @@ static char *sanity_check(char *name, char *email)
        return name;
 }
 
+static int bogus_from(char *line)
+{
+       /* John Doe <johndoe> */
+       char *bra, *ket, *dst, *cp;
+
+       /* This is fallback, so do not bother if we already have an
+        * e-mail address.
+        */ 
+       if (*email)
+               return 0;
+
+       bra = strchr(line, '<');
+       if (!bra)
+               return 0;
+       ket = strchr(bra, '>');
+       if (!ket)
+               return 0;
+
+       for (dst = email, cp = bra+1; cp < ket; )
+               *dst++ = *cp++;
+       *dst = 0;
+       for (cp = line; isspace(*cp); cp++)
+               ;
+       for (bra--; isspace(*bra); bra--)
+               *bra = 0;
+       cp = sanity_check(cp, email);
+       strcpy(name, cp);
+       return 1;
+}
+
 static int handle_from(char *line)
 {
        char *at = strchr(line, '@');
        char *dst;
 
        if (!at)
-               return 0;
+               return bogus_from(line);
 
        /*
         * If we already have one email, don't take any confusing lines
@@ -717,7 +744,7 @@ static void handle_body(void)
 }
 
 static const char mailinfo_usage[] =
-       "git-mailinfo [-k] [-u] msg patch <mail >info";
+       "git-mailinfo [-k] [-u | --encoding=<encoding>] msg patch <mail >info";
 
 int main(int argc, char **argv)
 {
@@ -731,8 +758,8 @@ int main(int argc, char **argv)
                        keep_subject = 1;
                else if (!strcmp(argv[1], "-u"))
                        metainfo_charset = git_commit_encoding;
-               else if (!strncmp(argv[1], "-u=", 3))
-                       metainfo_charset = argv[1] + 3;
+               else if (!strncmp(argv[1], "--encoding=", 11))
+                       metainfo_charset = argv[1] + 11;
                else
                        usage(mailinfo_usage);
                argc--; argv++;