gitweb: More about how gitweb gets 'owner' of repository
[gitweb.git] / imap-send.c
index 905d09746aa36f18d873605518fbeaca25d17f73..1ec131092109aa3fbed3cd20f10b56a864584a94 100644 (file)
@@ -105,6 +105,19 @@ static void free_generic_messages( message_t * );
 
 static int nfsnprintf( char *buf, int blen, const char *fmt, ... );
 
+static int nfvasprintf(char **strp, const char *fmt, va_list ap)
+{
+       int len;
+       char tmp[8192];
+
+       len = vsnprintf(tmp, sizeof(tmp), fmt, ap);
+       if (len < 0)
+               die("Fatal: Out of memory\n");
+       if (len >= sizeof(tmp))
+               die("imap command overflow !\n");
+       *strp = xmemdupz(tmp, len);
+       return len;
+}
 
 static void arc4_init( void );
 static unsigned char arc4_getbyte( void );
@@ -459,7 +472,7 @@ v_issue_imap_cmd( imap_store_t *ctx, struct imap_cmd_cb *cb,
        if (socket_write( &imap->buf.sock, buf, bufl ) != bufl) {
                free( cmd->cmd );
                free( cmd );
-               if (cb && cb->data)
+               if (cb)
                        free( cb->data );
                return NULL;
        }
@@ -845,8 +858,7 @@ get_cmd_result( imap_store_t *ctx, struct imap_cmd *tcmd )
                  normal:
                        if (cmdp->cb.done)
                                cmdp->cb.done( ctx, cmdp, resp );
-                       if (cmdp->cb.data)
-                               free( cmdp->cb.data );
+                       free( cmdp->cb.data );
                        free( cmdp->cmd );
                        free( cmdp );
                        if (!tcmd || tcmd == cmdp)
@@ -1167,7 +1179,7 @@ read_message( FILE *f, msg_data_t *msg )
        } while (!feof(f));
 
        msg->len  = buf.len;
-       msg->data = strbuf_detach(&buf);
+       msg->data = strbuf_detach(&buf, NULL);
        return msg->len;
 }
 
@@ -1235,12 +1247,16 @@ static imap_server_conf_t server =
 static char *imap_folder;
 
 static int
-git_imap_config(const char *key, const char *val)
+git_imap_config(const char *key, const char *val, void *cb)
 {
        char imap_key[] = "imap.";
 
        if (strncmp( key, imap_key, sizeof imap_key - 1 ))
                return 0;
+
+       if (!val)
+               return config_error_nonbool(key);
+
        key += sizeof imap_key - 1;
 
        if (!strcmp( "folder", key )) {
@@ -1280,12 +1296,19 @@ main(int argc, char **argv)
        /* init the random number generator */
        arc4_init();
 
-       git_config( git_imap_config );
+       git_config(git_imap_config, NULL);
 
        if (!imap_folder) {
                fprintf( stderr, "no imap store specified\n" );
                return 1;
        }
+       if (!server.host) {
+               if (!server.tunnel) {
+                       fprintf( stderr, "no imap host specified\n" );
+                       return 1;
+               }
+               server.host = "tunnel";
+       }
 
        /* read the messages */
        if (!read_message( stdin, &all_msgs )) {