From 86e851b4e756b313a36d28ebee945057db86f356 Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Wed, 28 Jul 2004 20:46:25 +0000 Subject: [PATCH] per DB's patch, convert placewewant to a size_t; also add a few miscellaneous fixes of mine git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1870 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 14 ++++++++++++-- src/global.c | 2 +- src/move.c | 16 ++++++++-------- src/nano.c | 6 +++--- src/nano.h | 2 +- src/proto.h | 10 +++++----- src/search.c | 16 +++++++++------- src/winio.c | 37 +++++++++++++++++++++---------------- 8 files changed, 60 insertions(+), 43 deletions(-) diff --git a/ChangeLog b/ChangeLog index e4671738..3f6b65e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,8 +3,9 @@ CVS code - - More minor comment cleanups. (DLR) - Convert more ints used as boolean values to use TRUE and FALSE. (David Benbennick and DLR) - - Change more instances of ints that can never be negative to - size_t's. (DLR) + - Change more instances of ints that have large enough upper + bounds and which can never be negative to size_t's, and + convert nano to handle them properly. (DLR) - Convert the shortcut list functions and most related functions to return void instead of int, as the return values of all those functions are essentially unused. Changes to @@ -48,6 +49,9 @@ CVS code - - Move the main terminal initialization functions, aside from initscr(), into a new terminal_init() function, and convert nano to use it. (DLR) + - Convert placewewant to a size_t, and convert some functions + that use it as a parameter to use size_t as well. (David + Benbennick and DLR) - files.c: close_open_file() - Tweak to no longer rely on the return values of @@ -127,6 +131,9 @@ CVS code - Benbennick) DLR: Renamed from parse_int() to parse_num() and converted to use ssize_t instead of int. - winio.c: + get_kbinput() + - Since the only valid values for escapes are 0, 1, and 2, + convert it to an int. (DLR) get_control_kbinput() - Fix erroneous debugging statement so that nano compiles with --enable-debug again. (Jon Oberheide) @@ -136,6 +143,9 @@ CVS code - before then too. (David Benbennick) - Don't delete the statusbar line on UnCut, since the current version of Pico doesn't. (DLR) + do_cursorpos() + - Add assert to check whether totsize is correct. (David + Benbennick) line_len() - Rename to help_line_len() so as not to conflict with the line_len variable used elsewhere, and move inside the diff --git a/src/global.c b/src/global.c index b604a1d0..4ab83daf 100644 --- a/src/global.c +++ b/src/global.c @@ -91,7 +91,7 @@ int resetstatuspos; /* Hack for resetting the status bar char *answer = NULL; /* Answer str to many questions */ int totlines = 0; /* Total number of lines in the file */ long totsize = 0; /* Total number of bytes in the file */ -int placewewant = 0; /* The column we'd like the cursor +size_t placewewant = 0; /* The column we'd like the cursor to jump to when we go to the next or previous line */ diff --git a/src/move.c b/src/move.c index 47f3d8d7..84b907fa 100644 --- a/src/move.c +++ b/src/move.c @@ -30,7 +30,7 @@ void do_first_line(void) { - int old_pww = placewewant; + size_t old_pww = placewewant; current = fileage; placewewant = 0; current_x = 0; @@ -40,7 +40,7 @@ void do_first_line(void) void do_last_line(void) { - int old_pww = placewewant; + size_t old_pww = placewewant; current = filebot; placewewant = 0; current_x = 0; @@ -51,7 +51,7 @@ void do_last_line(void) void do_home(void) { - int old_pww = placewewant; + size_t old_pww = placewewant; #ifndef NANO_SMALL if (ISSET(SMART_HOME)) { int old_current_x = current_x; @@ -78,7 +78,7 @@ void do_home(void) void do_end(void) { - int old_pww = placewewant; + size_t old_pww = placewewant; current_x = strlen(current->data); placewewant = xplustabs(); check_statblank(); @@ -88,7 +88,7 @@ void do_end(void) void do_page_up(void) { - int old_pww = placewewant; + size_t old_pww = placewewant; const filestruct *old_current = current; #ifndef DISABLE_WRAPPING wrap_reset(); @@ -134,7 +134,7 @@ void do_page_up(void) void do_page_down(void) { - int old_pww = placewewant; + size_t old_pww = placewewant; const filestruct *old_current = current; #ifndef DISABLE_WRAPPING wrap_reset(); @@ -247,7 +247,7 @@ void do_down(void) void do_left(int allow_update) { - int old_pww = placewewant; + size_t old_pww = placewewant; if (current_x > 0) current_x--; else if (current != fileage) { @@ -267,7 +267,7 @@ void do_left_void(void) void do_right(int allow_update) { - int old_pww = placewewant; + size_t old_pww = placewewant; assert(current_x <= strlen(current->data)); if (current->data[current_x] != '\0') diff --git a/src/nano.c b/src/nano.c index 83b676b3..5dc3ba9b 100644 --- a/src/nano.c +++ b/src/nano.c @@ -1158,13 +1158,13 @@ void do_enter(void) #ifndef NANO_SMALL void do_next_word(void) { - int old_pww = placewewant; + size_t old_pww = placewewant; const filestruct *current_save = current; assert(current != NULL && current->data != NULL); /* Skip letters in this word first. */ while (current->data[current_x] != '\0' && - isalnum((int)current->data[current_x])) + isalnum((int)current->data[current_x])) current_x++; for (; current != NULL; current = current->next) { @@ -1190,7 +1190,7 @@ void do_next_word(void) /* The same thing for backwards. */ void do_prev_word(void) { - int old_pww = placewewant; + size_t old_pww = placewewant; const filestruct *current_save = current; assert(current != NULL && current->data != NULL); diff --git a/src/nano.h b/src/nano.h index 98c9d0ac..5d874983 100644 --- a/src/nano.h +++ b/src/nano.h @@ -166,7 +166,7 @@ typedef struct openfilestruct { long file_flags; /* Current file's flags: modification * status (and marking status, if * available). */ - int file_placewewant; /* Current file's place we want. */ + size_t file_placewewant; /* Current file's place we want. */ int file_totlines; /* Current file's total number of * lines. */ long file_totsize; /* Current file's total size. */ diff --git a/src/proto.h b/src/proto.h index f47b6e65..0d382c91 100644 --- a/src/proto.h +++ b/src/proto.h @@ -33,7 +33,7 @@ extern ssize_t wrap_at; #endif extern int editwinrows; extern int current_x, current_y, totlines; -extern int placewewant; +extern size_t placewewant; #ifndef NANO_SMALL extern int mark_beginx; #endif @@ -406,7 +406,7 @@ void do_replace(void); void do_gotoline(ssize_t line, int save_pos); void do_gotoline_void(void); #if defined (ENABLE_MULTIBUFFER) || !defined (DISABLE_SPELLER) -void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant); +void do_gotopos(int line, int pos_x, int pos_y, size_t pos_pww); #endif void do_find_bracket(void); #ifndef NANO_SMALL @@ -539,10 +539,10 @@ void reset_cursor(void); void edit_add(const filestruct *fileptr, const char *converted, int yval, size_t start); void update_line(const filestruct *fileptr, size_t index); -int need_horizontal_update(int old_placewewant); -int need_vertical_update(int old_placewewant); +int need_horizontal_update(size_t old_pww); +int need_vertical_update(size_t old_pww); void edit_scroll(updown direction, int nlines); -void edit_redraw(const filestruct *old_current, int old_pww); +void edit_redraw(const filestruct *old_current, size_t old_pww); void edit_refresh(void); void edit_update(filestruct *fileptr, topmidnone location); int statusq(int allowtabs, const shortcut *s, const char *def, diff --git a/src/search.c b/src/search.c index df0f0040..56839e59 100644 --- a/src/search.c +++ b/src/search.c @@ -359,8 +359,8 @@ int findnextstr(int can_display_wrap, int wholeword, const filestruct /* Search for a string. */ void do_search(void) { - size_t old_pww = placewewant, i, fileptr_x = current_x; - int didfind; + size_t old_pww = placewewant, fileptr_x = current_x; + int i, didfind; filestruct *fileptr = current; #ifndef DISABLE_WRAPPING @@ -588,8 +588,8 @@ char *replace_line(const char *needle) int do_replace_loop(const char *needle, const filestruct *real_current, size_t *real_current_x, int wholewords) { - int old_pww = placewewant, replaceall = FALSE, numreplaced = -1; - size_t current_x_save = current_x; + int replaceall = FALSE, numreplaced = -1; + size_t old_pww = placewewant, current_x_save = current_x; const filestruct *current_save = current; #ifdef HAVE_REGEX_H /* The starting-line match and bol/eol regex flags. */ @@ -880,7 +880,7 @@ void do_gotoline_void(void) } #if defined(ENABLE_MULTIBUFFER) || !defined(DISABLE_SPELLER) -void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant) +void do_gotopos(int line, int pos_x, int pos_y, size_t pos_pww) { /* since do_gotoline() resets the x-coordinate but not the y-coordinate, set the coordinates up this way */ @@ -893,7 +893,7 @@ void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant) /* set the rest of the coordinates up */ current_x = pos_x; - placewewant = pos_placewewant; + placewewant = pos_pww; update_line(current, pos_x); } #endif @@ -904,7 +904,8 @@ void do_find_bracket(void) char ch_under_cursor, wanted_ch; const char *pos, *brackets = "([{<>}])"; char regexp_pat[] = "[ ]"; - int old_pww = placewewant, current_x_save, count = 1; + size_t old_pww, current_x_save; + int count = 1; long flags_save; filestruct *current_save; @@ -919,6 +920,7 @@ void do_find_bracket(void) assert(strlen(brackets) % 2 == 0); wanted_ch = brackets[(strlen(brackets) - 1) - (pos - brackets)]; + old_pww = placewewant; current_x_save = current_x; current_save = current; flags_save = flags; diff --git a/src/winio.c b/src/winio.c index 70e300b5..ba2feb64 100644 --- a/src/winio.c +++ b/src/winio.c @@ -193,7 +193,8 @@ int get_translated_kbinput(int kbinput, int *es #endif ) { - static size_t escapes = 0, ascii_digits = 0; + static int escapes = 0; + static size_t ascii_digits = 0; int retval = ERR; #ifndef NANO_SMALL @@ -413,9 +414,9 @@ int get_translated_kbinput(int kbinput, int *es } } } - + #ifdef DEBUG - fprintf(stderr, "get_translated_kbinput(): kbinput = %d, es = %d, escapes = %d, ascii_digits = %d, retval = %d\n", kbinput, *es, escapes, ascii_digits, retval); + fprintf(stderr, "get_translated_kbinput(): kbinput = %d, es = %d, escapes = %d, ascii_digits = %lu, retval = %d\n", kbinput, *es, escapes, (unsigned long)ascii_digits, retval); #endif /* Return the result. */ @@ -511,7 +512,7 @@ int get_ascii_kbinput(int kbinput, size_t ascii_digits } #ifdef DEBUG - fprintf(stderr, "get_ascii_kbinput(): kbinput = %d, ascii_digits = %d, ascii_kbinput = %d, retval = %d\n", kbinput, ascii_digits, ascii_kbinput, retval); + fprintf(stderr, "get_ascii_kbinput(): kbinput = %d, ascii_digits = %lu, ascii_kbinput = %d, retval = %d\n", kbinput, (unsigned long)ascii_digits, ascii_kbinput, retval); #endif /* If the result is an ASCII character, reset the ASCII character @@ -1096,7 +1097,7 @@ int *get_verbatim_kbinput(WINDOW *win, int *v_kbinput, size_t *v_len, (*v_len)++; v_kbinput[0] = kbinput; #ifdef DEBUG - fprintf(stderr, "get_verbatim_kbinput(): kbinput = %d, v_len = %d\n", kbinput, *v_len); + fprintf(stderr, "get_verbatim_kbinput(): kbinput = %d, v_len = %lu\n", kbinput, (unsigned long)*v_len); #endif /* Read any following characters using non-blocking input, until @@ -1111,7 +1112,7 @@ int *get_verbatim_kbinput(WINDOW *win, int *v_kbinput, size_t *v_len, v_kbinput = (int *)nrealloc(v_kbinput, *v_len * sizeof(int)); v_kbinput[*v_len - 1] = kbinput; #ifdef DEBUG - fprintf(stderr, "get_verbatim_kbinput(): kbinput = %d, v_len = %d\n", kbinput, *v_len); + fprintf(stderr, "get_verbatim_kbinput(): kbinput = %d, v_len = %lu\n", kbinput, (unsigned long)*v_len); #endif } nodelay(win, FALSE); @@ -1230,7 +1231,7 @@ int get_untranslated_kbinput(int kbinput, size_t position, int retval = kbinput; #ifdef DEBUG - fprintf(stderr, "get_untranslated_kbinput(): kbinput = %d, position = %d, ascii_digits = %d\n", kbinput, position, ascii_digits); + fprintf(stderr, "get_untranslated_kbinput(): kbinput = %d, position = %lu, ascii_digits = %lu\n", kbinput, (unsigned long)position, (unsigned long)ascii_digits); #endif return retval; @@ -1392,7 +1393,7 @@ void blank_titlebar(void) void blank_edit(void) { - size_t i; + int i; for (i = 0; i < editwinrows; i++) mvwaddstr(edit, i, 0, hblank); } @@ -2543,7 +2544,7 @@ void update_line(const filestruct *fileptr, size_t index) /* Return a nonzero value if we need an update after moving * horizontally. We need one if the mark is on or if old_pww and * placewewant are on different pages. */ -int need_horizontal_update(int old_pww) +int need_horizontal_update(size_t old_pww) { return #ifndef NANO_SMALL @@ -2555,7 +2556,7 @@ int need_horizontal_update(int old_pww) /* Return a nonzero value if we need an update after moving vertically. * We need one if the mark is on or if old_pww and placewewant * are on different pages. */ -int need_vertical_update(int old_pww) +int need_vertical_update(size_t old_pww) { return #ifndef NANO_SMALL @@ -2630,7 +2631,7 @@ void edit_scroll(updown direction, int nlines) /* Update any lines between old_current and current that need to be * updated. */ -void edit_redraw(const filestruct *old_current, int old_pww) +void edit_redraw(const filestruct *old_current, size_t old_pww) { int do_refresh = need_vertical_update(0) || need_vertical_update(old_pww); @@ -2689,7 +2690,7 @@ void edit_refresh(void) const filestruct *foo = edittop; #ifdef DEBUG - fprintf(stderr, "edit_refresh(): edittop->lineno = %ld\n", edittop->lineno); + fprintf(stderr, "edit_refresh(): edittop->lineno = %d\n", edittop->lineno); #endif while (nlines < editwinrows) { @@ -2964,6 +2965,10 @@ void do_cursorpos(int constant) } i += current_x; + /* Check whether totsize is correct. Else there is a bug + * somewhere. */ + assert(current != filebot || i == totsize); + if (constant && ISSET(DISABLE_CURPOS)) { UNSET(DISABLE_CURPOS); old_i = i; @@ -2975,8 +2980,8 @@ void do_cursorpos(int constant) * unconditionally; otherwise, only display the position when the * character values have changed. */ if (!constant || old_i != i || old_totsize != totsize) { - unsigned long xpt = xplustabs() + 1; - unsigned long cur_len = strlenpt(current->data) + 1; + size_t xpt = xplustabs() + 1; + size_t cur_len = strlenpt(current->data) + 1; int linepct = 100 * current->lineno / totlines; int colpct = 100 * xpt / cur_len; int bytepct = totsize == 0 ? 0 : 100 * i / totsize; @@ -2984,7 +2989,7 @@ void do_cursorpos(int constant) statusbar( _("line %ld/%ld (%d%%), col %lu/%lu (%d%%), char %lu/%ld (%d%%)"), current->lineno, totlines, linepct, - xpt, cur_len, colpct, + (unsigned long)xpt, (unsigned long)cur_len, colpct, i, totsize, bytepct); UNSET(DISABLE_CURPOS); } @@ -3158,7 +3163,7 @@ void do_help(void) * expect word to have tabs and control characters expanded. */ void do_replace_highlight(int highlight_flag, const char *word) { - int y = xplustabs(); + size_t y = xplustabs(); size_t word_len = strlen(word); y = get_page_start(y) + COLS - y;