*/
void mutt_edit_file(const char *editor, const char *file)
{
- char cmd[STR_COMMAND];
+ struct Buffer *cmd = mutt_buffer_pool_get();
mutt_endwin();
- mutt_file_expand_fmt_quote(cmd, sizeof(cmd), editor, file);
- if (mutt_system(cmd) != 0)
+ mutt_buffer_file_expand_fmt_quote(cmd, editor, file);
+ if (mutt_system(mutt_b2s(cmd)) != 0)
{
- mutt_error(_("Error running \"%s\""), cmd);
+ mutt_error(_("Error running \"%s\""), mutt_b2s(cmd));
}
/* the terminal may have been resized while the editor owned it */
mutt_resize_screen();
keypad(stdscr, true);
clearok(stdscr, true);
+
+ mutt_buffer_pool_release(&cmd);
}
/**
rc = mutt_pager(banner, tempfile, do_color, info);
else
{
- char cmd[256];
+ struct Buffer *cmd = mutt_buffer_pool_get();
mutt_endwin();
- mutt_file_expand_fmt_quote(cmd, sizeof(cmd), C_Pager, tempfile);
- if (mutt_system(cmd) == -1)
+ mutt_buffer_file_expand_fmt_quote(cmd, C_Pager, tempfile);
+ if (mutt_system(mutt_b2s(cmd)) == -1)
{
- mutt_error(_("Error running \"%s\""), cmd);
+ mutt_error(_("Error running \"%s\""), mutt_b2s(cmd));
rc = -1;
}
else
rc = 0;
mutt_file_unlink(tempfile);
+ mutt_buffer_pool_release(&cmd);
}
return rc;
}
/**
- * mutt_file_expand_fmt_quote - Replace `%s` in a string with a filename
+ * mutt_buffer_file_expand_fmt_quote - Replace `%s` in a string with a filename
* @param dest Buffer for the result
- * @param destlen Length of buffer
* @param fmt printf-like format string
* @param src Filename to substitute
*
* This function also quotes the file to prevent shell problems.
*/
-void mutt_file_expand_fmt_quote(char *dest, size_t destlen, const char *fmt, const char *src)
+void mutt_buffer_file_expand_fmt_quote(struct Buffer *dest, const char *fmt, const char *src)
{
char tmp[PATH_MAX];
mutt_file_quote_filename(src, tmp, sizeof(tmp));
- mutt_file_expand_fmt(dest, destlen, fmt, tmp);
+ /* TODO: this will be fixed in the next commit */
+ mutt_file_expand_fmt(dest->data, dest->dsize, fmt, tmp);
+ mutt_buffer_fix_dptr(dest);
}
/**
int mutt_file_unlock(int fd);
void mutt_buffer_quote_filename(struct Buffer *buf, const char *filename);
+void mutt_buffer_file_expand_fmt_quote(struct Buffer *dest, const char *fmt, const char *src);
#endif /* MUTT_LIB_FILE_H */
FILE *fp = NULL;
struct Query *first = NULL;
struct Query *cur = NULL;
- char cmd[STR_COMMAND];
char *buf = NULL;
size_t buflen;
int dummy = 0;
char msg[256];
char *p = NULL;
pid_t pid;
+ struct Buffer *cmd = mutt_buffer_pool_get();
- mutt_file_expand_fmt_quote(cmd, sizeof(cmd), C_QueryCommand, s);
+ mutt_buffer_file_expand_fmt_quote(cmd, C_QueryCommand, s);
- pid = mutt_create_filter(cmd, NULL, &fp, NULL);
+ pid = mutt_create_filter(mutt_b2s(cmd), NULL, &fp, NULL);
if (pid < 0)
{
- mutt_debug(LL_DEBUG1, "unable to fork command: %s\n", cmd);
+ mutt_debug(LL_DEBUG1, "unable to fork command: %s\n", mutt_b2s(cmd));
+ mutt_buffer_pool_release(&cmd);
return 0;
}
+ mutt_buffer_pool_release(&cmd);
+
if (!quiet)
mutt_message(_("Waiting for response..."));
fgets(msg, sizeof(msg), fp);
static void run_mime_type_query(struct Body *att)
{
FILE *fp, *fp_err;
- char cmd[STR_COMMAND];
char *buf = NULL;
size_t buflen;
int dummy = 0;
pid_t pid;
+ struct Buffer *cmd = mutt_buffer_pool_get();
- mutt_file_expand_fmt_quote(cmd, sizeof(cmd), C_MimeTypeQueryCommand, att->filename);
+ mutt_buffer_file_expand_fmt_quote(cmd, C_MimeTypeQueryCommand, att->filename);
- pid = mutt_create_filter(cmd, NULL, &fp, &fp_err);
+ pid = mutt_create_filter(mutt_b2s(cmd), NULL, &fp, &fp_err);
if (pid < 0)
{
- mutt_error(_("Error running \"%s\""), cmd);
+ mutt_error(_("Error running \"%s\""), mutt_b2s(cmd));
+ mutt_buffer_pool_release(&cmd);
return;
}
+ mutt_buffer_pool_release(&cmd);
buf = mutt_file_read_line(buf, &buflen, fp, &dummy, 0);
if (buf)