strescape.h revision 03b33ccb012636e453189ceef3865dee7812392e
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher#ifndef STRESCAPE_H
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher#define STRESCAPE_H
ee359fe1384507fed6c2274e7bfe81d288de4542Stephen Gallagher
33396dc46ea52c18f47db1b5d590880806521005Sumit Bose#define IS_ESCAPED_CHAR(c) ((c) == '"' || (c) == '\\' || (c) == '\'')
ee359fe1384507fed6c2274e7bfe81d288de4542Stephen Gallagher
33396dc46ea52c18f47db1b5d590880806521005Sumit Bose/* escape all '\', '"' and "'" characters */
703dc1eb5b050b24235a6640f271d34ea008cf98Jan Engelhardtconst char *str_escape(const char *str);
703dc1eb5b050b24235a6640f271d34ea008cf98Jan Engelhardt
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher/* remove all '\' characters, append to given string */
324fb26ba803a999bedc29e93c46c84f27abf5b7Sumit Bosevoid str_append_unescaped(string_t *dest, const void *src, size_t src_size);
324fb26ba803a999bedc29e93c46c84f27abf5b7Sumit Bose
324fb26ba803a999bedc29e93c46c84f27abf5b7Sumit Bose/* remove all '\' characters */
324fb26ba803a999bedc29e93c46c84f27abf5b7Sumit Bosechar *str_unescape(char *str);
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher/* For Dovecot's internal protocols: Escape \001, \t, \r and \n characters
84ae5edab16ad6be5e3be956cb6fa031c1428eb5Stephen Gallagher using \001. */
e65df5b966b27e13283c65f59f99ac44781e0333Simo Sorceconst char *str_tabescape(const char *str);
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallaghervoid str_tabescape_write(string_t *dest, const char *src);
002f84aea86371aa079b867c0ec39396b97109d3Lukas Slebodnikvoid str_append_tabunescaped(string_t *dest, const void *src, size_t src_size);
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagherchar *str_tabunescape(char *str);
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher#endif
87d3b47abba6a40fcf809c85a2b138bc1013d9c5Jakub Hrozek