autofs-5.1.2 - add function conf_amd_get_mount_paths() From: Ian Kent Add configuration function to get an array of amd mount section paths. Signed-off-by: Ian Kent --- CHANGELOG | 1 + include/defaults.h | 1 + lib/defaults.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index ac195ed..750b803 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -40,6 +40,7 @@ xx/xx/2016 autofs-5.1.3 - add ref counting to struct map_source. - add support for amd browsable option. - add function conf_amd_get_map_name(). +- add function conf_amd_get_mount_paths(). 15/06/2016 autofs-5.1.2 ======================= diff --git a/include/defaults.h b/include/defaults.h index 650f3e6..7766196 100644 --- a/include/defaults.h +++ b/include/defaults.h @@ -174,6 +174,7 @@ unsigned int defaults_disable_not_found_message(void); unsigned int defaults_get_sss_master_map_wait(void); unsigned int conf_amd_mount_section_exists(const char *); +char **conf_amd_get_mount_paths(void); char *conf_amd_get_arch(void); char *conf_amd_get_karch(void); char *conf_amd_get_os(void); diff --git a/lib/defaults.c b/lib/defaults.c index fba5d78..102eda5 100644 --- a/lib/defaults.c +++ b/lib/defaults.c @@ -771,6 +771,81 @@ static struct conf_option *conf_lookup(const char *section, const char *key) return co; } +static char **conf_enumerate_amd_mount_sections(void) +{ + struct conf_option *this; + unsigned int count; + char **paths; + char *last; + int i, j; + + last = NULL; + count = 0; + for (i = 0; i < CFG_TABLE_SIZE; i++) { + if (!config->hash[i]) + continue; + + this = config->hash[i]; + while (this) { + /* Only amd mount section names begin with '/' */ + if (*this->section != '/') { + this = this->next; + continue; + } + + if (!last || + strcmp(this->section, last)) + count ++; + last = this->section; + this = this->next; + } + } + + if (!count) + return NULL; + + paths = (char **) malloc(((count + 1) * sizeof(char *))); + if (!paths) + return NULL; + memset(paths, 0, ((count + 1) * sizeof(char *))); + + last = NULL; + j = 0; + + for (i = 0; i < CFG_TABLE_SIZE; i++) { + if (!config->hash[i]) + continue; + + this = config->hash[i]; + while (this) { + /* Only amd mount section names begin with '/' */ + if (*this->section != '/') { + this = this->next; + continue; + } + + if (!last || + strcmp(this->section, last)) { + char *path = strdup(this->section); + if (!path) + goto fail; + paths[j++] = path; + } + last = this->section; + this = this->next; + } + } + + return paths; + +fail: + i = 0; + while (paths[i]) + free(paths[i++]); + free(paths); + return NULL; +} + static unsigned int conf_section_exists(const char *section) { struct conf_option *co; @@ -1777,6 +1852,11 @@ unsigned int conf_amd_mount_section_exists(const char *section) return conf_section_exists(section); } +char **conf_amd_get_mount_paths(void) +{ + return conf_enumerate_amd_mount_sections(); +} + char *conf_amd_get_arch(void) { return conf_get_string(amd_gbl_sec, NAME_AMD_ARCH);