From bcf3b8c37c4c76f51e02d27cdb7c2a3d9e6b3ca4 Mon Sep 17 00:00:00 2001 From: "Yury V. Zaytsev" Date: Sun, 28 Jul 2024 18:50:55 +0200 Subject: [PATCH] tests: re-implement mocking via weak symbols instead of symbol duplication Signed-off-by: Yury V. Zaytsev --- configure.ac | 1 + lib/global.h | 7 ++ lib/mcconfig.h | 6 +- lib/tty/tty-ncurses.c | 3 +- lib/tty/tty.c | 7 +- lib/util.h | 16 +++- lib/utilunix.c | 87 ++++++++++++++++---- lib/vfs/netutil.c | 3 +- lib/vfs/utilvfs.h | 2 +- lib/vfs/vfs.c | 12 +-- lib/vfs/vfs.h | 12 +-- lib/widget/dialog-switch.h | 2 +- lib/widget/input_complete.c | 3 +- lib/widget/wtools.h | 2 +- m4.include/mc-tests.m4 | 13 +-- src/background.c | 3 +- src/cons.handler.c | 2 +- src/editor/edit-impl.h | 4 +- src/editor/editcomplete.h | 2 +- src/editor/editmacros.h | 2 +- src/editor/etags.c | 2 +- src/execute.c | 14 ++-- src/filemanager/layout.h | 2 +- src/filemanager/panel.h | 3 +- src/main.c | 4 +- src/subshell/common.c | 2 +- src/vfs/shell/shell.c | 4 +- tests/lib/Makefile.am | 2 - tests/lib/mc_realpath.c | 2 +- tests/lib/mcconfig/Makefile.am | 2 - tests/lib/utilunix__my_system-common.c | 17 ++-- tests/lib/vfs/Makefile.am | 2 - tests/lib/vfs/current_dir.c | 3 +- tests/lib/vfs/relative_cd.c | 3 +- tests/lib/vfs/vfs_setup_cwd.c | 3 +- tests/lib/widget/Makefile.am | 2 - tests/src/Makefile.am | 2 - tests/src/editor/Makefile.am | 2 - tests/src/filemanager/Makefile.am | 2 - tests/src/vfs/extfs/helpers-list/Makefile.am | 4 - tests/src/vfs/ftpfs/Makefile.am | 2 - 41 files changed, 160 insertions(+), 108 deletions(-) diff --git a/configure.ac b/configure.ac index 5a9a4447f..e0e01c1f4 100644 --- a/configure.ac +++ b/configure.ac @@ -65,6 +65,7 @@ dnl which causes attribute checks to fail ax_gcc_func_attribute_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS= AX_GCC_FUNC_ATTRIBUTE([fallthrough]) +AX_GCC_FUNC_ATTRIBUTE([weak]) _AC_LANG_PREFIX[]FLAGS=$ax_gcc_func_attribute_save_flags unset ax_gcc_func_attribute_save_flags diff --git a/lib/global.h b/lib/global.h index e4afd9f10..65454d15c 100644 --- a/lib/global.h +++ b/lib/global.h @@ -8,6 +8,13 @@ #define MC_GLOBAL_H #include + +#if defined(HAVE_FUNC_ATTRIBUTE_WEAK) && defined(HAVE_TESTS) +#define MC_MOCKABLE __attribute__((weak)) +#else +#define MC_MOCKABLE +#endif + #include "glibcompat.h" #include "unixcompat.h" diff --git a/lib/mcconfig.h b/lib/mcconfig.h index abc28efe8..13af8346a 100644 --- a/lib/mcconfig.h +++ b/lib/mcconfig.h @@ -53,8 +53,8 @@ gchar **mc_config_get_keys (const mc_config_t * mc_config, const gchar * group, gchar *mc_config_get_string (mc_config_t * mc_config, const gchar * group, const gchar * param, const gchar * def); -gchar *mc_config_get_string_raw (mc_config_t * mc_config, const gchar * group, const gchar * param, - const gchar * def); +MC_MOCKABLE gchar *mc_config_get_string_raw (mc_config_t * mc_config, const gchar * group, + const gchar * param, const gchar * def); gboolean mc_config_get_bool (mc_config_t * mc_config, const gchar * group, const gchar * param, gboolean def); int mc_config_get_int (mc_config_t * mc_config, const gchar * group, const gchar * param, int def); @@ -96,7 +96,7 @@ void mc_config_deinit_config_paths (void); const char *mc_config_get_data_path (void); const char *mc_config_get_cache_path (void); -const char *mc_config_get_home_dir (void); +MC_MOCKABLE const char *mc_config_get_home_dir (void); const char *mc_config_get_path (void); char *mc_config_get_full_path (const char *config_name); vfs_path_t *mc_config_get_full_vpath (const char *config_name); diff --git a/lib/tty/tty-ncurses.c b/lib/tty/tty-ncurses.c index fa503da78..776629779 100644 --- a/lib/tty/tty-ncurses.c +++ b/lib/tty/tty-ncurses.c @@ -41,6 +41,7 @@ #include "lib/global.h" #include "lib/strutil.h" /* str_term_form */ +#include "lib/util.h" #ifndef WANT_TERM_H #define WANT_TERM_H @@ -102,7 +103,7 @@ tty_setup_sigwinch (void (*handler) (int)) #ifdef SA_RESTART act.sa_flags = SA_RESTART; #endif /* SA_RESTART */ - sigaction (SIGWINCH, &act, &oact); + my_sigaction (SIGWINCH, &act, &oact); #endif /* SIGWINCH */ tty_create_winch_pipe (); diff --git a/lib/tty/tty.c b/lib/tty/tty.c index 55ba0e99f..c2ec4c506 100644 --- a/lib/tty/tty.c +++ b/lib/tty/tty.c @@ -53,6 +53,7 @@ #include "lib/global.h" #include "lib/strutil.h" +#include "lib/util.h" #include "tty.h" #include "tty-internal.h" @@ -146,7 +147,7 @@ tty_start_interrupt_key (void) #ifdef SA_RESTART act.sa_flags = SA_RESTART; #endif /* SA_RESTART */ - sigaction (SIGINT, &act, NULL); + my_sigaction (SIGINT, &act, NULL); } /* --------------------------------------------------------------------------------------------- */ @@ -159,7 +160,7 @@ tty_enable_interrupt_key (void) memset (&act, 0, sizeof (act)); act.sa_handler = sigintr_handler; sigemptyset (&act.sa_mask); - sigaction (SIGINT, &act, NULL); + my_sigaction (SIGINT, &act, NULL); got_interrupt = 0; } @@ -173,7 +174,7 @@ tty_disable_interrupt_key (void) memset (&act, 0, sizeof (act)); act.sa_handler = SIG_IGN; sigemptyset (&act.sa_mask); - sigaction (SIGINT, &act, NULL); + my_sigaction (SIGINT, &act, NULL); } /* --------------------------------------------------------------------------------------------- */ diff --git a/lib/util.h b/lib/util.h index c03ff6db9..77d4852a4 100644 --- a/lib/util.h +++ b/lib/util.h @@ -126,6 +126,11 @@ typedef struct mc_pipe_stream_t err; } mc_pipe_t; +/* sighandler_t is GNU extension */ +#ifndef HAVE_SIGHANDLER_T +typedef void (*sighandler_t) (int); +#endif + /*** structures declarations (and typedefs of structures)*****************************************/ /*** global variables defined in .c file *********************************************************/ @@ -200,6 +205,13 @@ const char *get_owner (uid_t uid); /* Returns a copy of *s until a \n is found and is below top */ const char *extract_line (const char *s, const char *top); +/* System call wrappers */ +MC_MOCKABLE sighandler_t my_signal (int signum, sighandler_t handler); +MC_MOCKABLE int my_sigaction (int signum, const struct sigaction *act, struct sigaction *oldact); +MC_MOCKABLE pid_t my_fork (void); +MC_MOCKABLE int my_execvp (const char *file, char *const argv[]); +MC_MOCKABLE char *my_get_current_dir (void); + /* Process spawning */ int my_system (int flags, const char *shell, const char *command); int my_systeml (int flags, const char *shell, ...); @@ -212,7 +224,7 @@ void mc_pclose (mc_pipe_t * p, GError ** error); GString *mc_pstream_get_string (mc_pipe_stream_t * ps); -void my_exit (int status); +MC_MOCKABLE void my_exit (int status); void save_stop_handler (void); /* Tilde expansion */ @@ -249,7 +261,7 @@ gboolean mc_util_make_backup_if_possible (const char *file_name, const char *bac gboolean mc_util_restore_from_backup_if_possible (const char *file_name, const char *backup_suffix); gboolean mc_util_unlink_backup_if_possible (const char *file_name, const char *backup_suffix); -char *guess_message_value (void); +MC_MOCKABLE char *guess_message_value (void); char *mc_build_filename (const char *first_element, ...); char *mc_build_filenamev (const char *first_element, va_list args); diff --git a/lib/utilunix.c b/lib/utilunix.c index 97f8349d9..65badd5df 100644 --- a/lib/utilunix.c +++ b/lib/utilunix.c @@ -137,11 +137,11 @@ i_cache_add (int id, int_cache *cache, int size, char *text, int *last) /* --------------------------------------------------------------------------------------------- */ static my_fork_state_t -my_fork (void) +my_fork_state (void) { pid_t pid; - pid = fork (); + pid = my_fork (); if (pid < 0) { @@ -175,12 +175,12 @@ my_system__save_sigaction_handlers (my_system_sigactions_t *sigactions) ignore.sa_handler = SIG_IGN; sigemptyset (&ignore.sa_mask); - sigaction (SIGINT, &ignore, &sigactions->intr); - sigaction (SIGQUIT, &ignore, &sigactions->quit); + my_sigaction (SIGINT, &ignore, &sigactions->intr); + my_sigaction (SIGQUIT, &ignore, &sigactions->quit); /* Restore the original SIGTSTP handler, we don't want ncurses' */ /* handler messing the screen after the SIGCONT */ - sigaction (SIGTSTP, &startup_handler, &sigactions->stop); + my_sigaction (SIGTSTP, &startup_handler, &sigactions->stop); } /* --------------------------------------------------------------------------------------------- */ @@ -188,9 +188,9 @@ my_system__save_sigaction_handlers (my_system_sigactions_t *sigactions) static void my_system__restore_sigaction_handlers (my_system_sigactions_t *sigactions) { - sigaction (SIGINT, &sigactions->intr, NULL); - sigaction (SIGQUIT, &sigactions->quit, NULL); - sigaction (SIGTSTP, &sigactions->stop, NULL); + my_sigaction (SIGINT, &sigactions->intr, NULL); + my_sigaction (SIGQUIT, &sigactions->quit, NULL); + my_sigaction (SIGTSTP, &sigactions->stop, NULL); } /* --------------------------------------------------------------------------------------------- */ @@ -329,7 +329,7 @@ get_group (gid_t gid) void save_stop_handler (void) { - sigaction (SIGTSTP, NULL, &startup_handler); + my_sigaction (SIGTSTP, NULL, &startup_handler); } /* --------------------------------------------------------------------------------------------- */ @@ -348,6 +348,61 @@ my_exit (int status) _exit (status); } +/* --------------------------------------------------------------------------------------------- */ +/** + * Wrapper for signal() system call. + */ + +sighandler_t +my_signal (int signum, sighandler_t handler) +{ + return signal (signum, handler); +} + +/* --------------------------------------------------------------------------------------------- */ +/** + * Wrapper for sigaction() system call. + */ + +int +my_sigaction (int signum, const struct sigaction *act, struct sigaction *oldact) +{ + return sigaction (signum, act, oldact); +} + +/* --------------------------------------------------------------------------------------------- */ +/** + * Wrapper for fork() system call. + */ + +pid_t +my_fork (void) +{ + return fork (); +} + +/* --------------------------------------------------------------------------------------------- */ +/** + * Wrapper for execvp() system call. + */ + +int +my_execvp (const char *file, char *const argv[]) +{ + return execvp (file, argv); +} + +/* --------------------------------------------------------------------------------------------- */ +/** + * Wrapper for g_get_current_dir() library function. + */ + +char * +my_get_current_dir (void) +{ + return g_get_current_dir (); +} + /* --------------------------------------------------------------------------------------------- */ /** * Call external programs. @@ -422,7 +477,7 @@ my_systemv (const char *command, char *const argv[]) my_system__save_sigaction_handlers (&sigactions); - fork_state = my_fork (); + fork_state = my_fork_state (); switch (fork_state) { case FORK_ERROR: @@ -430,12 +485,12 @@ my_systemv (const char *command, char *const argv[]) break; case FORK_CHILD: { - signal (SIGINT, SIG_DFL); - signal (SIGQUIT, SIG_DFL); - signal (SIGTSTP, SIG_DFL); - signal (SIGCHLD, SIG_DFL); + my_signal (SIGINT, SIG_DFL); + my_signal (SIGQUIT, SIG_DFL); + my_signal (SIGTSTP, SIG_DFL); + my_signal (SIGCHLD, SIG_DFL); - execvp (command, argv); + my_execvp (command, argv); my_exit (127); /* Exec error */ } MC_FALLTHROUGH; @@ -1036,7 +1091,7 @@ mc_realpath (const char *path, char *resolved_path) /* If it's a relative pathname use getwd for starters. */ if (!IS_PATH_SEP (*path)) { - new_path = g_get_current_dir (); + new_path = my_get_current_dir (); if (new_path == NULL) strcpy (got_path, ""); else diff --git a/lib/vfs/netutil.c b/lib/vfs/netutil.c index 3f31d46c3..a2654706c 100644 --- a/lib/vfs/netutil.c +++ b/lib/vfs/netutil.c @@ -32,6 +32,7 @@ #include /* memset() */ #include "lib/global.h" +#include "lib/util.h" #include "netutil.h" @@ -75,7 +76,7 @@ tcp_init (void) memset (&sa, 0, sizeof (sa)); sa.sa_handler = sig_pipe; sigemptyset (&sa.sa_mask); - sigaction (SIGPIPE, &sa, NULL); + my_sigaction (SIGPIPE, &sa, NULL); initialized = TRUE; } diff --git a/lib/vfs/utilvfs.h b/lib/vfs/utilvfs.h index ff94bdbde..aad3c892d 100644 --- a/lib/vfs/utilvfs.h +++ b/lib/vfs/utilvfs.h @@ -43,7 +43,7 @@ vfs_path_element_t *vfs_url_split (const char *path, int default_port, vfs_url_f int vfs_split_text (char *p); int vfs_mkstemps (vfs_path_t ** pname_vpath, const char *prefix, const char *basename); -void vfs_die (const char *msg); +MC_MOCKABLE void vfs_die (const char *msg); char *vfs_get_password (const char *msg); char *vfs_get_local_username (void); diff --git a/lib/vfs/vfs.c b/lib/vfs/vfs.c index f4dad4649..9add7212f 100644 --- a/lib/vfs/vfs.c +++ b/lib/vfs/vfs.c @@ -77,10 +77,10 @@ extern vfs_class *current_vfs; /*** global variables ****************************************************************************/ -struct vfs_dirent *mc_readdir_result = NULL; -GPtrArray *vfs__classes_list = NULL; -GString *vfs_str_buffer = NULL; -vfs_class *current_vfs = NULL; +MC_MOCKABLE struct vfs_dirent *mc_readdir_result = NULL; +MC_MOCKABLE GPtrArray *vfs__classes_list = NULL; +MC_MOCKABLE GString *vfs_str_buffer = NULL; +MC_MOCKABLE vfs_class *current_vfs = NULL; /*** file scope macro definitions ****************************************************************/ @@ -642,7 +642,7 @@ vfs_setup_cwd (void) if (vfs_get_raw_current_dir () == NULL) { - current_dir = g_get_current_dir (); + current_dir = my_get_current_dir (); vfs_set_raw_current_dir (vfs_path_from_str (current_dir)); g_free (current_dir); @@ -661,7 +661,7 @@ vfs_setup_cwd (void) me = vfs_path_get_last_path_vfs (vfs_get_raw_current_dir ()); if ((me->flags & VFSF_LOCAL) != 0) { - current_dir = g_get_current_dir (); + current_dir = my_get_current_dir (); tmp_vpath = vfs_path_from_str (current_dir); g_free (current_dir); diff --git a/lib/vfs/vfs.h b/lib/vfs/vfs.h index 55e9530ec..279b1eaf9 100644 --- a/lib/vfs/vfs.h +++ b/lib/vfs/vfs.h @@ -264,7 +264,7 @@ const vfs_path_t *vfs_get_raw_current_dir (void); void vfs_set_raw_current_dir (const vfs_path_t * vpath); gboolean vfs_current_is_local (void); -gboolean vfs_file_is_local (const vfs_path_t * vpath); +MC_MOCKABLE gboolean vfs_file_is_local (const vfs_path_t * vpath); char *vfs_strip_suffix_from_filename (const char *filename); @@ -318,13 +318,13 @@ off_t mc_lseek (int fd, off_t offset, int whence); DIR *mc_opendir (const vfs_path_t * vpath); struct vfs_dirent *mc_readdir (DIR * dirp); int mc_closedir (DIR * dir); -int mc_stat (const vfs_path_t * vpath, struct stat *buf); +MC_MOCKABLE int mc_stat (const vfs_path_t * vpath, struct stat *buf); int mc_mknod (const vfs_path_t * vpath, mode_t mode, dev_t dev); int mc_link (const vfs_path_t * vpath1, const vfs_path_t * vpath2); int mc_mkdir (const vfs_path_t * vpath, mode_t mode); int mc_rmdir (const vfs_path_t * vpath); int mc_fstat (int fd, struct stat *buf); -int mc_lstat (const vfs_path_t * vpath, struct stat *buf); +MC_MOCKABLE int mc_lstat (const vfs_path_t * vpath, struct stat *buf); int mc_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2); int mc_rename (const vfs_path_t * vpath1, const vfs_path_t * vpath2); int mc_chmod (const vfs_path_t * vpath, mode_t mode); @@ -336,9 +336,9 @@ int mc_unlink (const vfs_path_t * vpath); int mc_ctl (int fd, int ctlop, void *arg); int mc_setctl (const vfs_path_t * vpath, int ctlop, void *arg); int mc_open (const vfs_path_t * vpath, int flags, ...); -vfs_path_t *mc_getlocalcopy (const vfs_path_t * pathname_vpath); -int mc_ungetlocalcopy (const vfs_path_t * pathname_vpath, const vfs_path_t * local_vpath, - gboolean has_changed); +MC_MOCKABLE vfs_path_t *mc_getlocalcopy (const vfs_path_t * pathname_vpath); +MC_MOCKABLE int mc_ungetlocalcopy (const vfs_path_t * pathname_vpath, + const vfs_path_t * local_vpath, gboolean has_changed); int mc_mkstemps (vfs_path_t ** pname_vpath, const char *prefix, const char *suffix); /* Creating temporary files safely */ diff --git a/lib/widget/dialog-switch.h b/lib/widget/dialog-switch.h index 516309594..2215dd479 100644 --- a/lib/widget/dialog-switch.h +++ b/lib/widget/dialog-switch.h @@ -36,7 +36,7 @@ void dialog_switch_shutdown (void); void do_refresh (void); void repaint_screen (void); -void mc_refresh (void); +MC_MOCKABLE void mc_refresh (void); void dialog_change_screen_size (void); /*** inline functions ****************************************************************************/ diff --git a/lib/widget/input_complete.c b/lib/widget/input_complete.c index cd0ccbc87..2df36dfe6 100644 --- a/lib/widget/input_complete.c +++ b/lib/widget/input_complete.c @@ -88,7 +88,8 @@ typedef struct /*** forward declarations (file scope functions) *************************************************/ -GPtrArray *try_complete (char *text, int *lc_start, int *lc_end, input_complete_t flags); +MC_MOCKABLE GPtrArray *try_complete (char *text, int *lc_start, int *lc_end, + input_complete_t flags); void complete_engine_fill_completions (WInput * in); /*** file scope variables ************************************************************************/ diff --git a/lib/widget/wtools.h b/lib/widget/wtools.h index 73c56ca41..16f5fbdc6 100644 --- a/lib/widget/wtools.h +++ b/lib/widget/wtools.h @@ -80,7 +80,7 @@ WDialog *create_message (int flags, const char *title, const char *text, ...) G_GNUC_PRINTF (3, 4); /* Show message box, background safe */ -void message (int flags, const char *title, const char *text, ...) G_GNUC_PRINTF (3, 4); +MC_MOCKABLE void message (int flags, const char *title, const char *text, ...) G_GNUC_PRINTF (3, 4); /* *INDENT-ON* */ gboolean mc_error_message (GError ** mcerror, int *code); diff --git a/m4.include/mc-tests.m4 b/m4.include/mc-tests.m4 index aa553ff9a..51ca6b71a 100644 --- a/m4.include/mc-tests.m4 +++ b/m4.include/mc-tests.m4 @@ -41,22 +41,11 @@ AC_DEFUN([mc_UNIT_TESTS],[ AC_SUBST(CHECK_LIBS) fi AM_CONDITIONAL(HAVE_TESTS, test x"$have_check" = "xyes") + AS_IF([test x"$have_check" = "xyes"], [AC_DEFINE([HAVE_TESTS], [1], [Build with unit tests.])]) dnl sighandler_t is GNU extension dnl AC_USE_SYSTEM_EXTENSIONS is required AC_CHECK_TYPES([sighandler_t], [], [], [ #include ]) - - # on cygwin, the linker does not accept the "-z" option - case $host_os in - cygwin*) - TESTS_LDFLAGS="-Wl,--allow-multiple-definition" - ;; - *) - TESTS_LDFLAGS="-Wl,-z,muldefs" - ;; - esac - - AC_SUBST(TESTS_LDFLAGS) ]) diff --git a/src/background.c b/src/background.c index ce727c4bd..72a0eda73 100644 --- a/src/background.c +++ b/src/background.c @@ -49,6 +49,7 @@ #include "lib/tty/key.h" /* add_select_channel(), delete_select_channel() */ #include "lib/widget.h" /* message() */ #include "lib/event-types.h" +#include "lib/util.h" /* my_fork() */ #include "filemanager/fileopctx.h" /* file_op_context_t */ @@ -535,7 +536,7 @@ do_background (file_op_context_t *ctx, char *info) return (-1); } - pid = fork (); + pid = my_fork (); if (pid == -1) { int saved_errno = errno; diff --git a/src/cons.handler.c b/src/cons.handler.c index 5f58a4271..2a026960b 100644 --- a/src/cons.handler.c +++ b/src/cons.handler.c @@ -154,7 +154,7 @@ handle_console_linux (console_action_t action) break; } /* Get the console saver running */ - cons_saver_pid = fork (); + cons_saver_pid = my_fork (); if (cons_saver_pid < 0) { /* Cannot fork */ diff --git a/src/editor/edit-impl.h b/src/editor/edit-impl.h index a9f938cca..d01e322bc 100644 --- a/src/editor/edit-impl.h +++ b/src/editor/edit-impl.h @@ -228,9 +228,9 @@ void edit_paste_from_history (WEdit * edit); void edit_set_filename (WEdit * edit, const vfs_path_t * name_vpath); -void edit_load_syntax (WEdit * edit, GPtrArray * pnames, const char *type); +MC_MOCKABLE void edit_load_syntax (WEdit * edit, GPtrArray * pnames, const char *type); void edit_free_syntax_rules (WEdit * edit); -int edit_get_syntax_color (WEdit * edit, off_t byte_index); +MC_MOCKABLE int edit_get_syntax_color (WEdit * edit, off_t byte_index); void edit_syntax_dialog (WEdit * edit); void book_mark_insert (WEdit * edit, long line, int c); diff --git a/src/editor/editcomplete.h b/src/editor/editcomplete.h index 90ded8db8..9ed0db7ff 100644 --- a/src/editor/editcomplete.h +++ b/src/editor/editcomplete.h @@ -12,7 +12,7 @@ /*** declarations of public functions ************************************************************/ /* Public function for unit tests */ -char *edit_completion_dialog_show (const WEdit * edit, GQueue * compl, int max_width); +MC_MOCKABLE char *edit_completion_dialog_show (const WEdit * edit, GQueue * compl, int max_width); void edit_complete_word_cmd (WEdit * edit); diff --git a/src/editor/editmacros.h b/src/editor/editmacros.h index 5d234e0d7..ac34b59fb 100644 --- a/src/editor/editmacros.h +++ b/src/editor/editmacros.h @@ -12,7 +12,7 @@ /*** declarations of public functions ************************************************************/ int edit_store_macro_cmd (WEdit * edit); -gboolean edit_load_macro_cmd (WEdit * edit); +MC_MOCKABLE gboolean edit_load_macro_cmd (WEdit * edit); void edit_delete_macro_cmd (WEdit * edit); gboolean edit_repeat_macro_cmd (WEdit * edit); gboolean edit_execute_macro (WEdit * edit, int hotkey); diff --git a/src/editor/etags.c b/src/editor/etags.c index f5163bdae..31b2f2cd4 100644 --- a/src/editor/etags.c +++ b/src/editor/etags.c @@ -426,7 +426,7 @@ edit_get_match_keyword_cmd (WEdit *edit) for (i = 0; i < word_len; i++) g_string_append_c (match_expr, edit_buffer_get_byte (&edit->buffer, word_start + i)); - ptr = g_get_current_dir (); + ptr = my_get_current_dir (); path = g_strconcat (ptr, PATH_SEP_STR, (char *) NULL); g_free (ptr); diff --git a/src/execute.c b/src/execute.c index 4c2a1d3d1..17b407046 100644 --- a/src/execute.c +++ b/src/execute.c @@ -65,11 +65,11 @@ int pause_after_run = pause_on_dumb_terminals; /*** forward declarations (file scope functions) *************************************************/ -void do_execute (const char *shell, const char *command, int flags); -void do_executev (const char *shell, int flags, char *const argv[]); -char *execute_get_external_cmd_opts_from_config (const char *command, - const vfs_path_t * filename_vpath, - long start_line); +MC_MOCKABLE void do_execute (const char *shell, const char *command, int flags); +MC_MOCKABLE void do_executev (const char *shell, int flags, char *const argv[]); +MC_MOCKABLE char *execute_get_external_cmd_opts_from_config (const char *command, + const vfs_path_t * filename_vpath, + long start_line); /*** file scope variables ************************************************************************/ @@ -160,12 +160,12 @@ do_suspend_cmd (void) /* Make sure that the SIGTSTP below will suspend us directly, without calling ncurses' SIGTSTP handler; we *don't* want ncurses to redraw the screen immediately after the SIGCONT */ - sigaction (SIGTSTP, &startup_handler, &sigtstp_action); + my_sigaction (SIGTSTP, &startup_handler, &sigtstp_action); kill (getpid (), SIGTSTP); /* Restore previous SIGTSTP action */ - sigaction (SIGTSTP, &sigtstp_action, NULL); + my_sigaction (SIGTSTP, &sigtstp_action, NULL); } #endif /* SIGTSTP */ diff --git a/src/filemanager/layout.h b/src/filemanager/layout.h index 685f2c371..dd5a07d52 100644 --- a/src/filemanager/layout.h +++ b/src/filemanager/layout.h @@ -65,7 +65,7 @@ void setup_cmdline (void); void create_panel (int num, panel_view_mode_t type); void swap_panels (void); panel_view_mode_t get_panel_type (int idx); -panel_view_mode_t get_current_type (void); +MC_MOCKABLE panel_view_mode_t get_current_type (void); panel_view_mode_t get_other_type (void); int get_current_index (void); int get_other_index (void); diff --git a/src/filemanager/panel.h b/src/filemanager/panel.h index ea20a9639..2f4d8d549 100644 --- a/src/filemanager/panel.h +++ b/src/filemanager/panel.h @@ -181,7 +181,8 @@ void file_mark (WPanel * panel, int idx, int val); void do_file_mark (WPanel * panel, int idx, int val); gboolean panel_do_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type); -gboolean panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type); +MC_MOCKABLE gboolean panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, + enum cd_enum cd_type); gsize panel_get_num_of_sortable_fields (void); char **panel_get_sortable_fields (gsize * array_size); diff --git a/src/main.c b/src/main.c index 02a49ba20..0cf7a744b 100644 --- a/src/main.c +++ b/src/main.c @@ -208,7 +208,7 @@ init_sigchld (void) sigchld_action.sa_flags = SA_RESTART; #endif /* !SA_RESTART */ - if (sigaction (SIGCHLD, &sigchld_action, NULL) == -1) + if (my_sigaction (SIGCHLD, &sigchld_action, NULL) == -1) { #ifdef ENABLE_SUBSHELL /* @@ -499,7 +499,7 @@ main (int argc, char *argv[]) if (mc_global.tty.alternate_plus_minus) numeric_keypad_mode (); - (void) signal (SIGCHLD, SIG_DFL); /* Disable the SIGCHLD handler */ + (void) my_signal (SIGCHLD, SIG_DFL); /* Disable the SIGCHLD handler */ if (mc_global.tty.console_flag != '\0') handle_console (CONSOLE_DONE); diff --git a/src/subshell/common.c b/src/subshell/common.c index 72f001569..c196865c0 100644 --- a/src/subshell/common.c +++ b/src/subshell/common.c @@ -1403,7 +1403,7 @@ init_subshell (void) subshell_alive = TRUE; subshell_stopped = FALSE; - subshell_pid = fork (); + subshell_pid = my_fork (); if (subshell_pid == -1) { diff --git a/src/vfs/shell/shell.c b/src/vfs/shell/shell.c index f4133771a..b13fb9911 100644 --- a/src/vfs/shell/shell.c +++ b/src/vfs/shell/shell.c @@ -426,7 +426,7 @@ shell_pipeopen (struct vfs_s_super *super, const char *path, const char *argv[]) if ((pipe (fileset1) < 0) || (pipe (fileset2) < 0)) vfs_die ("Cannot pipe(): %m."); - res = fork (); + res = my_fork (); if (res != 0) { @@ -449,7 +449,7 @@ shell_pipeopen (struct vfs_s_super *super, const char *path, const char *argv[]) res = open ("/dev/null", O_WRONLY); close (fileset2[0]); close (fileset2[1]); - execvp (path, (char **) argv); + my_execvp (path, (char **) argv); my_exit (3); } } diff --git a/tests/lib/Makefile.am b/tests/lib/Makefile.am index 56585f979..47df3574a 100644 --- a/tests/lib/Makefile.am +++ b/tests/lib/Makefile.am @@ -4,8 +4,6 @@ SUBDIRS = . mcconfig search strutil vfs widget AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) @CHECK_CFLAGS@ -AM_LDFLAGS = @TESTS_LDFLAGS@ - LIBS = @CHECK_LIBS@ \ $(top_builddir)/lib/libmc.la diff --git a/tests/lib/mc_realpath.c b/tests/lib/mc_realpath.c index cd3ff106c..2af5406a6 100644 --- a/tests/lib/mc_realpath.c +++ b/tests/lib/mc_realpath.c @@ -125,7 +125,7 @@ main (void) tc_core = tcase_create ("Core"); /* writable directory where check creates temporary files */ - cwd = g_get_current_dir (); + cwd = my_get_current_dir (); g_setenv ("TEMP", cwd, TRUE); g_free (cwd); diff --git a/tests/lib/mcconfig/Makefile.am b/tests/lib/mcconfig/Makefile.am index 4643e40d8..97e41912b 100644 --- a/tests/lib/mcconfig/Makefile.am +++ b/tests/lib/mcconfig/Makefile.am @@ -6,8 +6,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir) \ @CHECK_CFLAGS@ -AM_LDFLAGS = @TESTS_LDFLAGS@ - LIBS = @CHECK_LIBS@ \ $(top_builddir)/lib/libmc.la diff --git a/tests/lib/utilunix__my_system-common.c b/tests/lib/utilunix__my_system-common.c index 06d64efaa..c7a8ad0de 100644 --- a/tests/lib/utilunix__my_system-common.c +++ b/tests/lib/utilunix__my_system-common.c @@ -28,11 +28,6 @@ #include "lib/vfs/vfs.h" -/* sighandler_t is GNU extension */ -#ifndef HAVE_SIGHANDLER_T -typedef void (*sighandler_t) (int); -#endif - /* --------------------------------------------------------------------------------------------- */ /* @CapturedValue */ @@ -40,6 +35,10 @@ static sigset_t *sigemptyset_set__captured; /* @ThenReturnValue */ static int sigemptyset__return_value = 0; +#ifdef sigemptyset +#undef sigemptyset +#endif + /* @Mock */ int sigemptyset (sigset_t *set) @@ -61,7 +60,7 @@ static int sigaction__return_value = 0; /* @Mock */ int -sigaction (int signum, const struct sigaction *act, struct sigaction *oldact) +my_sigaction (int signum, const struct sigaction *act, struct sigaction *oldact) { int *tmp_signum; struct sigaction *tmp_act; @@ -129,7 +128,7 @@ static sighandler_t signal__return_value = NULL; /* @Mock */ sighandler_t -signal (int signum, sighandler_t handler) +my_signal (int signum, sighandler_t handler) { int *tmp_signum; sighandler_t *tmp_handler; @@ -176,7 +175,7 @@ static pid_t fork__return_value; /* @Mock */ pid_t -fork (void) +my_fork (void) { return fork__return_value; } @@ -203,7 +202,7 @@ static int execvp__return_value = 0; /* @Mock */ int -execvp (const char *file, char *const argv[]) +my_execvp (const char *file, char *const argv[]) { char **one_arg; execvp__file__captured = g_strdup (file); diff --git a/tests/lib/vfs/Makefile.am b/tests/lib/vfs/Makefile.am index e5e78f835..447e62176 100644 --- a/tests/lib/vfs/Makefile.am +++ b/tests/lib/vfs/Makefile.am @@ -7,8 +7,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/lib/vfs \ @CHECK_CFLAGS@ -AM_LDFLAGS = @TESTS_LDFLAGS@ - EXTRA_DIST = mc.charsets LIBS = @CHECK_LIBS@ \ diff --git a/tests/lib/vfs/current_dir.c b/tests/lib/vfs/current_dir.c index 1cdd83593..d22a8d6b3 100644 --- a/tests/lib/vfs/current_dir.c +++ b/tests/lib/vfs/current_dir.c @@ -32,6 +32,7 @@ #include "lib/global.h" #include "lib/strutil.h" #include "lib/vfs/xdirentry.h" +#include "lib/util.h" #include "src/vfs/local/local.c" @@ -191,7 +192,7 @@ main (void) tc_core = tcase_create ("Core"); /* writable directory where check creates temporary files */ - cwd = g_get_current_dir (); + cwd = my_get_current_dir (); g_setenv ("TEMP", cwd, TRUE); g_free (cwd); diff --git a/tests/lib/vfs/relative_cd.c b/tests/lib/vfs/relative_cd.c index 1ba688590..aa701d2e2 100644 --- a/tests/lib/vfs/relative_cd.c +++ b/tests/lib/vfs/relative_cd.c @@ -31,6 +31,7 @@ #include "lib/strutil.h" #include "lib/vfs/xdirentry.h" #include "lib/vfs/path.h" +#include "lib/util.h" #include "src/vfs/local/local.c" @@ -203,7 +204,7 @@ main (void) tc_core = tcase_create ("Core"); /* writable directory where check creates temporary files */ - cwd = g_get_current_dir (); + cwd = my_get_current_dir (); g_setenv ("TEMP", cwd, TRUE); g_free (cwd); diff --git a/tests/lib/vfs/vfs_setup_cwd.c b/tests/lib/vfs/vfs_setup_cwd.c index e62315008..95ff79222 100644 --- a/tests/lib/vfs/vfs_setup_cwd.c +++ b/tests/lib/vfs/vfs_setup_cwd.c @@ -30,6 +30,7 @@ #include #include "lib/strutil.h" +#include "lib/util.h" #include "lib/vfs/xdirentry.h" #include "src/vfs/local/local.c" @@ -37,7 +38,7 @@ /* @Mock */ char * -g_get_current_dir (void) +my_get_current_dir (void) { return g_strdup ("/some/path"); } diff --git a/tests/lib/widget/Makefile.am b/tests/lib/widget/Makefile.am index 0cf0c7552..f4d51ddca 100644 --- a/tests/lib/widget/Makefile.am +++ b/tests/lib/widget/Makefile.am @@ -6,8 +6,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/lib/vfs \ @CHECK_CFLAGS@ -AM_LDFLAGS = @TESTS_LDFLAGS@ - LIBS = @CHECK_LIBS@ \ $(top_builddir)/lib/libmc.la diff --git a/tests/src/Makefile.am b/tests/src/Makefile.am index 798f4f383..e02f2fa51 100644 --- a/tests/src/Makefile.am +++ b/tests/src/Makefile.am @@ -12,8 +12,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/lib/vfs \ @CHECK_CFLAGS@ -AM_LDFLAGS = @TESTS_LDFLAGS@ - LIBS = @CHECK_LIBS@ \ $(top_builddir)/src/libinternal.la \ $(top_builddir)/lib/libmc.la diff --git a/tests/src/editor/Makefile.am b/tests/src/editor/Makefile.am index cf89d3331..0f50e4400 100644 --- a/tests/src/editor/Makefile.am +++ b/tests/src/editor/Makefile.am @@ -6,8 +6,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir) \ @CHECK_CFLAGS@ -AM_LDFLAGS = @TESTS_LDFLAGS@ - LIBS = @CHECK_LIBS@ \ $(top_builddir)/src/libinternal.la \ $(top_builddir)/lib/libmc.la diff --git a/tests/src/filemanager/Makefile.am b/tests/src/filemanager/Makefile.am index 9c980f39a..4796597bb 100644 --- a/tests/src/filemanager/Makefile.am +++ b/tests/src/filemanager/Makefile.am @@ -7,8 +7,6 @@ AM_CPPFLAGS = \ -DTEST_SHARE_DIR=\"$(abs_srcdir)\" \ @CHECK_CFLAGS@ -AM_LDFLAGS = @TESTS_LDFLAGS@ - LIBS = @CHECK_LIBS@ \ $(top_builddir)/src/libinternal.la \ $(top_builddir)/lib/libmc.la diff --git a/tests/src/vfs/extfs/helpers-list/Makefile.am b/tests/src/vfs/extfs/helpers-list/Makefile.am index 978029acf..3af2cd7bc 100644 --- a/tests/src/vfs/extfs/helpers-list/Makefile.am +++ b/tests/src/vfs/extfs/helpers-list/Makefile.am @@ -4,10 +4,6 @@ SUBDIRS = misc AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) -# This lets mc_parse_ls_l.c override MC's message() without the linker -# complaining about multiple definitions. -AM_LDFLAGS = @TESTS_LDFLAGS@ - LIBS = $(top_builddir)/lib/libmc.la if ENABLE_MCLIB diff --git a/tests/src/vfs/ftpfs/Makefile.am b/tests/src/vfs/ftpfs/Makefile.am index 294604bcd..c44c67695 100644 --- a/tests/src/vfs/ftpfs/Makefile.am +++ b/tests/src/vfs/ftpfs/Makefile.am @@ -7,8 +7,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/lib/vfs \ @CHECK_CFLAGS@ -AM_LDFLAGS = @TESTS_LDFLAGS@ - LIBS = @CHECK_LIBS@ \ $(top_builddir)/src/libinternal.la \ $(top_builddir)/lib/libmc.la