From 8bcebb4f3f7a6e04fbe2ef4cc92c8489ab55cdbc Mon Sep 17 00:00:00 2001 From: anon Date: Sat, 25 Jan 2025 14:03:27 +0100 Subject: [PATCH] more error handling --- source/directive.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/directive.c b/source/directive.c index 4a475b9..49fa360 100644 --- a/source/directive.c +++ b/source/directive.c @@ -177,6 +177,9 @@ int execute_directive_file(FILE * f) { goto recovery; \ } \ } while (0) + #define CHECK(x) do { \ + if (x) { goto recovery; } \ + } while (0) #define CHECK_FORMAT(n, x) do { \ if (n != x) { \ errorn(E_FORMAT); \ @@ -265,7 +268,7 @@ int execute_directive_file(FILE * f) { mode = str_to_mode(buffer); if (entry->st.st_mode != mode) { - mychmod(entry->name, mode); + CHECK(mychmod(entry->name, mode)); } NEXT_FIELD; } @@ -280,7 +283,7 @@ int execute_directive_file(FILE * f) { if (strcmp(usr->pw_name, buffer) || strcmp(grp->gr_name, buffer2)) { - mychown(entry->name, buffer, buffer2); + CHECK(mychown(entry->name, buffer, buffer2)); } NEXT_FIELD; } @@ -316,7 +319,7 @@ int execute_directive_file(FILE * f) { for (int i = 0; i < entries.n; i++) { entry_t * entry = &kv_A(entries, i); if (!entry->is_mentioned) { - mydelete(entry->name); + CHECK(mydelete(entry->name)); } } @@ -336,6 +339,7 @@ int execute_directive_file(FILE * f) { } #undef NEXT_FIELD + #undef CHECK #undef CHECK_FORMAT return 0;