escape: add cescape_length() call as generalization of cescape()
This commit is contained in:
parent
2001c80560
commit
a5ef363808
|
@ -89,20 +89,20 @@ size_t cescape_char(char c, char *buf) {
|
|||
return buf - buf_old;
|
||||
}
|
||||
|
||||
char *cescape(const char *s) {
|
||||
char *r, *t;
|
||||
char *cescape_length(const char *s, size_t n) {
|
||||
const char *f;
|
||||
char *r, *t;
|
||||
|
||||
assert(s);
|
||||
assert(s || n == 0);
|
||||
|
||||
/* Does C style string escaping. May be reversed with
|
||||
* cunescape(). */
|
||||
|
||||
r = new(char, strlen(s)*4 + 1);
|
||||
r = new(char, n*4 + 1);
|
||||
if (!r)
|
||||
return NULL;
|
||||
|
||||
for (f = s, t = r; *f; f++)
|
||||
for (f = s, t = r; f < s + n; f++)
|
||||
t += cescape_char(*f, t);
|
||||
|
||||
*t = 0;
|
||||
|
@ -110,6 +110,12 @@ char *cescape(const char *s) {
|
|||
return r;
|
||||
}
|
||||
|
||||
char *cescape(const char *s) {
|
||||
assert(s);
|
||||
|
||||
return cescape_length(s, strlen(s));
|
||||
}
|
||||
|
||||
int cunescape_one(const char *p, size_t length, char *ret, uint32_t *ret_unicode) {
|
||||
int r = 1;
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ typedef enum UnescapeFlags {
|
|||
} UnescapeFlags;
|
||||
|
||||
char *cescape(const char *s);
|
||||
char *cescape_length(const char *s, size_t n);
|
||||
size_t cescape_char(char c, char *buf);
|
||||
|
||||
int cunescape(const char *s, UnescapeFlags flags, char **ret);
|
||||
|
|
Loading…
Reference in a new issue