git-branch -D: make it work even when on a yet-to-be-born branch
[gitweb.git] / imap-send.c
index 8ed0f0aa6f4e4d2314d820f9e3a0b93f6e8595d5..a6a65680ee6daf062180d2580e83616cfff4cda4 100644 (file)
@@ -110,7 +110,6 @@ static char *next_arg( char ** );
 
 static void free_generic_messages( message_t * );
 
-static int nfvasprintf( char **str, const char *fmt, va_list va );
 static int nfsnprintf( char *buf, int blen, const char *fmt, ... );
 
 
@@ -273,7 +272,7 @@ buffer_gets( buffer_t * b, char **s )
                                n = b->bytes - start;
 
                                if (n)
-                                       memcpy( b->buf, b->buf + start, n );
+                                       memmove(b->buf, b->buf + start, n);
                                b->offset -= start;
                                b->bytes = n;
                                start = 0;
@@ -371,21 +370,6 @@ free_generic_messages( message_t *msgs )
        }
 }
 
-static int
-git_vasprintf( char **strp, const char *fmt, va_list ap )
-{
-       int len;
-       char tmp[1024];
-
-       if ((len = vsnprintf( tmp, sizeof(tmp), fmt, ap )) < 0 || !(*strp = xmalloc( len + 1 )))
-               return -1;
-       if (len >= (int)sizeof(tmp))
-               vsprintf( *strp, fmt, ap );
-       else
-               memcpy( *strp, tmp, len + 1 );
-       return len;
-}
-
 static int
 nfsnprintf( char *buf, int blen, const char *fmt, ... )
 {
@@ -399,15 +383,6 @@ nfsnprintf( char *buf, int blen, const char *fmt, ... )
        return ret;
 }
 
-static int
-nfvasprintf( char **str, const char *fmt, va_list va )
-{
-       int ret = git_vasprintf( str, fmt, va );
-       if (ret < 0)
-               die( "Fatal: Out of memory\n");
-       return ret;
-}
-
 static struct {
        unsigned char i, j, s[256];
 } rs;
@@ -1251,6 +1226,14 @@ split_msg( msg_data_t *all_msgs, msg_data_t *msg, int *ofs )
        if (msg->len < 5 || strncmp( data, "From ", 5 ))
                return 0;
 
+       p = strchr( data, '\n' );
+       if (p) {
+               p = &p[1];
+               msg->len -= p-data;
+               *ofs += p-data;
+               data = p;
+       }
+
        p = strstr( data, "\nFrom " );
        if (p)
                msg->len = &p[1] - data;