Add a new API function, written at least twice in app_voicemail.c
authorLuigi Rizzo <rizzo@icir.org>
Wed, 19 Dec 2007 17:09:01 +0000 (17:09 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Wed, 19 Dec 2007 17:09:01 +0000 (17:09 +0000)
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
main/utils.c

index 1ba62ed..9646e94 100644 (file)
@@ -155,6 +155,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.
   \arg src The source string
index 2c4cef8..6920141 100644 (file)
@@ -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;