diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-02 00:27:54 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-02 00:27:54 +0000 |
commit | c941fb14b694de4abf7cb9603e4c139689b2cd92 (patch) | |
tree | c3af4fd05dc8b9044bda48c492c562751ae7891b /include/asterisk/utils.h | |
parent | 4186279fc1dbf4471c1666bc0df2e688a45cd229 (diff) |
add experimental ast_copy_string() function to be used in place of strncpy() (see discussion on asterisk-dev)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5547 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include/asterisk/utils.h')
-rwxr-xr-x | include/asterisk/utils.h | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h index 226e230ce..5668b316e 100755 --- a/include/asterisk/utils.h +++ b/include/asterisk/utils.h @@ -9,18 +9,20 @@ * the GNU General Public License */ -#ifndef _ASTERISK_UTIL_H -#define _ASTERISK_UTIL_H +#ifndef _ASTERISK_UTILS_H +#define _ASTERISK_UTILS_H #ifdef SOLARIS #include <solaris-compat/compat.h> #endif + #include <netinet/in.h> #include <netdb.h> #include <pthread.h> -#include "asterisk/lock.h" #include <limits.h> +#include "asterisk/lock.h" + /* Note: It is very important to use only unsigned variables to hold bit flags, as otherwise you can fall prey to the compiler's @@ -166,10 +168,33 @@ struct ast_realloca { #define AST_STACKSIZE 256 * 1024 #define ast_pthread_create(a,b,c,d) ast_pthread_create_stack(a,b,c,d,0) +extern int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data, size_t stacksize); + #ifdef __linux__ #define ast_strcasestr strcasestr #else extern char *ast_strcasestr(const char *, const char *); #endif /* __linux__ */ -extern int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data, size_t stacksize); + +#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) +#define __builtin_expect(exp, c) (exp) #endif + +/*! + \brief Size-limited null-terminating string copy. + \param dst The destination buffer. + \param src The source string + \param size The size of the destination buffer + + This is similar to \a strncpy, with two important differences: + - the destination buffer will \b always be null-terminated + - the destination buffer is not filled with zeros past the copied string length + These differences make it slightly more efficient, and safer to use since it will + not leave the destination buffer unterminated. There is no need to pass an artificially + reduced buffer size to this function (unlike \a strncpy), and the buffer does not need + to be initialized to zeroes prior to calling this function. + No return value. +*/ +void ast_copy_string(char *dst, const char *src, size_t size); + +#endif /* _ASTERISK_UTILS_H */ |