diff options
Diffstat (limited to 'include/asterisk/utils.h')
-rwxr-xr-x | include/asterisk/utils.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h index dd1141985..0669c08a0 100755 --- a/include/asterisk/utils.h +++ b/include/asterisk/utils.h @@ -134,6 +134,24 @@ extern int test_for_thread_safety(void); extern const char *ast_inet_ntoa(char *buf, int bufsiz, struct in_addr ia); extern int ast_utils_init(void); +/* The realloca lets us ast_restrdupa(), but you can't mix any other ast_strdup calls! */ + +struct ast_realloca { + char *ptr; + int alloclen; +}; + +#define ast_restrdupa(ra, s) \ + ({ \ + if ((ra)->ptr && strlen(s) + 1 < (ra)->alloclen) { \ + strcpy((ra)->ptr, s); \ + } else { \ + (ra)->ptr = alloca(strlen(s) + 1 - (ra)->alloclen); \ + if ((ra)->ptr) (ra)->alloclen = strlen(s) + 1; \ + } \ + (ra)->ptr; \ + }) + #ifdef inet_ntoa #undef inet_ntoa #endif |