aboutsummaryrefslogtreecommitdiff
path: root/ini_file.c
diff options
context:
space:
mode:
authorClecio Jung2023-04-15 11:44:47 -0300
committerClecio Jung2023-04-15 11:44:47 -0300
commit9826b77f89c80fac287fa02a2fe432ac8e5ea462 (patch)
tree94b8fe04184fa45820abfa670f0820b9a619edb3 /ini_file.c
parentd7119c21fa566d2d5834cc5aa8627655ee849160 (diff)
downloadlibini-9826b77f89c80fac287fa02a2fe432ac8e5ea462.tar.xz
libini-9826b77f89c80fac287fa02a2fe432ac8e5ea462.tar.zst
Adding new search functions
Diffstat (limited to 'ini_file.c')
-rw-r--r--ini_file.c110
1 files changed, 86 insertions, 24 deletions
diff --git a/ini_file.c b/ini_file.c
index e07b9b1..91082ee 100644
--- a/ini_file.c
+++ b/ini_file.c
@@ -417,20 +417,15 @@ enum Ini_File_Errors ini_file_find_section(struct Ini_File *const ini_file, cons
return error;
}
-enum Ini_File_Errors ini_file_find_property(struct Ini_File *const ini_file, const char *const section, const char *const key, char **value) {
+enum Ini_File_Errors ini_section_find_property(struct Ini_Section *const ini_section, const char *const key, char **value) {
enum Ini_File_Errors error;
- struct Ini_Section *ini_section;
size_t property_index;
- if ((ini_file == NULL) || (key == NULL) || (value == NULL)) {
+ if ((ini_section == NULL) || (value == NULL)) {
return ini_invalid_parameters;
}
if (key[0] == '\0') {
return ini_invalid_parameters;
}
- error = ini_file_find_section(ini_file, section, &ini_section);
- if (error != ini_no_error) {
- return error;
- }
error = ini_file_find_key_index(ini_section, key, strlen(key), &property_index);
if (error == ini_no_error) {
*value = ini_section->properties[property_index].value;
@@ -438,18 +433,25 @@ enum Ini_File_Errors ini_file_find_property(struct Ini_File *const ini_file, con
return error;
}
-enum Ini_File_Errors ini_file_find_integer(struct Ini_File *const ini_file, const char *const section, const char *const key, long *integer) {
- char *value, *end;
- long i_value;
+enum Ini_File_Errors ini_file_find_property(struct Ini_File *const ini_file, const char *const section, const char *const key, char **value) {
enum Ini_File_Errors error;
- if (integer == NULL) {
+ struct Ini_Section *ini_section;
+ if ((ini_file == NULL) || (key == NULL) || (value == NULL)) {
return ini_invalid_parameters;
}
- error = ini_file_find_property(ini_file, section, key, &value);
+ if (key[0] == '\0') {
+ return ini_invalid_parameters;
+ }
+ error = ini_file_find_section(ini_file, section, &ini_section);
if (error != ini_no_error) {
return error;
}
- i_value = strtol(value, &end, 10);
+ return ini_section_find_property(ini_section, key, value);
+}
+
+static enum Ini_File_Errors convert_to_integer(const char *const value, long *const integer) {
+ char *end;
+ long i_value = strtol(value, &end, 10);
if (*end != '\0') {
return ini_not_integer;
}
@@ -457,18 +459,35 @@ enum Ini_File_Errors ini_file_find_integer(struct Ini_File *const ini_file, cons
return ini_no_error;
}
-enum Ini_File_Errors ini_file_find_unsigned(struct Ini_File *const ini_file, const char *const section, const char *const key, unsigned long *uint) {
- char *value, *end;
- unsigned long ui_value;
+enum Ini_File_Errors ini_section_find_integer(struct Ini_Section *const ini_section, const char *const key, long *integer) {
+ char *value;
enum Ini_File_Errors error;
- if (uint == NULL) {
+ if (integer == NULL) {
+ return ini_invalid_parameters;
+ }
+ error = ini_section_find_property(ini_section, key, &value);
+ if (error != ini_no_error) {
+ return error;
+ }
+ return convert_to_integer(value, integer);
+}
+
+enum Ini_File_Errors ini_file_find_integer(struct Ini_File *const ini_file, const char *const section, const char *const key, long *integer) {
+ char *value;
+ enum Ini_File_Errors error;
+ if (integer == NULL) {
return ini_invalid_parameters;
}
error = ini_file_find_property(ini_file, section, key, &value);
if (error != ini_no_error) {
return error;
}
- ui_value = strtoul(value, &end, 10);
+ return convert_to_integer(value, integer);
+}
+
+static enum Ini_File_Errors convert_to_unsigned(const char *const value, unsigned long *const uint) {
+ char *end;
+ unsigned long ui_value = strtoul(value, &end, 10);
if (*end != '\0') {
return ini_not_unsigned;
}
@@ -476,25 +495,68 @@ enum Ini_File_Errors ini_file_find_unsigned(struct Ini_File *const ini_file, con
return ini_no_error;
}
-enum Ini_File_Errors ini_file_find_float(struct Ini_File *const ini_file, const char *const section, const char *const key, double *real) {
- char *value, *end;
- double d_value;
+enum Ini_File_Errors ini_section_find_unsigned(struct Ini_Section *const ini_section, const char *const key, unsigned long *uint) {
+ char *value;
enum Ini_File_Errors error;
- if (real == NULL) {
+ if (uint == NULL) {
+ return ini_invalid_parameters;
+ }
+ error = ini_section_find_property(ini_section, key, &value);
+ if (error != ini_no_error) {
+ return error;
+ }
+ return convert_to_unsigned(value, uint);
+}
+
+enum Ini_File_Errors ini_file_find_unsigned(struct Ini_File *const ini_file, const char *const section, const char *const key, unsigned long *uint) {
+ char *value;
+ enum Ini_File_Errors error;
+ if (uint == NULL) {
return ini_invalid_parameters;
}
error = ini_file_find_property(ini_file, section, key, &value);
if (error != ini_no_error) {
return error;
}
- d_value = strtod(value, &end);
+ return convert_to_unsigned(value, uint);
+}
+
+static enum Ini_File_Errors convert_to_double(const char *const value, double *const real) {
+ char *end;
+ double d_value = strtod(value, &end);
if (*end != '\0') {
- return ini_not_float;
+ return ini_not_double;
}
*real = d_value;
return ini_no_error;
}
+enum Ini_File_Errors ini_section_find_double(struct Ini_Section *const ini_section, const char *const key, double *real) {
+ char *value;
+ enum Ini_File_Errors error;
+ if (real == NULL) {
+ return ini_invalid_parameters;
+ }
+ error = ini_section_find_property(ini_section, key, &value);
+ if (error != ini_no_error) {
+ return error;
+ }
+ return convert_to_double(value, real);
+}
+
+enum Ini_File_Errors ini_file_find_double(struct Ini_File *const ini_file, const char *const section, const char *const key, double *real) {
+ char *value;
+ enum Ini_File_Errors error;
+ if (real == NULL) {
+ return ini_invalid_parameters;
+ }
+ error = ini_file_find_property(ini_file, section, key, &value);
+ if (error != ini_no_error) {
+ return error;
+ }
+ return convert_to_double(value, real);
+}
+
static size_t max_size(const size_t a, const size_t b) {
return ((a > b) ? a : b);
}