543 Commits

Author SHA1 Message Date
Andrew Borodin
f80dc2ba2b Ticket #4637: panels not refreshed after editing file with internal editor.
(dialog_switch_process_pending): reload panels forced after closing
internal editor/viewer/diffviewer if screen size was not changed.

Fixes 213119c8da268911f53990b587de3751dfcc006a.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-03-22 09:13:23 +03:00
Andrew Borodin
7be7b0dffa Change indentation of preprocessor directives.
Avoid too large indention relative to the main code:

static char *
fsp_to_string (const struct statfs *fsp)
{
    return (char *) (fsp->f_fstypename);
    return fstype_to_string (fsp->f_type);
}

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-03-08 14:07:49 +03:00
Andrew Borodin
cafb4b7c3e Use macros in array declarations.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
2025-03-06 08:19:06 +01:00
Andrew Borodin
2893ee212f Add tests for edit_replace_cmd().
* (status_msg_init): add MC_MOCKABLE attribute.
  * (status_msg_deinit): likewise.
  * (edit_search_update_callback): likewise.
  * (edit_dialog_replace_show): add MC_MOCKABLE and make public.
  * (edit_dialog_replace_prompt_show): likewise.
  * (edit_search_options): make public.
  * (B_REPLACE_ALL, B_REPLACE_ONE, B_SKIP_REPLACE): likewise.
  * (macros_list): init explicitly.
  * tests/src/editor/mc.charsets: add ASCII charset.
  * tests/src/editor/edit_replace_cmd.c: new file.
  * tests/src/editor/Makefile.am: add new test.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-02-23 18:52:47 +03:00
Yury V. Zaytsev
8406bddbd4 formatting: step 6 - manual tweaks
* Reformat tests with magic comma
* Remove macro guards causing unstable formatting

```
find . -type file -name '*.[ch]' | xargs sed -i '' -E 's|# *endif.+//.+$|#endif|g'
```

Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
2025-02-02 19:38:47 +01:00
Yury V. Zaytsev
c3ff1763f6 formatting: step 4 - reformat all files with make indent
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
2025-02-02 19:38:47 +01:00
Andrew Borodin
8ade31c315 formatting: step 2.3 - use designated initializer for quick_dialog_t structures
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
2025-02-02 19:17:21 +01:00
Yury V. Zaytsev
bc4da2a92d formatting: step 2.1 - remove indent control comments
```
master % find . -type file -name '*.[ch]' | xargs sed -i '' '/INDENT-ON/d'
master % find . -type file -name '*.[ch]' | xargs sed -i '' '/INDENT-OFF/d'
```

Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
2025-02-02 19:16:54 +01:00
Yury V. Zaytsev
851a1a2dae Ticket #4592: migrate to clang-format - step 1: convert comments /* */ -> //
"Safe" automatic replacement and then manual tweaks:

```
find . -type file -name '*.[ch]' | xargs sed -i '' -E '/^\/\*/! s|/\*([^/]+)\*/$|//\1|g'
find . -type file -name '*.[ch]' | xargs sed -i '' -E s/ +$//
```

Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
2025-02-02 19:13:21 +01:00
Yury V. Zaytsev
8cba5f6e51 doc: switch links to https://, update or remove dead links
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
2025-01-31 10:12:32 +01:00
Andrew Borodin
a493aa9b3b Ticket #4630: mc doesn't fully resize itself...
if reading directory while terminal's resized.

(dialog_change_screen_size): don't flush SIGWINCH pipe if top_dlg isn't
created yet.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-01-25 18:04:41 +03:00
Andrew Borodin
4b96b8d5f3 Update copyright years.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-01-11 12:14:08 +03:00
Andreas Mohr
b6f126bf66 (quick_create_labeled_input): fix potential leak of memory.
/tmp/portage/app-misc/mc-9999/work/mc-9999/lib/widget/quick.c:150:9: warning: Potential leak of memory pointed to by 'label.quick_widget' [clang-analyzer-unix.Malloc]
  150 |         return;
      |         ^

Found by Clang-19 Static Analyzer.

Signed-off-by: Andreas Mohr <and@gmx.li>
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-01-11 12:13:17 +03:00
Andrew Borodin
5c5dc8ccae (listbox_drawscroll:) fix division by zero warning.
Make Static Analyzer happy.

lib/widget/listbox.c:119:51: warning: Division by zero [clang-analyzer-core.DivideZero]
  119 |         line = 1 + ((l->current * (w->lines - 2)) / length);

Found by Clang-19 Static Analyzer.

Reported-by: Andreas Mohr <and@gmx.li>
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-01-11 12:13:17 +03:00
Andreas Mohr
52d5626f9d (quick_dialog_skip): fix undefined behavior.
quick.c:432:28: runtime error: member access within null pointer of type 'Widget' (aka 'struct Widget')
   #0 in quick_dialog_skip lib/widget/quick.c:432:28
   #1 in file_mask_dialog src/filemanager/filegui.c:1462:19
   #2 in do_confirm_copy_move src/filemanager/file.c:1977:11
   #3 in panel_operate src/filemanager/file.c:3536:16
   #4 in copy_cmd src/filemanager/./cmd.h:111:5
   #5 in midnight_execute_cmd src/filemanager/filemanager.c:1177:9
   #6 in midnight_callback src/filemanager/filemanager.c
   #7 in send_message lib/widget/../../lib/widget/widget-common.h:255:15
   #8 in buttonbar_call lib/widget/buttonbar.c:157:15
   #9 in buttonbar_callback lib/widget/buttonbar.c:174:42
   #10 in send_message lib/widget/../../lib/widget/widget-common.h:255:15
   #11 in group_handle_hotkey lib/widget/group.c:566:23
   #12 in group_default_callback lib/widget/group.c:640:16
   #13 in dlg_default_callback lib/widget/dialog.c:370:16
   #14 in midnight_callback src/filemanager/filemanager.c:1615:16
   #15 in send_message lib/widget/../../lib/widget/widget-common.h:255:15
   #16 in group_handle_key lib/widget/group.c:503:15
   #17 in group_default_callback lib/widget/group.c:637:16
   #18 in dlg_key_event lib/widget/dialog.c:252:19
   #19 in dlg_process_event lib/widget/dialog.c:539:9
   #20 in frontend_dlg_run lib/widget/dialog.c:321:9
   #21 in dlg_run lib/widget/dialog.c:573:5
   #22 in do_nc src/filemanager/filemanager.c:1826:16
   #23 in main src/main.c:469:21
   #24 in <null> <null>
   #25 in __libc_start_main <null>
   #26 in _start <null>

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior quick.c:432:28.

Found by Clang-19 Static Analyzer.

Signed-off-by: Andreas Mohr <and@gmx.li>
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-01-11 12:13:17 +03:00
Andreas Mohr
e85297c0be Fix garbage return value warning.
Make Static Analyzer happy.

Bug Group   Bug Type              File                     Function/Method       Line
Logic error Garbage return value  src/filemanager/boxes.c  cd_box                1236
Logic error Garbage return value  lib/widget/wtools.c      fg_input_dialog_help  198

Found by Clang-19 Static Analyzer.

Signed-off-by: Andreas Mohr <and@gmx.li>
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-01-11 12:13:17 +03:00
Andreas Mohr
9af3991d44 (widget_focus): fix -Wanalyzer-deref-before-check warning
widget-common.c: In function 'widget_focus':
widget-common.c:123:12: error: check of '*g.current' for NULL after already dereferencing it []8;;https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check-Werror=analyzer-deref-before-check]8;;]
  123 |         if (g->current == NULL || !widget_get_state (WIDGET (g->current->data), WST_FOCUSED))
      |            ^
  'widget_focus': event 1
    |
    |  116 |     if (g == NULL)
    |      |        ^
    |      |        |
    |      |        (1) following 'false' branch (when 'g' is non-NULL)...
    |
  'widget_focus': event 2
    |
    |  119 |     if (WIDGET (g->current->data) != w)
    |      |                 ~^~~~~~~~~
    |      |                  |
    |      |                  (2) ...to here
../../lib/widget/widget-common.h:15:31: note: in definition of macro 'WIDGET'
    |   15 | #define WIDGET(x) ((Widget *)(x))
    |      |                               ^
    |
  'widget_focus': event 3
    |
    |widget-common.c:119:27:
    |  119 |     if (WIDGET (g->current->data) != w)
../../lib/widget/widget-common.h:15:31: note: in definition of macro 'WIDGET'
    |   15 | #define WIDGET(x) ((Widget *)(x))
    |      |                               ^
    |
  'widget_focus': events 4-6
    |
    |widget-common.c:119:8:
    |  119 |     if (WIDGET (g->current->data) != w)
    |      |        ^
    |      |        |
    |      |        (4) following 'true' branch...
    |  120 |     {
    |  121 |         widget_do_focus (WIDGET (g->current->data), FALSE);
    |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |         |
    |      |         (5) ...to here
    |  122 |         /* Test if focus lost was allowed and focus has really been loose */
    |  123 |         if (g->current == NULL || !widget_get_state (WIDGET (g->current->data), WST_FOCUSED))
    |      |            ~
    |      |            |
    |      |            (6) pointer '*g.current' is checked for NULL here but it was already dereferenced at (3)
    |

Found by gcc-14 analyzer

Signed-off-by: Andreas Mohr <and@gmx.li>
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-01-11 12:13:17 +03:00
Andrew Borodin
b5ec741e80 Join create_message() and do_create_message().
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-01-11 12:13:16 +03:00
Andrew Borodin
1eb9a944ac Make message box with button.
* (bg_message): use query_dialog() instead of fg_message().
  * (message): likewise.
  * (fg_message): isn't used anymore. Remove.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2025-01-11 12:13:16 +03:00
Yury V. Zaytsev
93b539444b Ticket #4584: re-implement mocking via weak symbols instead of symbol duplication
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
2024-10-19 08:56:40 +02:00
Yury V. Zaytsev
b8e2a376e3 Ticket #4495: check if environ is defined to fix redefinition on Alpine
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
2024-10-18 20:57:43 +02:00
Andrew Borodin
6718b3ec26 Indentation using GNU indent-2.2.13.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-06-02 12:49:13 +03:00
Andrew Borodin
ab3e3339bb vfs_dirent: add new member d_len to get rid of d_name length calculation.
* (vfs_dirent_assign): set d_len up.
  * (mc_readdir): sync with new vfs_dirent: use d_len member.
  * (filename_completion_function): likewise.
  * (handle_dirent): likewise.
  * (find_ignore_dir_search): add 2nd argument to use length of
    directory name if it's known.
  * (do_search): sync with modified vfs_dirent and find_ignore_dir_search().
  * (NLENGTH): remove.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-06-02 12:41:34 +03:00
Andrew Borodin
f4183ed2f2 (filename_completion_function): use DIR_IS_DOT() macro.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-06-02 12:41:34 +03:00
Andrew Borodin
75ee44db20 Use listbox_add_item_take() in obvious cases.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-06-02 12:41:34 +03:00
Andrew Borodin
401cd4a16c (listbox_add_item_take): new WListbox API.
Add new item to a listbox taking ownerhip of item text
and avoid a string duplication.

(listbox_add_item): reimplement using listbox_add_item_take().

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-06-02 12:41:34 +03:00
Andrew Borodin
e496af7a1c input complete: reimplement using GPtrArray.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-06-02 12:41:32 +03:00
Andrew Borodin
4eacf0f99b (insert_text): constify argument.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-06-02 12:40:02 +03:00
Andrew Borodin
2ee620f74f Ticket #4292: fix redundant back slashes for autocomplete.
Steps to reproduce:

1. Create file owth a space in the name:
  touch "a b"
There should no other files with name begins with "a" in the directory.
2. Press Shift-F4 to open editor
3. Press Shift-F2 to display dialog window "Save as..."
4. Press Esc+Tab to fill an input line

Result:
a\ b will appear in the edit field.
If you attempt to save the file, the back slash will be in the filename.

Expected result:
no any extra back slashes in the file name.

Soution: escape only '?', '*', and '&' symbols as described in the
manual page (see a11995e12b88285e044f644904c306ed6c342ad0).

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-05-19 19:30:07 +03:00
Andrew Borodin
e6ae50191b (fetch_hosts): refactoring.
Reduce variablle scope.
Refactor loops.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-04-07 16:38:11 +03:00
Andrew Borodin
4929248f30 hostname complition: refactoring: use GPtrArray. 2024-04-07 16:38:11 +03:00
Andrew Borodin
aa38245e85 Merge lib/strescape.h into lib/strutil.h. Rename functions.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-04-07 16:38:11 +03:00
Andrew Borodin
fe42478b97 Update copyright years.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-01-01 09:46:17 +03:00
Andrew Borodin
85b1cec81e lib/widget/input_complete.c: remove intermediate variables.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-12-31 19:28:44 +03:00
Andrew Borodin
94daff9071 (menubar_execute_cmd): move CK_Help handler to separate function menubar_help().
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-12-31 19:28:44 +03:00
Andrew Borodin
20dd30ada3 (dlg_execute_cmd): move CK_Help handler to separate function dlg_help().
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-12-31 19:28:44 +03:00
Andrew Borodin
018687b12f Fix comments of history and panels.ini files location.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-11-06 21:06:15 +03:00
Andrew Borodin
f1cf92f435 Indentation.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-08-04 21:04:55 +03:00
Andrew Borodin
ee5bf223fb (hotkey_draw): constify argument.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-08-04 21:04:55 +03:00
Andrew Borodin
d243d467a8 (widget_selectcolor): constify argument.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-08-04 21:04:55 +03:00
Andrew Borodin
afaa3f075a lib/widget/quick.h: remove unneeded #include.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-08-04 21:04:54 +03:00
Andrew Borodin
702c3634e5 Move the some stuff from dialog.[ch] to dialog-switch.[ch]:
* variables: top_dlg, fast_refresh;
  * function: do_refresh().

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-08-04 21:04:54 +03:00
Andrew Borodin
fc6cc7bfc3 lib/widget/widget-common.h: rename include guard.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-08-04 21:04:54 +03:00
Andrew Borodin
ea40129743 Menu: renames:
WMenuBar::selected -> WMenuBar::current
  menu_t::selected -> menu_t::current

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-08-04 21:04:54 +03:00
Andrew Borodin
35b5d8e2f2 WListbox: renames:
WListbox::pos -> WListbox::current
  listbox_select_entry() -> listbox_set_current()
  listbox_get_nth_item() -> listbox_get_nth_entry()

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-08-04 21:04:54 +03:00
Andrew Borodin
e6cb6591b3 (dlg_close): rename from dlg_stop().
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-08-04 21:04:11 +03:00
Andrew Borodin
c157b048e5 Listbox window: rename functions.
create_listbox_window -> listbox_window_new
create_listbox_window_centered -> listbox_window_new_centered
run_listbox -> listbox_run
run_listbox_with_data -> listbox_run_with_data

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-03-19 20:34:24 +03:00
Andrew Borodin
d9383ba8b3 (buttonbar_find): rename from find_buttonbar.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-03-19 20:34:24 +03:00
Andrew Borodin
fd2d5b49ac Menu: rename functions.
menu_entry_create -> menu_entry_new
menu_separator_create -> menu_separator_new
create_menu -> menu_new
destroy_menu -> menu_free
find_menubar -> menubar_find

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-03-19 20:34:24 +03:00
Andrew Borodin
47da3a764a (dlg_default_destroy): send MSG_DESTROY to the dialog itself
...to avoid various memory leaks.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2023-03-19 20:34:24 +03:00