X-Git-Url: https://git.octo.it/?p=git.git;a=blobdiff_plain;f=imap-send.c;h=285ad29afb4c4126010ddc2f76963b4f8f1cce70;hp=1b38b3af676a2867c09d7eabe36956b87fa9478d;hb=HEAD;hpb=2e158bee7a33fac33c300f703396ee1ce1ad7a7d diff --git a/imap-send.c b/imap-send.c index 1b38b3af..285ad29a 100644 --- a/imap-send.c +++ b/imap-send.c @@ -335,12 +335,12 @@ next_arg( char **s ) char *ret; if (!s || !*s) - return 0; + return NULL; while (isspace( (unsigned char) **s )) (*s)++; if (!**s) { - *s = 0; - return 0; + *s = NULL; + return NULL; } if (**s == '"') { ++*s; @@ -355,7 +355,7 @@ next_arg( char **s ) if (**s) *(*s)++ = 0; if (!**s) - *s = 0; + *s = NULL; } return ret; } @@ -372,7 +372,7 @@ free_generic_messages( message_t *msgs ) } static int -vasprintf( char **strp, const char *fmt, va_list ap ) +git_vasprintf( char **strp, const char *fmt, va_list ap ) { int len; char tmp[1024]; @@ -402,7 +402,7 @@ nfsnprintf( char *buf, int blen, const char *fmt, ... ) static int nfvasprintf( char **str, const char *fmt, va_list va ) { - int ret = vasprintf( str, fmt, va ); + int ret = git_vasprintf( str, fmt, va ); if (ret < 0) die( "Fatal: Out of memory\n"); return ret; @@ -475,7 +475,7 @@ v_issue_imap_cmd( imap_store_t *ctx, struct imap_cmd_cb *cb, memset( &cmd->cb, 0, sizeof(cmd->cb) ); while (imap->literal_pending) - get_cmd_result( ctx, 0 ); + get_cmd_result( ctx, NULL ); bufl = nfsnprintf( buf, sizeof(buf), cmd->cb.data ? CAP(LITERALPLUS) ? "%d %s{%d+}\r\n" : "%d %s{%d}\r\n" : "%d %s\r\n", @@ -506,12 +506,12 @@ v_issue_imap_cmd( imap_store_t *ctx, struct imap_cmd_cb *cb, free( cmd ); return NULL; } - cmd->cb.data = 0; + cmd->cb.data = NULL; } else imap->literal_pending = 1; } else if (cmd->cb.cont) imap->literal_pending = 1; - cmd->next = 0; + cmd->next = NULL; *imap->in_progress_append = cmd; imap->in_progress_append = &cmd->next; imap->num_in_progress++; @@ -607,7 +607,7 @@ parse_imap_list_l( imap_t *imap, char **sp, list_t **curp, int level ) } *curp = cur = xmalloc( sizeof(*cur) ); curp = &cur->next; - cur->val = 0; /* for clean bail */ + cur->val = NULL; /* for clean bail */ if (*s == '(') { /* sublist */ s++; @@ -680,11 +680,11 @@ parse_imap_list_l( imap_t *imap, char **sp, list_t **curp, int level ) goto bail; } *sp = s; - *curp = 0; + *curp = NULL; return 0; bail: - *curp = 0; + *curp = NULL; return -1; } @@ -702,7 +702,7 @@ parse_imap_list( imap_t *imap, char **sp ) static list_t * parse_list( char **sp ) { - return parse_imap_list( 0, sp ); + return parse_imap_list( NULL, sp ); } static void @@ -789,7 +789,7 @@ get_cmd_result( imap_store_t *ctx, struct imap_cmd *tcmd ) imap->ns_shared = parse_list( &cmd ); } else if (!strcmp( "OK", arg ) || !strcmp( "BAD", arg ) || !strcmp( "NO", arg ) || !strcmp( "BYE", arg )) { - if ((resp = parse_response_code( ctx, 0, cmd )) != RESP_OK) + if ((resp = parse_response_code( ctx, NULL, cmd )) != RESP_OK) return resp; } else if (!strcmp( "CAPABILITY", arg )) parse_capability( imap, cmd ); @@ -813,7 +813,7 @@ get_cmd_result( imap_store_t *ctx, struct imap_cmd *tcmd ) if (cmdp->cb.data) { n = socket_write( &imap->buf.sock, cmdp->cb.data, cmdp->cb.dlen ); free( cmdp->cb.data ); - cmdp->cb.data = 0; + cmdp->cb.data = NULL; if (n != (int)cmdp->cb.dlen) return RESP_BAD; } else if (cmdp->cb.cont) { @@ -849,7 +849,7 @@ get_cmd_result( imap_store_t *ctx, struct imap_cmd *tcmd ) if (!strcmp( "NO", arg )) { if (cmdp->cb.create && cmd && (cmdp->cb.trycreate || !memcmp( cmd, "[TRYCREATE]", 11 ))) { /* SELECT, APPEND or UID COPY */ p = strchr( cmdp->cmd, '"' ); - if (!issue_imap_cmd( ctx, 0, "CREATE \"%.*s\"", strchr( p + 1, '"' ) - p + 1, p )) { + if (!issue_imap_cmd( ctx, NULL, "CREATE \"%.*s\"", strchr( p + 1, '"' ) - p + 1, p )) { resp = RESP_BAD; goto normal; } @@ -898,7 +898,7 @@ imap_close_server( imap_store_t *ictx ) imap_t *imap = ictx->imap; if (imap->buf.sock.fd != -1) { - imap_exec( ictx, 0, "LOGOUT" ); + imap_exec( ictx, NULL, "LOGOUT" ); close( imap->buf.sock.fd ); } free_list( imap->ns_personal ); @@ -924,6 +924,7 @@ imap_open_store( imap_server_conf_t *srvc ) struct hostent *he; struct sockaddr_in addr; int s, a[2], preauth; + pid_t pid; ctx = xcalloc( sizeof(*ctx), 1 ); @@ -941,7 +942,10 @@ imap_open_store( imap_server_conf_t *srvc ) exit( 1 ); } - if (fork() == 0) { + pid = fork(); + if (pid < 0) + _exit( 127 ); + if (!pid) { if (dup2( a[0], 0 ) == -1 || dup2( a[0], 1 ) == -1) _exit( 127 ); close( a[0] ); @@ -1001,8 +1005,8 @@ imap_open_store( imap_server_conf_t *srvc ) fprintf( stderr, "IMAP error: unknown greeting response\n" ); goto bail; } - parse_response_code( ctx, 0, rsp ); - if (!imap->caps && imap_exec( ctx, 0, "CAPABILITY" ) != RESP_OK) + parse_response_code( ctx, NULL, rsp ); + if (!imap->caps && imap_exec( ctx, NULL, "CAPABILITY" ) != RESP_OK) goto bail; if (!preauth) { @@ -1035,7 +1039,7 @@ imap_open_store( imap_server_conf_t *srvc ) goto bail; } warn( "*** IMAP Warning *** Password is being sent in the clear\n" ); - if (imap_exec( ctx, 0, "LOGIN \"%s\" \"%s\"", srvc->user, srvc->pass ) != RESP_OK) { + if (imap_exec( ctx, NULL, "LOGIN \"%s\" \"%s\"", srvc->user, srvc->pass ) != RESP_OK) { fprintf( stderr, "IMAP error: LOGIN failed\n" ); goto bail; } @@ -1047,7 +1051,7 @@ imap_open_store( imap_server_conf_t *srvc ) bail: imap_close_store( &ctx->gen ); - return 0; + return NULL; } static int @@ -1202,6 +1206,7 @@ read_message( FILE *f, msg_data_t *msg ) p = xrealloc(msg->data, len+1); if (!p) break; + msg->data = p; } r = fread( &msg->data[msg->len], 1, len - msg->len, f ); if (r <= 0) @@ -1310,7 +1315,7 @@ int main(int argc, char **argv) { msg_data_t all_msgs, msg; - store_t *ctx = 0; + store_t *ctx = NULL; int uid = 0; int ofs = 0; int r; @@ -1332,6 +1337,12 @@ main(int argc, char **argv) return 1; } + total = count_messages( &all_msgs ); + if (!total) { + fprintf(stderr,"no messages to send\n"); + return 1; + } + /* write it to the imap server */ ctx = imap_open_store( &server ); if (!ctx) { @@ -1339,7 +1350,6 @@ main(int argc, char **argv) return 1; } - total = count_messages( &all_msgs ); fprintf( stderr, "sending %d message%s\n", total, (total!=1)?"s":"" ); ctx->name = imap_folder; while (1) {