diff options
| author | Clecio Jung | 2023-04-15 11:44:47 -0300 |
|---|---|---|
| committer | Clecio Jung | 2023-04-15 11:44:47 -0300 |
| commit | 9826b77f89c80fac287fa02a2fe432ac8e5ea462 (patch) | |
| tree | 94b8fe04184fa45820abfa670f0820b9a619edb3 /ini_file.c | |
| parent | d7119c21fa566d2d5834cc5aa8627655ee849160 (diff) | |
| download | libini-9826b77f89c80fac287fa02a2fe432ac8e5ea462.tar.xz libini-9826b77f89c80fac287fa02a2fe432ac8e5ea462.tar.zst | |
Adding new search functions
Diffstat (limited to 'ini_file.c')
| -rw-r--r-- | ini_file.c | 110 |
1 files changed, 86 insertions, 24 deletions
@@ -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); } |
