isobusfs: treat interactive exit as control flow, not error

The cmd_exit() function used -EINTR to signal a clean exit from the
interactive mode. This is semantically incorrect because EINTR is an
errno value meant for system call interruptions, not application-level
control flow.

Stop using -EINTR for cmd_exit(). Introduce ISOBUSFS_CLI_RET_EXIT (a
positive return code) to distinguish control flow from actual errors.
Map this to exit code 0 in main(), keeping negative errno values for
real errors. This makes the exit path explicit and prevents confusion
with actual interrupted system calls.

Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
pull/629/head
Oleksij Rempel 2026-01-06 11:19:50 +01:00 committed by Oleksij Rempel
parent 5a681968a2
commit a5bd791999
3 changed files with 9 additions and 2 deletions

View File

@ -671,6 +671,10 @@ int main(int argc, char *argv[])
while (1) { while (1) {
ret = isobusfs_cli_process_events_and_tasks(priv); ret = isobusfs_cli_process_events_and_tasks(priv);
if (ret == ISOBUSFS_CLI_RET_EXIT) {
ret = 0;
break;
}
if (ret) if (ret)
break; break;
} }

View File

@ -13,6 +13,9 @@
#define ISOBUSFS_CLI_MAX_EPOLL_EVENTS 10 #define ISOBUSFS_CLI_MAX_EPOLL_EVENTS 10
#define ISOBUSFS_CLI_DEFAULT_WAIT_TIMEOUT_MS 1000 /* ms */ #define ISOBUSFS_CLI_DEFAULT_WAIT_TIMEOUT_MS 1000 /* ms */
/* internal return codes, not errno values */
#define ISOBUSFS_CLI_RET_EXIT 1
enum isobusfs_cli_state { enum isobusfs_cli_state {
ISOBUSFS_CLI_STATE_CONNECTING, ISOBUSFS_CLI_STATE_CONNECTING,
ISOBUSFS_CLI_STATE_IDLE, ISOBUSFS_CLI_STATE_IDLE,

View File

@ -66,8 +66,8 @@ static int cmd_help(struct isobusfs_priv *priv, const char *options)
static int cmd_exit(struct isobusfs_priv *priv, const char *options) static int cmd_exit(struct isobusfs_priv *priv, const char *options)
{ {
pr_int("exit interactive mode\n"); pr_int("exit interactive mode\n");
/* Return -EINTR to indicate the program should exit */
return -EINTR; return ISOBUSFS_CLI_RET_EXIT;
} }
static int cmd_dmesg(struct isobusfs_priv *priv, const char *options) static int cmd_dmesg(struct isobusfs_priv *priv, const char *options)