From fe2c50cc19d59d32ea8fc61a67a3622d601410a2 Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Wed, 22 Sep 2010 17:53:38 +0400 Subject: [PATCH 1/4] Ticket 2356: viewer segfaults on ARM platform because type mismatches of printf arguments. Fixed type mismatches of printf arguments in viewer; Signed-off-by: Andrew Borodin --- src/viewer/coord_cache.c | 29 +++++++++++++++-------------- src/viewer/display.c | 9 ++++----- src/viewer/hex.c | 4 ++-- src/viewer/internal.h | 3 --- src/viewer/lib.c | 2 +- 5 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/viewer/coord_cache.c b/src/viewer/coord_cache.c index 211f0bd2e..13a990a20 100644 --- a/src/viewer/coord_cache.c +++ b/src/viewer/coord_cache.c @@ -52,6 +52,9 @@ #include #include /* for g_memmove() */ +#ifdef MC_ENABLE_DEBUGGING_CODE +#include /* uintmax_t */ +#endif #include "lib/global.h" #include "lib/tty/tty.h" @@ -217,16 +220,15 @@ mcview_ccache_dump (mcview_t * view) (void) setvbuf (f, NULL, _IONBF, 0); /* cache entries */ - for (i = 0; i < view->coord_cache->size; i++) + for (i = 0; i < cache->size; i++) { (void) fprintf (f, - "entry %8u " - "offset %8" OFFSETTYPE_PRId " " - "line %8" OFFSETTYPE_PRId " " - "column %8" OFFSETTYPE_PRId " " - "nroff_column %8" OFFSETTYPE_PRId "\n", - (unsigned int) i, cache->cache[i].cc_offset, cache[i]->cache.cc_line, - cache->cache[i].cc_column, cache->cache[i].cc_nroff_column); + "entry %8u offset %8ju line %8ju column %8ju nroff_column %8ju\n", + (unsigned int) i, + (uintmax_t) cache->cache[i]->cc_offset, + (uintmax_t) cache->cache[i]->cc_line, + (uintmax_t) cache->cache[i]->cc_column, + (uintmax_t) cache->cache[i]->cc_nroff_column); } (void) fprintf (f, "\n"); @@ -235,16 +237,15 @@ mcview_ccache_dump (mcview_t * view) { mcview_offset_to_coord (view, &line, &column, offset); (void) fprintf (f, - "offset %8" OFFSETTYPE_PRId " " - "line %8" OFFSETTYPE_PRId " " - "column %8" OFFSETTYPE_PRId "\n", offset, line, column); + "offset %8ju line %8ju column %8ju\n", + (uintmax_t) offset, (uintmax_t) line, (uintmax_t) column); } /* line/column -> offset translation */ for (line = 0; TRUE; line++) { mcview_coord_to_offset (view, &nextline_offset, line + 1, 0); - (void) fprintf (f, "nextline_offset %8" OFFSETTYPE_PRId "\n", nextline_offset); + (void) fprintf (f, "nextline_offset %8ju\n", (uintmax_t) nextline_offset); for (column = 0; TRUE; column++) { @@ -253,8 +254,8 @@ mcview_ccache_dump (mcview_t * view) break; (void) fprintf (f, - "line %8" OFFSETTYPE_PRId " column %8" OFFSETTYPE_PRId " offset %8" - OFFSETTYPE_PRId "\n", line, column, offset); + "line %8ju column %8ju offset %8ju\n", + (uintmax_t) line, (uintmax_t) column, (uintmax_t) offset); } if (nextline_offset >= filesize - 1) diff --git a/src/viewer/display.c b/src/viewer/display.c index f316daa5b..b8086daf4 100644 --- a/src/viewer/display.c +++ b/src/viewer/display.c @@ -36,6 +36,7 @@ */ #include +#include /* uintmax_t */ #include "lib/global.h" #include "lib/skin.h" @@ -148,13 +149,11 @@ mcview_display_status (mcview_t * view) char buffer[BUF_TINY]; widget_move (view, top, width - 32); if (view->hex_mode) - { - tty_printf ("0x%08lx", (unsigned long) view->hex_cursor); - } + tty_printf ("0x%08jx", (uintmax_t) view->hex_cursor); else { size_trunc_len (buffer, 5, mcview_get_filesize (view), 0, panels_options.kilobyte_si); - tty_printf ("%9lli/%s%s %s", view->dpy_end, + tty_printf ("%9ju/%s%s %s", (uintmax_t) view->dpy_end, buffer, mcview_may_still_grow (view) ? "+" : " ", #ifdef HAVE_CHARSET source_codepage >= 0 ? get_codepage_id (source_codepage) : "" @@ -377,7 +376,7 @@ mcview_display_ruler (mcview_t * view) if ((cl != 0) && (cl % 10) == 0) { - g_snprintf (r_buff, sizeof (r_buff), "%" OFFSETTYPE_PRId, (long unsigned int) cl); + g_snprintf (r_buff, sizeof (r_buff), "%ju", (uintmax_t) cl); if (nums_row < height) { widget_move (view, top + nums_row, left + c - 1); diff --git a/src/viewer/hex.c b/src/viewer/hex.c index 07eae624f..4440bacf0 100644 --- a/src/viewer/hex.c +++ b/src/viewer/hex.c @@ -39,6 +39,7 @@ #include #include +#include /* uintmax_t */ #include "lib/global.h" #include "lib/tty/tty.h" @@ -159,8 +160,7 @@ mcview_display_hex (mcview_t * view) col = 0; /* Print the hex offset */ - g_snprintf (hex_buff, sizeof (hex_buff), "%08" OFFSETTYPE_PRIX " ", - (long unsigned int) from); + g_snprintf (hex_buff, sizeof (hex_buff), "%08jX ", (uintmax_t) from); widget_move (view, top + row, left); tty_setcolor (MARKED_COLOR); for (i = 0; col < width && hex_buff[i] != '\0'; i++) diff --git a/src/viewer/internal.h b/src/viewer/internal.h index b3247d045..7c4ab19da 100644 --- a/src/viewer/internal.h +++ b/src/viewer/internal.h @@ -21,9 +21,6 @@ typedef unsigned char byte; /* A width or height on the screen */ typedef unsigned int screen_dimen; -#define OFFSETTYPE_PRIX "lX" -#define OFFSETTYPE_PRId "lu" - extern const off_t INVALID_OFFSET; extern const off_t OFFSETTYPE_MAX; diff --git a/src/viewer/lib.c b/src/viewer/lib.c index bc5cef054..f7bb51f07 100644 --- a/src/viewer/lib.c +++ b/src/viewer/lib.c @@ -57,7 +57,7 @@ /*** global variables ****************************************************************************/ #define OFF_T_BITWIDTH (unsigned int) (sizeof (off_t) * CHAR_BIT - 1) -const off_t INVALID_OFFSET = (off_t) - 1; +const off_t INVALID_OFFSET = (off_t) -1; const off_t OFFSETTYPE_MAX = ((off_t) 1 << (OFF_T_BITWIDTH - 1)) - 1; /*** file scope macro definitions ****************************************************************/ From 10949329a71418986bc79e989a874dd46e72aa70 Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Wed, 22 Sep 2010 18:16:39 +0400 Subject: [PATCH 2/4] Fixed signed and unsigned comparisons in viewer. Signed-off-by: Andrew Borodin --- src/viewer/growbuf.c | 16 +++++++++------- src/viewer/move.c | 8 ++++---- src/viewer/nroff.c | 5 +++-- src/viewer/plain.c | 5 +++-- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/viewer/growbuf.c b/src/viewer/growbuf.c index 953df8210..8be2ff551 100644 --- a/src/viewer/growbuf.c +++ b/src/viewer/growbuf.c @@ -177,7 +177,7 @@ mcview_get_byte_growing_buffer (mcview_t * view, off_t byte_index, int *retval) off_t pageno; off_t pageindex; - if (retval) + if (retval != NULL) *retval = -1; pageno = byte_index / VIEW_PAGE_SIZE; @@ -191,15 +191,16 @@ mcview_get_byte_growing_buffer (mcview_t * view, off_t byte_index, int *retval) mcview_growbuf_read_until (view, byte_index + 1); if (view->growbuf_blockptr->len == 0) return FALSE; - if (pageno < view->growbuf_blockptr->len - 1) + if (pageno < (off_t) view->growbuf_blockptr->len - 1) { - if (retval) + if (retval != NULL) *retval = *((byte *) (g_ptr_array_index (view->growbuf_blockptr, pageno) + pageindex)); return TRUE; } - if (pageno == view->growbuf_blockptr->len - 1 && pageindex < (off_t) view->growbuf_lastindex) + if (pageno == (off_t) view->growbuf_blockptr->len - 1 + && pageindex < (off_t) view->growbuf_lastindex) { - if (retval) + if (retval != NULL) *retval = *((byte *) (g_ptr_array_index (view->growbuf_blockptr, pageno) + pageindex)); return TRUE; } @@ -222,9 +223,10 @@ mcview_get_ptr_growing_buffer (mcview_t * view, off_t byte_index) mcview_growbuf_read_until (view, byte_index + 1); if (view->growbuf_blockptr->len == 0) return NULL; - if (pageno < view->growbuf_blockptr->len - 1) + if (pageno < (off_t) view->growbuf_blockptr->len - 1) return (char *) (g_ptr_array_index (view->growbuf_blockptr, pageno) + pageindex); - if (pageno == view->growbuf_blockptr->len - 1 && pageindex < (off_t) view->growbuf_lastindex) + if (pageno == (off_t) view->growbuf_blockptr->len - 1 + && pageindex < (off_t) view->growbuf_lastindex) return (char *) (g_ptr_array_index (view->growbuf_blockptr, pageno) + pageindex); return NULL; } diff --git a/src/viewer/move.c b/src/viewer/move.c index 46b34d77d..2296ff45f 100644 --- a/src/viewer/move.c +++ b/src/viewer/move.c @@ -121,7 +121,7 @@ mcview_move_up (mcview_t * view, off_t lines) if (last_row_length != 0 && cur_bol == view->dpy_start) new_offset = max (new_offset, (off_t) (view->dpy_start - last_row_length)); else - new_offset = max (new_offset, view->dpy_start - view->data_area.width); + new_offset = max (new_offset, view->dpy_start - (off_t) view->data_area.width); } view->dpy_start = new_offset; } @@ -164,12 +164,12 @@ mcview_move_down (mcview_t * view, off_t lines) { new_offset = mcview_eol (view, view->dpy_end); if (view->text_wrap_mode) - new_offset = min (new_offset, view->dpy_end + view->data_area.width); + new_offset = min (new_offset, view->dpy_end + (off_t) view->data_area.width); view->dpy_end = new_offset; new_offset = mcview_eol (view, view->dpy_start); if (view->text_wrap_mode) - new_offset = min (new_offset, view->dpy_start + view->data_area.width); + new_offset = min (new_offset, view->dpy_start + (off_t) view->data_area.width); view->dpy_start = new_offset; } view->dpy_end = last_byte; @@ -181,7 +181,7 @@ mcview_move_down (mcview_t * view, off_t lines) { new_offset = mcview_eol (view, view->dpy_start); if (view->text_wrap_mode) - new_offset = min (new_offset, view->dpy_start + view->data_area.width); + new_offset = min (new_offset, view->dpy_start + (off_t) view->data_area.width); view->dpy_start = new_offset; } } diff --git a/src/viewer/nroff.c b/src/viewer/nroff.c index 8ff4e4649..93ec40ca9 100644 --- a/src/viewer/nroff.c +++ b/src/viewer/nroff.c @@ -175,9 +175,10 @@ mcview_display_nroff (mcview_t * view) tty_setcolor (SELECTED_COLOR); } - if (col >= view->dpy_text_column && col - view->dpy_text_column < width) + if ((off_t) col >= view->dpy_text_column + && (off_t) col - view->dpy_text_column < (off_t) width) { - widget_move (view, top + row, left + (col - view->dpy_text_column)); + widget_move (view, top + row, left + ((off_t) col - view->dpy_text_column)); #ifdef HAVE_CHARSET if (utf8_display) { diff --git a/src/viewer/plain.c b/src/viewer/plain.c index fe7db8a9a..a1796cabf 100644 --- a/src/viewer/plain.c +++ b/src/viewer/plain.c @@ -152,9 +152,10 @@ mcview_display_text (mcview_t * view) if (view->search_start <= from && from < view->search_end) tty_setcolor (SELECTED_COLOR); - if ((col >= view->dpy_text_column) && (col - view->dpy_text_column < width)) + if (((off_t) col >= view->dpy_text_column) + && ((off_t) col - view->dpy_text_column < (off_t) width)) { - widget_move (view, top + row, left + (col - view->dpy_text_column)); + widget_move (view, top + row, left + ((off_t) col - view->dpy_text_column)); #ifdef HAVE_CHARSET if (utf8_display) { From 9678ef3b02480abe6dede24a10f76f6be5d73c45 Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Wed, 22 Sep 2010 18:26:55 +0400 Subject: [PATCH 3/4] Fixed type mismatches in formatted output arguments in VFS. Signed-off-by: Andrew Borodin --- lib/vfs/mc-vfs/direntry.c | 5 +++-- lib/vfs/mc-vfs/fish.c | 9 +++++---- lib/vfs/mc-vfs/ftpfs.c | 4 +++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/vfs/mc-vfs/direntry.c b/lib/vfs/mc-vfs/direntry.c index 61542292c..0b18c2d37 100644 --- a/lib/vfs/mc-vfs/direntry.c +++ b/lib/vfs/mc-vfs/direntry.c @@ -35,6 +35,7 @@ /* includes fcntl.h see IEEE Std 1003.1-2008 */ #include #include /* gettimeofday() */ +#include /* uintmax_t */ #include "lib/global.h" @@ -980,9 +981,9 @@ vfs_s_print_stats (const char *fs_name, const char *action, if (need) print_vfs_message (i18n_percent_transf_format, fs_name, action, - file_name, (int) ((double) have * 100 / need), have); + file_name, (int) ((double) have * 100 / need), (uintmax_t) have); else - print_vfs_message (i18n_transf_format, fs_name, action, file_name, have); + print_vfs_message (i18n_transf_format, fs_name, action, file_name, (uintmax_t) have); } int diff --git a/lib/vfs/mc-vfs/fish.c b/lib/vfs/mc-vfs/fish.c index 475f16fe8..57cf9a8e8 100644 --- a/lib/vfs/mc-vfs/fish.c +++ b/lib/vfs/mc-vfs/fish.c @@ -53,6 +53,7 @@ #include /* gettimeofday() */ #include #include +#include /* uintmax_t */ #include "lib/global.h" #include "lib/fs.h" @@ -803,14 +804,14 @@ fish_file_store (struct vfs_class *me, struct vfs_s_fh *fh, char *name, char *lo { shell_commands = g_strconcat (SUP.scr_env, "FISH_FILENAME=%s FISH_FILESIZE=%ju;\n", SUP.scr_append, (char *) NULL); - n = fish_command (me, super, WAIT_REPLY, shell_commands, quoted_name, s.st_size); + n = fish_command (me, super, WAIT_REPLY, shell_commands, quoted_name, (uintmax_t) s.st_size); g_free (shell_commands); } else { shell_commands = g_strconcat (SUP.scr_env, "FISH_FILENAME=%s FISH_FILESIZE=%ju;\n", SUP.scr_send, (char *) NULL); - n = fish_command (me, super, WAIT_REPLY, shell_commands, quoted_name, s.st_size); + n = fish_command (me, super, WAIT_REPLY, shell_commands, quoted_name, (uintmax_t) s.st_size); g_free (shell_commands); } if (n != PRELIM) @@ -848,7 +849,7 @@ fish_file_store (struct vfs_class *me, struct vfs_s_fh *fh, char *name, char *lo tty_disable_interrupt_key (); total += n; print_vfs_message (_("fish: storing %s %d (%ju)"), - was_error ? _("zeros") : _("file"), total, s.st_size); + was_error ? _("zeros") : _("file"), total, (uintmax_t) s.st_size); } close (h); g_free (quoted_name); @@ -886,7 +887,7 @@ fish_linear_start (struct vfs_class *me, struct vfs_s_fh *fh, off_t offset) shell_commands = g_strconcat (SUP.scr_env, "FISH_FILENAME=%s FISH_START_OFFSET=%ju;\n", SUP.scr_get, (char *) NULL); - offset = fish_command (me, super, WANT_STRING, shell_commands, quoted_name, offset); + offset = fish_command (me, super, WANT_STRING, shell_commands, quoted_name, (uintmax_t) offset); g_free (shell_commands); g_free (quoted_name); if (offset != PRELIM) diff --git a/lib/vfs/mc-vfs/ftpfs.c b/lib/vfs/mc-vfs/ftpfs.c index 35681ad1f..d0aed4f21 100644 --- a/lib/vfs/mc-vfs/ftpfs.c +++ b/lib/vfs/mc-vfs/ftpfs.c @@ -84,6 +84,7 @@ What to do with this? #include #include #include /* gettimeofday() */ +#include /* uintmax_t */ #include "lib/global.h" @@ -1738,7 +1739,8 @@ ftpfs_file_store (struct vfs_class *me, struct vfs_s_fh *fh, char *name, char *l w_buf += n_written; n_read -= n_written; } - print_vfs_message (_("ftpfs: storing file %ju (%ju)"), n_stored, s.st_size); + print_vfs_message (_("ftpfs: storing file %ju (%ju)"), + (uintmax_t) n_stored, (uintmax_t) s.st_size); } tty_disable_interrupt_key (); close (sock); From fb05515d821f3c581a4111cc53d2653dd4776a3a Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT service" Date: Mon, 13 Sep 2010 05:46:21 +0200 Subject: [PATCH 4/4] lib/vfs/mc-vfs/smbfs.c: fixed printf() arguments. Signed-off-by: Andrew Borodin --- lib/vfs/mc-vfs/smbfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vfs/mc-vfs/smbfs.c b/lib/vfs/mc-vfs/smbfs.c index 85c93935f..709f2596f 100644 --- a/lib/vfs/mc-vfs/smbfs.c +++ b/lib/vfs/mc-vfs/smbfs.c @@ -1667,7 +1667,7 @@ smbfs_mknod (struct vfs_class *me, const char *path, mode_t mode, dev_t dev) { (void) me; - DEBUG(3, ("smbfs_mknod(path:%s, mode:%d, dev:%zu)\n", path, mode, dev)); + DEBUG(3, ("smbfs_mknod(path:%s, mode:%d, dev:%u)\n", path, mode, (unsigned int)dev)); my_errno = EOPNOTSUPP; return -1; }