comparison src/lib/strescape.c @ 1329:ae229b7acb4c HEAD

Mailbox names are now sent through imap-quoter instead of just escaping it. This means that mailbox names that would require escapes are instead sent as literals now.
author Timo Sirainen <tss@iki.fi>
date Wed, 02 Apr 2003 05:05:38 +0300
parents 3784730cfcd8
children 43fdcf8d9a0d
comparison
equal deleted inserted replaced
1328:0a524d229f50 1329:ae229b7acb4c
25 #include "str.h" 25 #include "str.h"
26 #include "strescape.h" 26 #include "strescape.h"
27 27
28 const char *str_escape(const char *str) 28 const char *str_escape(const char *str)
29 { 29 {
30 char *ret, *p; 30 const char *p;
31 size_t i, esc; 31 string_t *ret;
32 32
33 /* get length of string and number of chars to escape */ 33 /* see if we need to quote it */
34 esc = 0; 34 for (p = str; *p != '\0'; p++) {
35 for (i = 0; str[i] != '\0'; i++) { 35 if (IS_ESCAPED_CHAR(*p))
36 if (IS_ESCAPED_CHAR(str[i])) 36 break;
37 esc++;
38 } 37 }
39 38
40 if (esc == 0) 39 if (*p == '\0')
41 return str; 40 return str;
42 41
43 /* @UNSAFE: escape them */ 42 /* quote */
44 p = ret = t_malloc(i + esc + 1); 43 ret = t_str_new((size_t) (p - str) + 128);
45 for (; *str != '\0'; str++) { 44 str_append_n(ret, str, (size_t) (p - str));
46 if (IS_ESCAPED_CHAR(*str)) 45
47 *p++ = '\\'; 46 for (; *p != '\0'; p++) {
48 *p++ = *str; 47 if (IS_ESCAPED_CHAR(*p))
48 str_append_c(ret, '\\');
49 str_append_c(ret, *p);
49 } 50 }
50 *p = '\0'; 51 return str_c(ret);
51 return ret;
52 } 52 }
53 53
54 void str_append_unescaped(string_t *dest, const void *src, size_t src_size) 54 void str_append_unescaped(string_t *dest, const void *src, size_t src_size)
55 { 55 {
56 const unsigned char *src_c = src; 56 const unsigned char *src_c = src;