From 8e4360b0724e41447ea7e88ed27de4a6c79b7fe0 Mon Sep 17 00:00:00 2001 From: Luigi Rizzo Date: Wed, 19 Dec 2007 17:09:01 +0000 Subject: [PATCH] Add a new API function, written at least twice in app_voicemail.c and likely in other places too. This is quite useful when placing mail/html stuff in config files. /*! \brief Convert some C escape sequences (\b\f\n\r\t) into the equivalent characters. \brief s The string to be converted (will be modified). \return The converted string. */ char *ast_unescape_c(char *s); git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@93950 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/strings.h | 8 ++++++++ main/utils.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/include/asterisk/strings.h b/include/asterisk/strings.h index 1ba62ede3f..9646e94c2e 100644 --- a/include/asterisk/strings.h +++ b/include/asterisk/strings.h @@ -154,6 +154,14 @@ char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes); */ char *ast_unescape_semicolon(char *s); +/*! + \brief Convert some C escape sequences (\b\f\n\r\t) into the + equivalent characters. + \brief s The string to be converted (will be modified). + \return The converted string. + */ +char *ast_unescape_c(char *s); + /*! \brief Size-limited null-terminating string copy. \arg dst The destination buffer. diff --git a/main/utils.c b/main/utils.c index 2c4cef829e..6920141b0d 100644 --- a/main/utils.c +++ b/main/utils.c @@ -1020,6 +1020,43 @@ char *ast_unescape_semicolon(char *s) return s; } +/* !\brief unescape some C sequences in place, return pointer to the original string. + */ +char *ast_unescape_c(char *src) +{ + char c, *ret, *dst; + + if (src == NULL) + return NULL; + for (ret = dst = src; (c = *src++); *dst++ = c ) { + if (c != '\\') + continue; /* copy char at the end of the loop */ + switch ((c = *src++)) { + case '\0': /* special, trailing '\' */ + c = '\\'; + break; + case 'b': /* backspace */ + c = '\b'; + break; + case 'f': /* form feed */ + c = '\f'; + break; + case 'n': + c = '\n'; + break; + case 'r': + c = '\r'; + break; + case 't': + c = '\t'; + break; + } + /* default, use the char literally */ + } + *dst = '\0'; + return ret; +} + int ast_build_string_va(char **buffer, size_t *space, const char *fmt, va_list ap) { int result;