mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-02 19:16:15 +00:00
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
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user