aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--booki.c38
1 files 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);
}