cex

C/Curses file EXplorer
git clone git://git.wimdupont.com/cex.git
Log | Files | Refs | README | LICENSE

commit 01a5b19305c0001c6ced2b2e6185da557ada01c3
parent 8f395b3eb5e335a32dbc3afbd82a174d999cc46c
Author: Wim Dupont <wim@wimdupont.com>
Date:   Sun,  6 Jul 2025 10:18:05 +0200

added errormessages and ability to disable sudo

Diffstat:
Mcex.c | 44++++++++++++++++++++++++++++++++++++--------
Mconfig.def.h | 1+
2 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/cex.c b/cex.c @@ -57,6 +57,7 @@ static void update_child_win(void); static void print_top_title(void); static void print_bot_title(void); static void print_content(void); +static void print_error(size_t size, const char *fmt, ...); static void show_file_mime(void); static void select_file(const char *path); static void exe_selection(SelAction action, const char *askn); @@ -768,6 +769,22 @@ print_content(void) } void +print_error(size_t size, const char *fmt, ...) +{ + va_list ap; + char msg[size]; + + va_start(ap, fmt); + vsnprintf(msg, size, fmt, ap); + va_end(ap); + + move(maxy-1, 0); + clrtoeol(); + addstr(msg); + print_bot = FALSE; +} + +void show_file_mime(void) { int appsize = 256; @@ -1340,9 +1357,15 @@ void run_sudo_command(size_t size, const char *fmt, ...) { va_list ap; - char cmd[size]; + char cmd[size], *msg; sigset_t set; + if (!USE_SUDO_COMMANDS) { + msg = "Requires sudo command but USE_SUDO_COMMANDS is disabled."; + print_error(strlen(msg), msg); + return; + } + endwin(); if (sigemptyset (&set) == -1) @@ -1421,10 +1444,7 @@ rm_file(const char *fname) msg = "Could not remove file."; break; } - move(maxy-1, 0); - clrtoeol(); - addstr(msg); - print_bot = FALSE; + print_error(strlen(msg), msg); } return res; @@ -1472,16 +1492,22 @@ make_chown(void) struct passwd *usr; struct group *grp; long len = sysconf(_SC_LOGIN_NAME_MAX); - char owner[len], group[len]; + char owner[len], group[len], *err; prompt_answer(owner, len, "Owner name? "); prompt_answer(group, len, "Group name? "); - if ((usr = getpwnam(owner)) == NULL) + if ((usr = getpwnam(owner)) == NULL) { + err = "No results found for owner %s."; + print_error(strlen(err) + len, err, owner); return -1; + } - if ((grp = getgrnam(group)) == NULL) + if ((grp = getgrnam(group)) == NULL) { + err = "No results found for group %s."; + print_error(strlen(err) + len, err, group); return -1; + } if ((chown(curwin.winfiles[curwin.highlight].d_name, usr->pw_uid, grp->gr_gid)) != 0) { switch (errno) { @@ -1490,6 +1516,8 @@ make_chown(void) sudo_chown(owner, group, len); break; default: + err = "Error during chown: %d."; + print_error(strlen(err), err, errno); return errno; } } diff --git a/config.def.h b/config.def.h @@ -8,6 +8,7 @@ #define BORDER_SPACE_SIZE 2 #define SEARCHLEN 20 #define LN_ACCESS_DIR "$HOME/access" +#define USE_SUDO_COMMANDS 1 #define KEY_QUIT 'q' #define KEY_VUP 'k'