From 55cf8326dbc24fb4fbe2cbabaeeb4b016e8d17f7 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Fri, 4 May 2007 01:13:34 +0000 Subject: [PATCH] some quick apr_dir wrappers. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5083 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_apr.h | 6 ++++++ src/switch_apr.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/include/switch_apr.h b/src/include/switch_apr.h index 157b3c39e9..91e3ed0a60 100644 --- a/src/include/switch_apr.h +++ b/src/include/switch_apr.h @@ -739,6 +739,12 @@ SWITCH_DECLARE(switch_size_t) switch_file_get_size(switch_file_t *thefile); SWITCH_DECLARE(switch_status_t) switch_file_exists(const char *filename, switch_memory_pool_t *pool); +typedef struct switch_dir switch_dir_t; + +SWITCH_DECLARE(switch_status_t) switch_dir_open(switch_dir_t **new_dir, const char *dirname, switch_memory_pool_t *pool); +SWITCH_DECLARE(switch_status_t) switch_dir_close(switch_dir_t *thedir); +SWITCH_DECLARE(const char *) switch_dir_next_file(switch_dir_t *thedir); + /** @} */ /** diff --git a/src/switch_apr.c b/src/switch_apr.c index 81e75dc968..19962375dd 100644 --- a/src/switch_apr.c +++ b/src/switch_apr.c @@ -373,6 +373,42 @@ SWITCH_DECLARE(switch_status_t) switch_file_exists(const char *filename, switch_ return status; } +struct switch_dir { + apr_dir_t *dir_handle; + apr_finfo_t finfo; +}; + +SWITCH_DECLARE(switch_status_t) switch_dir_open(switch_dir_t **new_dir, const char *dirname, switch_memory_pool_t *pool) +{ + switch_status_t status; + switch_dir_t *dir = switch_core_alloc(pool, sizeof(switch_dir_t)); + status = apr_dir_open(&(dir->dir_handle), dirname, pool); + *new_dir = dir; + return status; +} + +SWITCH_DECLARE(switch_status_t) switch_dir_close(switch_dir_t *thedir) +{ + return apr_dir_close(thedir->dir_handle); +} + +SWITCH_DECLARE(const char *) switch_dir_next_file(switch_dir_t *thedir) +{ + const char *fname = NULL; + apr_int32_t finfo_flags = APR_FINFO_DIRENT | APR_FINFO_TYPE | APR_FINFO_NAME; + while (apr_dir_read(&(thedir->finfo), finfo_flags, thedir->dir_handle) == SWITCH_STATUS_SUCCESS) { + if (thedir->finfo.filetype != APR_REG) + continue; + fname = thedir->finfo.fname; + if (!fname) + fname = thedir->finfo.name; + if (!fname) + continue; + } + return fname; +} + + /* thread stubs */