From c17826876cfcb3dea2db91a722af0bb729a4e403 Mon Sep 17 00:00:00 2001 From: Ilia Maslakov Date: Thu, 2 Sep 2010 16:00:42 +0400 Subject: [PATCH] Ticket #2277 (mcdiff cleanup) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mcdiff: some warnings fixed. search.c: In function ‘mcdiffview_do_search_backward’: search.c:183: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] ydiff.c: In function ‘cvt_fget’: ydiff.c:1653: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] ydiff.c: In function ‘dview_execute_cmd’: ydiff.c:3085: warning: overflow in implicit constant conversion [-Woverflow] fixed mcdiff search. Signed-off-by: Andrew Borodin Signed-off-by: Ilia Maslakov --- src/diffviewer/internal.h | 2 +- src/diffviewer/search.c | 33 ++++++++++++++++++++------------- src/diffviewer/ydiff.c | 33 +++++++++++++++++++++------------ 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/src/diffviewer/internal.h b/src/diffviewer/internal.h index eba2bf9bd..c77f25f42 100644 --- a/src/diffviewer/internal.h +++ b/src/diffviewer/internal.h @@ -128,7 +128,7 @@ typedef struct WDiff gchar *last_string; ssize_t last_found_line; - size_t last_accessed_num_line; + ssize_t last_accessed_num_line; } search; } WDiff; diff --git a/src/diffviewer/search.c b/src/diffviewer/search.c index 88fabf87f..8c677ddc7 100644 --- a/src/diffviewer/search.c +++ b/src/diffviewer/search.c @@ -175,17 +175,21 @@ mcdiffview_dialog_search (WDiff * dview) static gboolean mcdiffview_do_search_backward (WDiff * dview) { - size_t ind; + ssize_t ind; DIFFLN *p; - dview->search.last_accessed_num_line--; - if (dview->search.last_accessed_num_line < 0) - return FALSE; - - for (ind = dview->search.last_accessed_num_line; ind > 0; ind--) { - p = (DIFFLN *) & g_array_index (dview->a[dview->ord], DIFFLN, ind); + dview->search.last_accessed_num_line = -1; + return FALSE; + } + + if ((size_t) dview->search.last_accessed_num_line >= dview->a[dview->ord]->len) + dview->search.last_accessed_num_line = (ssize_t) dview->a[dview->ord]->len; + + for (ind = --dview->search.last_accessed_num_line; ind >= 0; ind--) + { + p = (DIFFLN *) & g_array_index (dview->a[dview->ord], DIFFLN, (size_t) ind); if (p->u.len == 0) continue; @@ -208,12 +212,15 @@ mcdiffview_do_search_forward (WDiff * dview) size_t ind; DIFFLN *p; - dview->search.last_accessed_num_line++; + if (dview->search.last_accessed_num_line < 0) + dview->search.last_accessed_num_line = -1; + else if ((size_t) dview->search.last_accessed_num_line >= dview->a[dview->ord]->len) + { + dview->search.last_accessed_num_line = (ssize_t) dview->a[dview->ord]->len; + return FALSE; + } - if (dview->search.last_accessed_num_line > dview->a[dview->ord]->len) - return FALSE; - - for (ind = dview->search.last_accessed_num_line; ind < dview->a[dview->ord]->len; ind++) + for (ind = (size_t) ++dview->search.last_accessed_num_line; ind < dview->a[dview->ord]->len; ind++) { p = (DIFFLN *) & g_array_index (dview->a[dview->ord], DIFFLN, ind); if (p->u.len == 0) @@ -222,7 +229,7 @@ mcdiffview_do_search_forward (WDiff * dview) if (mc_search_run (dview->search.handle, p->p, 0, p->u.len, NULL)) { dview->skip_rows = dview->search.last_found_line = - dview->search.last_accessed_num_line = ind; + dview->search.last_accessed_num_line = (ssize_t) ind; return TRUE; } } diff --git a/src/diffviewer/ydiff.c b/src/diffviewer/ydiff.c index 9965b9b3d..1cb5d7433 100644 --- a/src/diffviewer/ydiff.c +++ b/src/diffviewer/ydiff.c @@ -1648,16 +1648,16 @@ cvt_fget (FBUF * f, off_t off, char *dst, size_t dstsize, int skip, int ts, int } } - useful = base - skip; - offset = skip - old_base; - - if (useful < 0) + if (base < skip) { memset (dst, ' ', dstsize); dst[dstsize] = '\0'; return 0; } + useful = base - skip; + offset = skip - old_base; + if (useful <= dstsize) { if (useful != 0) @@ -2349,7 +2349,7 @@ dview_init (WDiff * dview, const char *args, const char *file1, const char *file dview->search.handle = NULL; dview->search.last_string = NULL; dview->search.last_found_line = -1; - dview->search.last_accessed_num_line = 0; + dview->search.last_accessed_num_line = -1; dview->opt.quality = 0; dview->opt.strip_trailing_cr = 0; @@ -2803,7 +2803,7 @@ dview_goto_cmd (WDiff * dview, int ord) } } } - dview->skip_rows = dview->search.last_accessed_num_line = i; + dview->skip_rows = dview->search.last_accessed_num_line = (ssize_t) i; g_snprintf (prev, sizeof (prev), "%d", newline); } g_free (input); @@ -3071,20 +3071,29 @@ dview_execute_cmd (WDiff * dview, unsigned long command) dview->skip_rows = dview->search.last_accessed_num_line = dview->a[0]->len - 1; break; case CK_DiffUp: - dview->skip_rows--; - dview->search.last_accessed_num_line = dview->skip_rows; + if (dview->skip_rows > 0) + { + dview->skip_rows--; + dview->search.last_accessed_num_line = dview->skip_rows; + } break; case CK_DiffDown: dview->skip_rows++; dview->search.last_accessed_num_line = dview->skip_rows; break; case CK_DiffPageDown: - dview->skip_rows += dview->height - 2; - dview->search.last_accessed_num_line = dview->skip_rows; + if (dview->height > 2) + { + dview->skip_rows += dview->height - 2; + dview->search.last_accessed_num_line = dview->skip_rows; + } break; case CK_DiffPageUp: - dview->skip_rows -= dview->height - 2; - dview->search.last_accessed_num_line = dview->skip_rows; + if (dview->height > 2) + { + dview->skip_rows -= dview->height - 2; + dview->search.last_accessed_num_line = dview->skip_rows; + } break; case CK_DiffLeft: dview->skip_cols--;