From f95ddbe45db70bf58be577607142ba9fa5a77843 Mon Sep 17 00:00:00 2001 From: cancel Date: Tue, 7 Jan 2020 02:57:55 +0900 Subject: [PATCH] Fix up more prefs reading code --- prefs.c | 19 ++++++++++--------- prefs.h | 15 +++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/prefs.c b/prefs.c index b5a9cd2..3746429 100644 --- a/prefs.c +++ b/prefs.c @@ -3,12 +3,10 @@ ORCA_FORCE_NO_INLINE Readprefs_result prefs_read_line(FILE* file, char* buf, Usz bufsize, - Usz* out_strlen, char** out_left, - Usz* out_leftsize, char** out_right, - Usz* out_rightsize) { + char** out_left, Usz* out_leftsize, + char** out_right, Usz* out_rightsize) { Usz len, a0, a1, b0, b1; char* s; - *out_strlen = 0; if (bufsize < 2) goto insufficient_buffer; #if SIZE_MAX > INT_MAX @@ -24,7 +22,6 @@ Readprefs_result prefs_read_line(FILE* file, char* buf, Usz bufsize, len = strlen(buf); if (len == bufsize - 1 && buf[len - 1] != '\n' && !feof(file)) goto insufficient_buffer; - *out_strlen = len - 1; a0 = 0; // start of left for (;;) { if (a0 == len) @@ -90,13 +87,17 @@ eof: ioerror: err = Readprefs_io_error; goto fail; -ignore: - s[len - 1] = '\0'; - err = Readprefs_irrelevant; - goto fail; fail: *out_left = NULL; *out_leftsize = 0; + goto no_right; +ignore: + s[len - 1] = '\0'; + *out_left = s; + *out_leftsize = len; + err = Readprefs_irrelevant; + goto no_right; +no_right: *out_right = NULL; *out_rightsize = 0; return err; diff --git a/prefs.h b/prefs.h index f1ef48f..7b30889 100644 --- a/prefs.h +++ b/prefs.h @@ -3,14 +3,13 @@ #include // FILE cannot be forward declared typedef enum { - Readprefs_left_and_right = 0, - Readprefs_irrelevant, - Readprefs_buffer_too_small, - Readprefs_eof, - Readprefs_io_error, + Readprefs_left_and_right = 0, // left and right will be set + Readprefs_irrelevant, // only left will be set + Readprefs_buffer_too_small, // neither will be set + Readprefs_eof, // " + Readprefs_io_error, // " } Readprefs_result; Readprefs_result prefs_read_line(FILE* file, char* buf, Usz bufsize, - Usz* out_linelen, char** out_left, - Usz* out_leftlen, char** out_right, - Usz* out_rightlen); + char** out_left, Usz* out_leftlen, + char** out_right, Usz* out_rightlen);