Changes into src/editor directory:

* edit/editcmd.c:
  * ignore fscanf() result in edit_delete_macro()
  * ignore fscanf() result in edit_load_macro_cmd()
  * ignoring mc_chown() errors in edit_save_file()
  * handling system() call errors in edit_block_process_cmd()
 * edit/edit.c: handling read errors in edit_load_file_fast()

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
Slava Zanko 2010-04-30 15:00:44 +03:00
parent 35dae723ee
commit 5d79a90737
2 changed files with 40 additions and 14 deletions

View File

@ -328,6 +328,7 @@ edit_load_file_fast (WEdit * edit, const char *filename)
{ {
long buf, buf2; long buf, buf2;
int file = -1; int file = -1;
int ret=1;
edit->curs2 = edit->last_byte; edit->curs2 = edit->last_byte;
buf2 = edit->curs2 >> S_EDIT_BUF_SIZE; buf2 = edit->curs2 >> S_EDIT_BUF_SIZE;
edit->utf8 = 0; edit->utf8 = 0;
@ -343,20 +344,31 @@ edit_load_file_fast (WEdit * edit, const char *filename)
if (!edit->buffers2[buf2]) if (!edit->buffers2[buf2])
edit->buffers2[buf2] = g_malloc0 (EDIT_BUF_SIZE); edit->buffers2[buf2] = g_malloc0 (EDIT_BUF_SIZE);
mc_read (file, do
{
if (mc_read (file,
(char *) edit->buffers2[buf2] + EDIT_BUF_SIZE - (char *) edit->buffers2[buf2] + EDIT_BUF_SIZE -
(edit->curs2 & M_EDIT_BUF_SIZE), edit->curs2 & M_EDIT_BUF_SIZE); (edit->curs2 & M_EDIT_BUF_SIZE), edit->curs2 & M_EDIT_BUF_SIZE) < 0)
break;
for (buf = buf2 - 1; buf >= 0; buf--) for (buf = buf2 - 1; buf >= 0; buf--)
{ {
/* edit->buffers2[0] is already allocated */ /* edit->buffers2[0] is already allocated */
if (!edit->buffers2[buf]) if (!edit->buffers2[buf])
edit->buffers2[buf] = g_malloc0 (EDIT_BUF_SIZE); edit->buffers2[buf] = g_malloc0 (EDIT_BUF_SIZE);
mc_read (file, (char *) edit->buffers2[buf], EDIT_BUF_SIZE); if (mc_read (file, (char *) edit->buffers2[buf], EDIT_BUF_SIZE) < 0)
break;
}
ret = 0;
}
while (0);
if (ret) {
char *err_str = g_strdup_printf(_(" Error reading %s "), filename);
edit_error_dialog (_("Error"), err_str);
g_free(err_str);
} }
mc_close (file); mc_close (file);
return 0; return ret;
} }
/* detecting an error on save is easy: just check if every byte has been written. */ /* detecting an error on save is easy: just check if every byte has been written. */

View File

@ -273,9 +273,11 @@ edit_save_file (WEdit * edit, const char *filename)
} }
else else
savename = g_strdup (real_filename); savename = g_strdup (real_filename);
{
mc_chown (savename, edit->stat1.st_uid, edit->stat1.st_gid); int ret;
mc_chmod (savename, edit->stat1.st_mode); ret = mc_chown (savename, edit->stat1.st_uid, edit->stat1.st_gid);
ret = mc_chmod (savename, edit->stat1.st_mode);
}
if ((fd = if ((fd =
mc_open (savename, O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, edit->stat1.st_mode)) == -1) mc_open (savename, O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, edit->stat1.st_mode)) == -1)
@ -757,7 +759,10 @@ edit_delete_macro (WEdit * edit, int k)
n = 0; n = 0;
while (fscanf (f, "%lu %d, ", &macro[n].command, &macro[n].ch)) while (fscanf (f, "%lu %d, ", &macro[n].command, &macro[n].ch))
n++; n++;
fscanf (f, ";\n"); {
int ret;
ret = fscanf (f, ";\n");
}
if (s != k) if (s != k)
{ {
fprintf (g, ("key '%d 0': "), s); fprintf (g, ("key '%d 0': "), s);
@ -866,7 +871,10 @@ edit_load_macro_cmd (WEdit * edit, struct macro macro[], int *n, int k)
{ {
while (2 == fscanf (f, "%lu %d, ", &dummy.command, &dummy.ch)); while (2 == fscanf (f, "%lu %d, ", &dummy.command, &dummy.ch));
} }
fscanf (f, ";\n"); {
int ret;
ret = fscanf (f, ";\n");
}
if (s == k) if (s == k)
found = 1; found = 1;
} }
@ -2503,8 +2511,6 @@ edit_block_process_cmd (WEdit * edit, const char *shell_cmd, int block)
*/ */
tmp = g_strconcat (" ", home_dir, PATH_SEP_STR EDIT_DIR, shell_cmd, " ", quoted_name, tmp = g_strconcat (" ", home_dir, PATH_SEP_STR EDIT_DIR, shell_cmd, " ", quoted_name,
" ", home_dir, PATH_SEP_STR EDIT_BLOCK_FILE " /dev/null", (char *) NULL); " ", home_dir, PATH_SEP_STR EDIT_BLOCK_FILE " /dev/null", (char *) NULL);
system (tmp);
g_free (tmp);
} }
else else
{ {
@ -2515,9 +2521,15 @@ edit_block_process_cmd (WEdit * edit, const char *shell_cmd, int block)
*/ */
tmp = g_strconcat (" ", home_dir, PATH_SEP_STR EDIT_DIR, shell_cmd, " ", tmp = g_strconcat (" ", home_dir, PATH_SEP_STR EDIT_DIR, shell_cmd, " ",
quoted_name, (char *) NULL); quoted_name, (char *) NULL);
system (tmp);
g_free (tmp);
} }
if (system (tmp) == -1)
{
edit_error_dialog (_("Process block"),_("Error calling program"));
}
else
{
g_free (quoted_name); g_free (quoted_name);
close_error_pipe (D_NORMAL, NULL); close_error_pipe (D_NORMAL, NULL);
@ -2532,6 +2544,8 @@ edit_block_process_cmd (WEdit * edit, const char *shell_cmd, int block)
if (block_file != NULL) if (block_file != NULL)
fclose (block_file); fclose (block_file);
} }
}
g_free (tmp);
edit_block_process_cmd__EXIT: edit_block_process_cmd__EXIT:
g_free (b); g_free (b);