mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	add ast_build_string library function (from bug #3644)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5684 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -185,6 +185,7 @@ extern char *ast_strcasestr(const char *, const char *); | ||||
|   \param dst The destination buffer. | ||||
|   \param src The source string | ||||
|   \param size The size of the destination buffer | ||||
|   \return Nothing. | ||||
|  | ||||
|   This is similar to \a strncpy, with two important differences: | ||||
|     - the destination buffer will \b always be null-terminated | ||||
| @@ -193,8 +194,20 @@ extern char *ast_strcasestr(const char *, const char *); | ||||
|   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); | ||||
|  | ||||
| /*! | ||||
|   \brief Build a string in a buffer, designed to be called repeatedly | ||||
|    | ||||
|   This is a wrapper for snprintf, that properly handles the buffer pointer | ||||
|   and buffer space available. | ||||
|  | ||||
|   \return 0 on success, non-zero on failure. | ||||
|   \param buffer current position in buffer to place string into (will be updated on return) | ||||
|   \param space remaining space in buffer (will be updated on return) | ||||
|   \param fmt printf-style format string | ||||
| */ | ||||
| int ast_build_string(char **buffer, size_t *space, const char *fmt, ...) __attribute__ ((format (printf, 3, 4))); | ||||
|  | ||||
| #endif /* _ASTERISK_UTILS_H */ | ||||
|   | ||||
							
								
								
									
										23
									
								
								utils.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								utils.c
									
									
									
									
									
								
							| @@ -17,6 +17,7 @@ | ||||
| #include <unistd.h> | ||||
| #include <stdlib.h> | ||||
| #include <errno.h> | ||||
| #include <stdarg.h> | ||||
| #include <stdio.h> | ||||
| #include <sys/types.h> | ||||
| #include <sys/socket.h> | ||||
| @@ -433,6 +434,28 @@ void ast_copy_string(char *dst, const char *src, size_t size) | ||||
| 	*dst = '\0'; | ||||
| } | ||||
|  | ||||
| int ast_build_string(char **buffer, size_t *space, const char *fmt, ...) | ||||
| { | ||||
| 	va_list ap; | ||||
| 	int result; | ||||
|  | ||||
| 	if (!buffer || !*buffer || !space || !*space) | ||||
| 		return -1; | ||||
|  | ||||
| 	va_start(ap, fmt); | ||||
| 	result = vsnprintf(*buffer, *space, fmt, ap); | ||||
| 	va_end(ap); | ||||
|  | ||||
| 	if (result < 0) | ||||
| 		return -1; | ||||
| 	else if (result > *space) | ||||
| 		result = *space; | ||||
|  | ||||
| 	*buffer += result; | ||||
| 	*space -= result; | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| /* Case-insensitive substring matching */ | ||||
| #ifndef LINUX | ||||
| static char *upper(const char *orig, char *buf, int bufsize) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user