static char *next_arg(char **);
struct imap_server_conf {
- const char *name;
char *tunnel;
char *host;
int port;
{
struct imap_server_conf *cfg = cb;
- if (!strcmp("imap.sslverify", var))
+ if (!strcmp("imap.sslverify", var)) {
cfg->ssl_verify = git_config_bool(var, val);
- else if (!strcmp("imap.preformattedhtml", var))
+ } else if (!strcmp("imap.preformattedhtml", var)) {
cfg->use_html = git_config_bool(var, val);
- else if (!strcmp("imap.folder", var))
+ } else if (!strcmp("imap.folder", var)) {
+ FREE_AND_NULL(cfg->folder);
return git_config_string(&cfg->folder, var, val);
- else if (!strcmp("imap.user", var))
+ } else if (!strcmp("imap.user", var)) {
+ FREE_AND_NULL(cfg->folder);
return git_config_string(&cfg->user, var, val);
- else if (!strcmp("imap.pass", var))
+ } else if (!strcmp("imap.pass", var)) {
+ FREE_AND_NULL(cfg->folder);
return git_config_string(&cfg->pass, var, val);
- else if (!strcmp("imap.tunnel", var))
+ } else if (!strcmp("imap.tunnel", var)) {
+ FREE_AND_NULL(cfg->folder);
return git_config_string(&cfg->tunnel, var, val);
- else if (!strcmp("imap.authmethod", var))
+ } else if (!strcmp("imap.authmethod", var)) {
+ FREE_AND_NULL(cfg->folder);
return git_config_string(&cfg->auth_method, var, val);
- else if (!strcmp("imap.port", var))
+ } else if (!strcmp("imap.port", var)) {
cfg->port = git_config_int(var, val, ctx->kvi);
- else if (!strcmp("imap.host", var)) {
+ } else if (!strcmp("imap.host", var)) {
if (!val) {
return config_error_nonbool(var);
} else {
val += 2;
cfg->host = xstrdup(val);
}
- } else
+ } else {
return git_default_config(var, val, ctx, cb);
+ }
return 0;
}
struct strbuf all_msgs = STRBUF_INIT;
int total;
int nongit_ok;
+ int ret;
setup_git_directory_gently(&nongit_ok);
git_config(git_imap_config, &server);
if (!server.folder) {
fprintf(stderr, "no imap store specified\n");
- return 1;
+ ret = 1;
+ goto out;
}
if (!server.host) {
if (!server.tunnel) {
fprintf(stderr, "no imap host specified\n");
- return 1;
+ ret = 1;
+ goto out;
}
- server.host = "tunnel";
+ server.host = xstrdup("tunnel");
}
/* read the messages */
if (strbuf_read(&all_msgs, 0, 0) < 0) {
error_errno(_("could not read from stdin"));
- return 1;
+ ret = 1;
+ goto out;
}
if (all_msgs.len == 0) {
fprintf(stderr, "nothing to send\n");
- return 1;
+ ret = 1;
+ goto out;
}
total = count_messages(&all_msgs);
if (!total) {
fprintf(stderr, "no messages to send\n");
- return 1;
+ ret = 1;
+ goto out;
}
/* write it to the imap server */
if (server.tunnel)
- return append_msgs_to_imap(&server, &all_msgs, total);
-
+ ret = append_msgs_to_imap(&server, &all_msgs, total);
#ifdef USE_CURL_FOR_IMAP_SEND
- if (use_curl)
- return curl_append_msgs_to_imap(&server, &all_msgs, total);
+ else if (use_curl)
+ ret = curl_append_msgs_to_imap(&server, &all_msgs, total);
#endif
-
- return append_msgs_to_imap(&server, &all_msgs, total);
+ else
+ ret = append_msgs_to_imap(&server, &all_msgs, total);
+
+out:
+ free(server.tunnel);
+ free(server.host);
+ free(server.folder);
+ free(server.user);
+ free(server.pass);
+ free(server.auth_method);
+ return ret;
}