}
}
+void mutt_buffer_quote_filename (BUFFER *d, const char *f)
+{
+ mutt_buffer_clear (d);
+
+ if (!f)
+ return;
+
+ mutt_buffer_addch (d, '\'');
+
+ for (; *f; f++)
+ {
+ if (*f == '\'' || *f == '`')
+ {
+ mutt_buffer_addch (d, '\'');
+ mutt_buffer_addch (d, '\\');
+ mutt_buffer_addch (d, *f);
+ mutt_buffer_addch (d, '\'');
+ }
+ else
+ mutt_buffer_addch (d, *f);
+ }
+
+ mutt_buffer_addch (d, '\'');
+}
+
void mutt_expand_file_fmt (char *dest, size_t destlen, const char *fmt, const char *src)
{
char tmp[LONG_STRING];
static int invoke_dotlock (const char *path, int dummy, int flags, int retry)
{
- char cmd[LONG_STRING + _POSIX_PATH_MAX];
- char f[SHORT_STRING + _POSIX_PATH_MAX];
+ BUFFER *cmd = NULL;
+ BUFFER *f = NULL;
char r[SHORT_STRING];
+ int rc;
+
+ cmd = mutt_buffer_pool_get ();
+ f = mutt_buffer_pool_get ();
if (flags & DL_FL_RETRY)
snprintf (r, sizeof (r), "-r %d ", retry ? MAXLOCKATTEMPT : 0);
- mutt_quote_filename (f, sizeof (f), path);
+ mutt_buffer_quote_filename (f, path);
+
+ mutt_buffer_printf (cmd,
+ "%s %s%s%s%s%s%s%s",
+ NONULL (MuttDotlock),
+ flags & DL_FL_TRY ? "-t " : "",
+ flags & DL_FL_UNLOCK ? "-u " : "",
+ flags & DL_FL_USEPRIV ? "-p " : "",
+ flags & DL_FL_FORCE ? "-f " : "",
+ flags & DL_FL_UNLINK ? "-d " : "",
+ flags & DL_FL_RETRY ? r : "",
+ mutt_b2s (f));
- snprintf (cmd, sizeof (cmd),
- "%s %s%s%s%s%s%s%s",
- NONULL (MuttDotlock),
- flags & DL_FL_TRY ? "-t " : "",
- flags & DL_FL_UNLOCK ? "-u " : "",
- flags & DL_FL_USEPRIV ? "-p " : "",
- flags & DL_FL_FORCE ? "-f " : "",
- flags & DL_FL_UNLINK ? "-d " : "",
- flags & DL_FL_RETRY ? r : "",
- f);
+ rc = mutt_system (mutt_b2s (cmd));
- return mutt_system (cmd);
+ mutt_buffer_pool_release (&cmd);
+ mutt_buffer_pool_release (&f);
+
+ return rc;
}
#else
void pgp_invoke_import (const char *fname)
{
- char _fname[_POSIX_PATH_MAX + SHORT_STRING];
+ BUFFER *fnamebuf = NULL;
char cmd[HUGE_STRING];
struct pgp_command_context cctx;
+ fnamebuf = mutt_buffer_pool_get ();
+
memset (&cctx, 0, sizeof (cctx));
- mutt_quote_filename (_fname, sizeof (_fname), fname);
- cctx.fname = _fname;
+ mutt_buffer_quote_filename (fnamebuf, fname);
+ cctx.fname = mutt_b2s (fnamebuf);
if (PgpSignAs && *PgpSignAs)
cctx.signas = PgpSignAs;
else
mutt_pgp_command (cmd, sizeof (cmd), &cctx, PgpImportCommand);
mutt_system (cmd);
+
+ mutt_buffer_pool_release (&fnamebuf);
}
void pgp_invoke_getkeys (ADDRESS *addr)
{
- char buff[LONG_STRING];
+ BUFFER *buff = NULL;
char tmp[LONG_STRING];
char cmd[HUGE_STRING];
int devnull;
if (!PgpGetkeysCommand) return;
+ buff = mutt_buffer_pool_get ();
memset (&cctx, 0, sizeof (cctx));
personal = addr->personal;
*tmp = '\0';
mutt_addrlist_to_local (addr);
rfc822_write_address_single (tmp, sizeof (tmp), addr, 0);
- mutt_quote_filename (buff, sizeof (buff), tmp);
+ mutt_buffer_quote_filename (buff, tmp);
addr->personal = personal;
- cctx.ids = buff;
+ cctx.ids = mutt_b2s (buff);
mutt_pgp_command (cmd, sizeof (cmd), &cctx, PgpGetkeysCommand);
if (!isendwin ()) mutt_clear_error ();
close (devnull);
+
+ mutt_buffer_pool_release (&buff);
}
pid_t pgp_invoke_export (FILE **pgpin, FILE **pgpout, FILE **pgperr,
pgp_ring_t keyring, LIST *hints)
{
BUFFER *uids;
- char quoted[HUGE_STRING];
+ BUFFER *quoted;
pid_t rc;
uids = mutt_buffer_pool_get ();
+ quoted = mutt_buffer_pool_get ();
for (; hints; hints = hints->next)
{
- mutt_quote_filename (quoted, sizeof (quoted), (char *) hints->data);
- mutt_buffer_addstr (uids, quoted);
+ mutt_buffer_quote_filename (quoted, (char *) hints->data);
+ mutt_buffer_addstr (uids, mutt_b2s (quoted));
if (hints->next)
mutt_buffer_addch (uids, ' ');
}
PgpListPubringCommand);
mutt_buffer_pool_release (&uids);
+ mutt_buffer_pool_release ("ed);
return rc;
}
void mutt_break_thread (HEADER *);
void mutt_browser_cleanup (void);
void mutt_buffer_concat_path (BUFFER *, const char *, const char *);
+void mutt_buffer_quote_filename (BUFFER *, const char *);
void mutt_canonical_charset (char *, size_t, const char *);
void mutt_check_stats(void);
int mutt_count_body_parts (CONTEXT *, HEADER *);
int mix_send_message (LIST *chain, const char *tempfile)
{
BUFFER *cmd;
- char cd_quoted[STRING];
+ BUFFER *cd_quoted;
int i;
cmd = mutt_buffer_pool_get ();
+ cd_quoted = mutt_buffer_pool_get ();
+
mutt_buffer_printf (cmd, "cat %s | %s -m ", tempfile, Mixmaster);
for (i = 0; chain; chain = chain->next, i = 1)
{
mutt_buffer_addstr (cmd, i ? "," : " -l ");
- mutt_quote_filename (cd_quoted, sizeof (cd_quoted), (char *) chain->data);
- mutt_buffer_addstr (cmd, cd_quoted);
+ mutt_buffer_quote_filename (cd_quoted, (char *) chain->data);
+ mutt_buffer_addstr (cmd, mutt_b2s (cd_quoted));
}
if (!option (OPTNOCURSES))
}
mutt_buffer_pool_release (&cmd);
+ mutt_buffer_pool_release (&cd_quoted);
unlink (tempfile);
return i;
}
int rfc1524_expand_command (BODY *a, const char *filename, const char *_type,
char *command, int clen)
{
- int x=0,y=0;
+ int x=0;
int needspipe = TRUE;
- char buf[LONG_STRING];
+ BUFFER *buf = NULL;
+ BUFFER *quoted = NULL;
char type[LONG_STRING];
+ buf = mutt_buffer_pool_get ();
+ quoted = mutt_buffer_pool_get ();
+
strfcpy (type, _type, sizeof (type));
if (option (OPTMAILCAPSANITIZE))
mutt_sanitize_filename (type, 0);
- while (x < clen - 1 && command[x] && y < sizeof (buf) - 1)
+ while (x < clen - 1 && command[x])
{
if (command[x] == '\\')
{
x++;
- buf[y++] = command[x++];
+ mutt_buffer_addch (buf, command[x++]);
}
else if (command[x] == '%')
{
if (option (OPTMAILCAPSANITIZE))
mutt_sanitize_filename (pvalue, 0);
- y += mutt_quote_filename (buf + y, sizeof (buf) - y, pvalue);
+ mutt_buffer_quote_filename (quoted, pvalue);
+ mutt_buffer_addstr (buf, mutt_b2s (quoted));
}
else if (command[x] == 's' && filename != NULL)
{
- y += mutt_quote_filename (buf + y, sizeof (buf) - y, filename);
+ mutt_buffer_quote_filename (quoted, filename);
+ mutt_buffer_addstr (buf, mutt_b2s (quoted));
needspipe = FALSE;
}
else if (command[x] == 't')
{
- y += mutt_quote_filename (buf + y, sizeof (buf) - y, type);
+ mutt_buffer_quote_filename (quoted, type);
+ mutt_buffer_addstr (buf, mutt_b2s (quoted));
}
x++;
}
else
- buf[y++] = command[x++];
+ mutt_buffer_addch (buf, command[x++]);
}
- buf[y] = '\0';
- strfcpy (command, buf, clen);
+ strfcpy (command, mutt_b2s (buf), clen);
+
+ mutt_buffer_pool_release (&buf);
+ mutt_buffer_pool_release ("ed);
return needspipe;
}
{
if (!optional)
{
- char path[_POSIX_PATH_MAX];
- char buf1[LONG_STRING], buf2[LONG_STRING];
+ BUFFER *path, *buf1, *buf2;
struct stat sb;
- strfcpy (path, NONULL (SmimeCALocation), sizeof (path));
- mutt_expand_path (path, sizeof (path));
- mutt_quote_filename (buf1, sizeof (buf1), path);
+ path = mutt_buffer_pool_get ();
+ buf1 = mutt_buffer_pool_get ();
+ buf2 = mutt_buffer_pool_get ();
- if (stat (path, &sb) != 0 || !S_ISDIR (sb.st_mode))
- snprintf (buf2, sizeof (buf2), "-CAfile %s", buf1);
+ mutt_buffer_strcpy (path, NONULL (SmimeCALocation));
+ mutt_buffer_expand_path (path);
+ mutt_buffer_quote_filename (buf1, mutt_b2s (path));
+
+ if (stat (mutt_b2s (path), &sb) != 0 ||
+ !S_ISDIR (sb.st_mode))
+ mutt_buffer_printf (buf2, "-CAfile %s", mutt_b2s (buf1));
else
- snprintf (buf2, sizeof (buf2), "-CApath %s", buf1);
+ mutt_buffer_printf (buf2, "-CApath %s", mutt_b2s (buf1));
snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, buf2);
+ snprintf (dest, destlen, fmt, mutt_b2s (buf2));
+
+ mutt_buffer_pool_release (&path);
+ mutt_buffer_pool_release (&buf1);
+ mutt_buffer_pool_release (&buf2);
}
else if (!SmimeCALocation)
optional = 0;