tweak write_file() to remove the assumption that the file always ends in

a magicline, and remove a bit of apparently unneeded logic from
read_file()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3083 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
master
David Lawrence Ramsey 2005-11-04 05:44:01 +00:00
parent cf0efaab5d
commit 306049666a
2 changed files with 42 additions and 29 deletions

View File

@ -38,14 +38,18 @@ CVS code -
file help.c; changes to help_init(), help_line_len(), and file help.c; changes to help_init(), help_line_len(), and
do_help() (all moved to help.c). (DLR) do_help() (all moved to help.c). (DLR)
- Tweak a few functions to remove the assumption that the file - Tweak a few functions to remove the assumption that the file
always ends in a magicline. Changes to do_cut_till_end() and always ends in a magicline. Changes to do_cut_till_end(),
do_wordlinechar_count(). (DLR) write_file(), and do_wordlinechar_count(). (DLR)
- Tweak a few functions to rely on fileage and filebot instead - Tweak a few functions to rely on fileage and filebot instead
of NULL for their checks to detect the top or bottom of the of NULL for their checks to detect the top or bottom of the
file. Changes to cut_line(), cut_to_eol(), do_page_up(), file. Changes to cut_line(), cut_to_eol(), do_page_up(),
do_page_down(), do_para_end(), do_next_word(), do_prev_word(), do_page_down(), do_para_end(), do_next_word(), do_prev_word(),
do_up(), do_down(), do_scroll_down(), do_right(), do_mouse(), do_up(), do_down(), do_scroll_down(), do_right(), do_mouse(),
do_gotolinecolumn(), do_delete(), and find_paragraph(). (DLR) do_gotolinecolumn(), do_delete(), and find_paragraph(). (DLR)
- files.c:
read_file()
- Remove apparently unneeded logic to handle a case where
current is NULL, since it shouldn't be NULL there. (DLR)
- nano.h: - nano.h:
- Readd MIN_EDITOR_COLS #define. (DLR) - Readd MIN_EDITOR_COLS #define. (DLR)
- rcfile.c: - rcfile.c:

View File

@ -449,18 +449,12 @@ void read_file(FILE *f, const char *filename)
open_buffer(""); open_buffer("");
/* Did we try to insert a file of zero bytes? */ /* Did we try to insert a file of zero bytes? */
if (num_lines != 0) { if (num_lines > 0) {
if (openfile->current != NULL) { fileptr->next = openfile->current;
fileptr->next = openfile->current; openfile->current->prev = fileptr;
openfile->current->prev = fileptr; renumber(openfile->current);
renumber(openfile->current); openfile->current_x = 0;
openfile->current_x = 0; openfile->placewewant = 0;
openfile->placewewant = 0;
} else if (fileptr->next == NULL) {
openfile->filebot = fileptr;
new_magicline();
openfile->totsize--;
}
} }
openfile->totsize += get_totsize(openfile->fileage, openfile->totsize += get_totsize(openfile->fileage,
@ -1416,8 +1410,17 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type
* a selection. */ * a selection. */
assert(openfile->fileage != NULL && openfile->filebot != NULL); assert(openfile->fileage != NULL && openfile->filebot != NULL);
while (fileptr != openfile->filebot) { while (fileptr != NULL) {
size_t data_len = strlen(fileptr->data), size; size_t data_len, size;
/* If we're on the last line of the file and it's blank, skip
* over it, since the newline character we wrote after the
* next-to-last line of the file is equivalent to it. */
if (fileptr == openfile->filebot &&
openfile->filebot->data[0] == '\0')
continue;
data_len = strlen(fileptr->data);
/* Newlines to nulls, just before we write to disk. */ /* Newlines to nulls, just before we write to disk. */
sunder(fileptr->data); sunder(fileptr->data);
@ -1434,27 +1437,33 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type
goto cleanup_and_exit; goto cleanup_and_exit;
} }
/* If we're on the last line of the file and it isn't blank,
* don't write a newline character after it. */
if (fileptr != openfile->filebot ||
openfile->filebot->data[0] == '\0') {
#ifndef NANO_SMALL #ifndef NANO_SMALL
if (openfile->fmt == DOS_FILE || openfile->fmt == MAC_FILE) { if (openfile->fmt == DOS_FILE || openfile->fmt ==
if (putc('\r', f) == EOF) { MAC_FILE) {
statusbar(_("Error writing %s: %s"), realname, if (putc('\r', f) == EOF) {
statusbar(_("Error writing %s: %s"), realname,
strerror(errno)); strerror(errno));
fclose(f); fclose(f);
goto cleanup_and_exit; goto cleanup_and_exit;
}
} }
}
if (openfile->fmt != MAC_FILE) { if (openfile->fmt != MAC_FILE) {
#endif #endif
if (putc('\n', f) == EOF) { if (putc('\n', f) == EOF) {
statusbar(_("Error writing %s: %s"), realname, statusbar(_("Error writing %s: %s"), realname,
strerror(errno)); strerror(errno));
fclose(f); fclose(f);
goto cleanup_and_exit; goto cleanup_and_exit;
} }
#ifndef NANO_SMALL #ifndef NANO_SMALL
} }
#endif #endif
}
fileptr = fileptr->next; fileptr = fileptr->next;
lineswritten++; lineswritten++;