Move ast_str_container_alloc and friends

This moves ast_str_container_alloc, ast_str_container_add,
ast_str_container_remove, and related private functions into
strings.c/h since they really don't belong in astobj2.c/h.

As a result of this move, utils also had to be updated.

Review: https://reviewboard.asterisk.org/r/2719/
(closes issue ASTERISK-22041)


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@396105 65c4cc65-6c06-0410-ace0-fbb531ad65f3
changes/78/78/1
Kinsey Moore 12 years ago
parent f8622e7c5c
commit 41d6be2432

@ -1938,54 +1938,4 @@ void __ao2_cleanup_debug(void *obj, const char *file, int line, const char *func
#endif
void ao2_iterator_cleanup(struct ao2_iterator *iter);
/* XXX TODO BUGBUG and all the other things...
* These functions should eventually be moved elsewhere, but the utils folder
* won't compile with them in strings.h
*/
/*!
* \since 12
* \brief Allocates a hash container for bare strings
*
* \param buckets The number of buckets to use for the hash container
*
* \retval AO2 container for strings
* \retval NULL if allocation failed
*/
#define ast_str_container_alloc(buckets) ast_str_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, buckets)
/*!
* \since 12
* \brief Allocates a hash container for bare strings
*
* \param opts Options to be provided to the container
* \param buckets The number of buckets to use for the hash container
*
* \retval AO2 container for strings
* \retval NULL if allocation failed
*/
struct ao2_container *ast_str_container_alloc_options(enum ao2_container_opts opts, int buckets);
/*!
* \since 12
* \brief Adds a string to a string container allocated by ast_str_container_alloc
*
* \param str_container The container to which to add a string
* \param add The string to add to the container
*
* \retval zero on success
* \retval non-zero if the operation failed
*/
int ast_str_container_add(struct ao2_container *str_container, const char *add);
/*!
* \since 12
* \brief Removes a string from a string container allocated by ast_str_container_alloc
*
* \param str_container The container from which to remove a string
* \param remove The string to remove from the container
*/
void ast_str_container_remove(struct ao2_container *str_container, const char *remove);
#endif /* _ASTERISK_ASTOBJ2_H */

@ -29,6 +29,7 @@
#include "asterisk/utils.h"
#include "asterisk/threadstorage.h"
#include "asterisk/astobj2.h"
#if defined(DEBUG_OPAQUE)
#define __AST_STR_USED used2
@ -1109,4 +1110,48 @@ static force_inline char *attribute_pure ast_str_to_upper(char *str)
return str_orig;
}
/*!
* \since 12
* \brief Allocates a hash container for bare strings
*
* \param buckets The number of buckets to use for the hash container
*
* \retval AO2 container for strings
* \retval NULL if allocation failed
*/
#define ast_str_container_alloc(buckets) ast_str_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, buckets)
/*!
* \since 12
* \brief Allocates a hash container for bare strings
*
* \param opts Options to be provided to the container
* \param buckets The number of buckets to use for the hash container
*
* \retval AO2 container for strings
* \retval NULL if allocation failed
*/
struct ao2_container *ast_str_container_alloc_options(enum ao2_container_opts opts, int buckets);
/*!
* \since 12
* \brief Adds a string to a string container allocated by ast_str_container_alloc
*
* \param str_container The container to which to add a string
* \param add The string to add to the container
*
* \retval zero on success
* \retval non-zero if the operation failed
*/
int ast_str_container_add(struct ao2_container *str_container, const char *add);
/*!
* \since 12
* \brief Removes a string from a string container allocated by ast_str_container_alloc
*
* \param str_container The container from which to remove a string
* \param remove The string to remove from the container
*/
void ast_str_container_remove(struct ao2_container *str_container, const char *remove);
#endif /* _ASTERISK_STRINGS_H */

@ -5797,40 +5797,3 @@ int astobj2_init(void)
return 0;
}
/* XXX TODO BUGBUG and all the other things...
* These functions should eventually be moved elsewhere, but the utils folder
* won't compile with them in strings.h
*/
static int str_hash(const void *obj, const int flags)
{
return ast_str_hash(obj);
}
static int str_cmp(void *lhs, void *rhs, int flags)
{
return strcmp(lhs, rhs) ? 0 : CMP_MATCH;
}
struct ao2_container *ast_str_container_alloc_options(enum ao2_container_opts opts, int buckets)
{
return ao2_container_alloc_options(opts, buckets, str_hash, str_cmp);
}
int ast_str_container_add(struct ao2_container *str_container, const char *add)
{
RAII_VAR(char *, ao2_add, ao2_alloc(strlen(add) + 1, NULL), ao2_cleanup);
if (!ao2_add) {
return -1;
}
/* safe strcpy */
strcpy(ao2_add, add);
ao2_link(str_container, ao2_add);
return 0;
}
void ast_str_container_remove(struct ao2_container *str_container, const char *remove)
{
ao2_find(str_container, remove, OBJ_KEY | OBJ_NODATA | OBJ_UNLINK);
}

@ -160,4 +160,36 @@ char *__ast_str_helper2(struct ast_str **buf, ssize_t maxlen, const char *src, s
return (*buf)->__AST_STR_STR;
}
static int str_hash(const void *obj, const int flags)
{
return ast_str_hash(obj);
}
static int str_cmp(void *lhs, void *rhs, int flags)
{
return strcmp(lhs, rhs) ? 0 : CMP_MATCH;
}
struct ao2_container *ast_str_container_alloc_options(enum ao2_container_opts opts, int buckets)
{
return ao2_container_alloc_options(opts, buckets, str_hash, str_cmp);
}
int ast_str_container_add(struct ao2_container *str_container, const char *add)
{
RAII_VAR(char *, ao2_add, ao2_alloc(strlen(add) + 1, NULL), ao2_cleanup);
if (!ao2_add) {
return -1;
}
/* safe strcpy */
strcpy(ao2_add, add);
ao2_link(str_container, ao2_add);
return 0;
}
void ast_str_container_remove(struct ao2_container *str_container, const char *remove)
{
ao2_find(str_container, remove, OBJ_KEY | OBJ_NODATA | OBJ_UNLINK);
}

@ -180,7 +180,7 @@ threadstorage.c: $(ASTTOPDIR)/main/threadstorage.c
$(CMD_PREFIX) cp "$<" "$@"
refcounter: refcounter.o md5.o hashtab.o lock.o utils.o strings.o sha1.o strcompat.o threadstorage.o clicompat.o poll.o version.o
refcounter: refcounter.o md5.o hashtab.o lock.o utils.o strings.o sha1.o strcompat.o threadstorage.o clicompat.o poll.o version.o astobj2.o
refcounter.o: _ASTCFLAGS+=-O0
extconf.o: extconf.c

@ -310,4 +310,13 @@ void *__ast_bt_destroy(struct ast_bt *bt)
{
return NULL;
}
void ast_log_backtrace(void)
{
}
int ast_register_atexit(void (*func)(void))
{
return 0;
}
#endif

Loading…
Cancel
Save