From bce2ba99e926100b454494d1664440187ab6b68d Mon Sep 17 00:00:00 2001 From: "Andrew V. Samoilov" Date: Wed, 18 Dec 2002 20:04:39 +0000 Subject: [PATCH] * edit.h (edit_save_mode_t): New enum for file saving mode. * editcmd.c (): Use edit_save_mode_t. (pipe_mail): Quote to, subject and cc with name_quote(). * edit.c (edit_get_filter): Use quoted filename. (edit_get_write_filter): Use quoted writename. (edit_push_action): Use g_realloc(). --- edit/ChangeLog | 9 +++++++++ edit/edit.c | 21 ++++++++++++--------- edit/edit.h | 10 +++++++++- edit/editcmd.c | 28 ++++++++++++++++++---------- 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/edit/ChangeLog b/edit/ChangeLog index 31386c3a1..e37c42446 100644 --- a/edit/ChangeLog +++ b/edit/ChangeLog @@ -1,3 +1,12 @@ +2002-12-18 Andrew V. Samoilov + + * edit.h (edit_save_mode_t): New enum for file saving mode. + * editcmd.c (): Use edit_save_mode_t. + (pipe_mail): Quote to, subject and cc with name_quote(). + * edit.c (edit_get_filter): Use quoted filename. + (edit_get_write_filter): Use quoted writename. + (edit_push_action): Use g_realloc(). + 2002-12-16 Pavel Roskin * editcmd.c (edit_goto_cmd): Add support for negative line diff --git a/edit/edit.c b/edit/edit.c index db3c99471..d4e77470b 100644 --- a/edit/edit.c +++ b/edit/edit.c @@ -48,7 +48,7 @@ int option_fill_tabs_with_spaces = 0; int option_return_does_auto_indent = 1; int option_backspace_through_tabs = 0; int option_fake_half_tabs = 1; -int option_save_mode = 0; +int option_save_mode = EDIT_QUICK_SAVE; int option_save_position = 1; int option_backup_ext_int = -1; int option_max_undo = 32768; @@ -218,26 +218,31 @@ static char * edit_get_filter (const char *filename) { int i, l; - char *p; + char *p, *quoted_name; i = edit_find_filter (filename); if (i < 0) return 0; - l = strlen (filename); + quoted_name = name_quote (filename, 0); + l = strlen (quoted_name); p = g_malloc (strlen (all_filters[i].read) + l + 2); - sprintf (p, all_filters[i].read, filename); + sprintf (p, all_filters[i].read, quoted_name); + g_free (quoted_name); return p; } -char *edit_get_write_filter (char *writename, const char *filename) +char * +edit_get_write_filter (const char *write_name, const char *filename) { int i, l; - char *p; + char *p, *writename; i = edit_find_filter (filename); if (i < 0) return 0; + writename = name_quote (write_name, 0); l = strlen (writename); p = g_malloc (strlen (all_filters[i].write) + l + 2); sprintf (p, all_filters[i].write, writename); + g_free (writename); return p; } @@ -695,10 +700,8 @@ void edit_push_action (WEdit * edit, long c,...) if (option_max_undo < 256) option_max_undo = 256; if (edit->stack_size < option_max_undo) { - t = g_malloc ((edit->stack_size * 2 + 10) * sizeof (long)); + t = g_realloc (edit->undo_stack, (edit->stack_size * 2 + 10) * sizeof (long)); if (t) { - memcpy (t, edit->undo_stack, sizeof (long) * edit->stack_size); - g_free (edit->undo_stack); edit->undo_stack = t; edit->stack_size <<= 1; edit->stack_size_mask = edit->stack_size - 1; diff --git a/edit/edit.h b/edit/edit.h index ecff76210..ee0b3c8a0 100644 --- a/edit/edit.h +++ b/edit/edit.h @@ -175,7 +175,7 @@ void edit_push_key_press (WEdit * edit); void edit_insert_ahead (WEdit * edit, int c); int edit_save_file (WEdit * edit, const char *filename); long edit_write_stream (WEdit * edit, FILE * f); -char *edit_get_write_filter (char *writename, const char *filename); +char *edit_get_write_filter (const char *writename, const char *filename); int edit_save_cmd (WEdit * edit); int edit_save_confirm_cmd (WEdit * edit); int edit_save_as_cmd (WEdit * edit); @@ -300,11 +300,19 @@ extern int option_fill_tabs_with_spaces; extern int option_return_does_auto_indent; extern int option_backspace_through_tabs; extern int option_fake_half_tabs; + +typedef enum { + EDIT_QUICK_SAVE = 0, + EDIT_SAFE_SAVE, + EDIT_DO_BACKUP +} edit_save_mode_t; + extern int option_save_mode; extern int option_save_position; extern int option_backup_ext_int; extern int option_max_undo; extern int option_syntax_highlighting; +extern int editor_option_check_nl_at_eof; extern int option_edit_right_extreme; extern int option_edit_left_extreme; diff --git a/edit/editcmd.c b/edit/editcmd.c index 0b7425356..1a8b5527b 100644 --- a/edit/editcmd.c +++ b/edit/editcmd.c @@ -214,13 +214,13 @@ edit_save_file (WEdit *edit, const char *filename) * The file does not exists yet, so no safe save or * backup are necessary. */ - this_save_mode = 0; + this_save_mode = EDIT_QUICK_SAVE; } else { mc_close (fd); this_save_mode = option_save_mode; } - if (this_save_mode > 0) { + if (this_save_mode != EDIT_QUICK_SAVE) { char *savedir, *slashpos, *saveprefix; slashpos = strrchr (filename, PATH_SEP); if (slashpos) { @@ -252,7 +252,7 @@ edit_save_file (WEdit *edit, const char *filename) goto error_save; /* pipe save */ - if ((p = (char *) edit_get_write_filter (savename, filename))) { + if ((p = edit_get_write_filter (savename, filename))) { FILE *file; mc_close (fd); @@ -326,19 +326,21 @@ edit_save_file (WEdit *edit, const char *filename) if (filelen != edit->last_byte) goto error_save; - if (this_save_mode == 2) + if (this_save_mode == EDIT_DO_BACKUP) if (mc_rename (filename, catstrs (filename, option_backup_ext, 0)) == -1) goto error_save; - if (this_save_mode > 0) + if (this_save_mode != EDIT_QUICK_SAVE) if (mc_rename (savename, filename) == -1) goto error_save; - if (savename) - g_free (savename); + g_free (savename); return 1; error_save: - if (savename) - g_free (savename); +/* FIXME: Is this safe ? + * if (this_save_mode != EDIT_QUICK_SAVE) + * mc_unlink (savename); + */ + g_free (savename); return 0; } @@ -2435,7 +2437,13 @@ static void pipe_mail (WEdit *edit, char *to, char *subject, char *cc) FILE *p = 0; char *s; - s = g_strdup_printf ("mail -s \"%s\" -c \"%s\" \"%s\"", subject, cc, to); + to = name_quote (to, 0); + subject = name_quote (subject, 0); + cc = name_quote (cc, 0); + s = g_strdup_printf ("mail -s %s -c %s %s", subject, cc, to); + g_free (to); + g_free (subject); + g_free (cc); if (s) { p = popen (s, "w");