aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-05-02 00:27:54 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-05-02 00:27:54 +0000
commitc941fb14b694de4abf7cb9603e4c139689b2cd92 (patch)
treec3af4fd05dc8b9044bda48c492c562751ae7891b /include
parent4186279fc1dbf4471c1666bc0df2e688a45cd229 (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')
-rwxr-xr-xinclude/asterisk/utils.h33
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 */