ESH

Executive Shell
git clone http://git.omkov.net/ESH
Log | Tree | Refs | README | Download

AuthorJamozed <[email protected]>
Date2021-03-30 08:57:34
Commit89d88c31e4685e1dedbcb1d4ffcb123f00febf52
Parent6fb6cdf3c2a00b9992af388fdb40c9dab63f6caf

Cleanup error handling in main

Diffstat

M src/main.c | 9 +++++----

1 files changed, 5 insertions, 4 deletions

diff --git a/src/main.c b/src/main.c
index 5bd0101..27df818 100644
--- a/src/main.c
+++ b/src/main.c
@@ -54,23 +54,24 @@ static void reset(int signo);
 
 int main(int ac, char *av[]) { (void)(ac);
 	signal(SIGINT, &reset); signal(SIGTSTP, SIG_IGN); signal(SIGQUIT, SIG_IGN);
-	if (errno) { warn("A: %s", serr()); }
+	if (errno) { warn("%s", serr()); }
 
 	do {
 		if (sigsetjmp(jmp, 1)) { fputc('\n', stdout); } jmpflag = true;
 
 		char *line = lineread(); fputc('\n', stdout);
-		if (!line) { printf("NULL\n"); error(0, "%s", serr()); }
+		if (!line) { if (errno) { warn("%s", serr()); } break; }
 
 		char **args = parse(line); free(line);
-		if (!args) { printf("PARSEFAIL\n"); error(1, "%s", serr()); }
+		if (!args) { if (errno) { warn("%s", serr()); } goto end; }
 
 		_ret = execute(args);
 
+end:;
 		for (size_t i = 0; args[i]; ++i) { free(args[i]); } free(args);
 	} while (_loop);
 
-	fputc('\n', stdout); return 0;
+	return warned;
 }
 
 static void reset(int signo) { (void)(signo);