Mercurial > dovecot > core-2.2
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; |