From 18f520b8f3bdcf56e473efdb1ae793e97c24b7e4 Mon Sep 17 00:00:00 2001 From: Ben Winston Date: Tue, 18 Jun 2024 11:16:09 -0400 Subject: refactor: get_x_field returns a pointer, for flexibility --- booki.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/booki.c b/booki.c index 77cea17..9360781 100644 --- a/booki.c +++ b/booki.c @@ -424,32 +424,32 @@ void init_book(BOOK* book) { #define ATTR_MATCH(cand, attr) (strncmp(cand, attr, strlen(attr)) == 0) -ES get_string_field(BOOK book, char* name) { +ES* get_string_field(BOOK* book, char* name) { if (ATTR_MATCH(name, "title")) - return book.title; + return &(book->title); else if (ATTR_MATCH(name, "author")) - return book.author; + return &(book->author); else if (ATTR_MATCH(name, "isbn")) - return book.isbn; + return &(book->isbn); else if (ATTR_MATCH(name, "language")) - return book.language; + return &(book->language); else if (ATTR_MATCH(name, "translator")) - return book.translator; + return &(book->translator); else if (ATTR_MATCH(name, "on")) - return book.on; + return &(book->on); else if (ATTR_MATCH(name, "_other")) - return book._other; + return &(book->_other); else - return default_es; + return &default_es; } -int get_number_field(BOOK book, char* name) { +int* get_number_field(BOOK* book, char* name) { if (ATTR_MATCH(name, "pages")) - return book.pages; + return &(book->pages); else if (ATTR_MATCH(name, "published")) - return book.published; + return &(book->published); else if (ATTR_MATCH(name, "id")) - return book.id; + return &(book->id); else return 0; } @@ -473,7 +473,7 @@ void print_book(BOOK book, bool all_fields) { // string fields if (datafield.type == booki_string) { - string_field = get_string_field(book, datafield.name); + string_field = *(get_string_field(&book, datafield.name)); // if we don't have anything in this field, don't print it if (!string_field.ptr) continue; @@ -481,7 +481,7 @@ void print_book(BOOK book, bool all_fields) { printf(esfmt, datafield.name, size, str); // number fields } else if (datafield.type == booki_number) { - number_field = get_number_field(book, datafield.name); + number_field = *(get_number_field(&book, datafield.name)); if (!number_field) continue; printf(intfmt, datafield.name, number_field); @@ -501,20 +501,20 @@ void write_book(BOOK book, FILE *output) { for (int i = 0; i < BOOK_FIELDS_COUNT; i++) { datafield = BOOK_FIELDS[i]; if (datafield.type == booki_string) { - string_field = get_string_field(book, datafield.name); + string_field = *(get_string_field(&book, datafield.name)); if (!string_field.ptr) continue; size = sprintf(str, "%s = ", datafield.name); size += concat_es_toml(&string_field, str + size); fwrite(str, 1, size, output); } else if (datafield.type == booki_number) { - number_field = get_number_field(book, datafield.name); + number_field = *(get_number_field(&book, datafield.name)); if (!number_field) continue; size = sprintf(str, "%s = %d\n", datafield.name, number_field); fwrite(str, 1, size, output); } else if (datafield.type == booki_raw) { - string_field = get_string_field(book, datafield.name); + string_field = *(get_string_field(&book, datafield.name)); if (!string_field.ptr) continue; size = sprintf(str, "%.*s\n", string_field.len, string_field.ptr); @@ -538,7 +538,7 @@ void free_book(BOOK book) { for (int i = 0; i < BOOK_FIELDS_COUNT; i++) { datafield = BOOK_FIELDS[i]; if (datafield.type == booki_string || datafield.type == booki_raw) { - string_field = get_string_field(book, datafield.name); + string_field = *(get_string_field(&book, datafield.name)); free_es(string_field.next); } -- cgit v1.2.3