diff --git a/strcommon.c b/strcommon.c index 2f9e39c6f2f..b0359c513fe 100644 --- a/strcommon.c +++ b/strcommon.c @@ -32,7 +32,7 @@ /*! \brief * add backslashes to special characters */ -int escape_common(char *dst, char *src, int src_len) +int escape_common(char *dst, const char *src, int src_len) { int i, j; @@ -69,7 +69,7 @@ int escape_common(char *dst, char *src, int src_len) /*! \brief * remove backslashes to special characters */ -int unescape_common(char *dst, char *src, int src_len) +int unescape_common(char *dst, const char *src, int src_len) { int i, j; @@ -113,7 +113,7 @@ int unescape_common(char *dst, char *src, int src_len) /*! \brief * replace &#xx; with ascii character */ -int unescape_xml(char *dst, char *src, int src_len) +int unescape_xml(char *dst, const char *src, int src_len) { int i, j; @@ -135,7 +135,7 @@ int unescape_xml(char *dst, char *src, int src_len) } /*! \brief Compute MD5 checksum */ -void compute_md5(char *dst, char *src, int src_len) +void compute_md5(char *dst, const char *src, int src_len) { MD5_CTX context; unsigned char digest[16]; @@ -146,9 +146,10 @@ void compute_md5(char *dst, char *src, int src_len) } /*! \brief Unscape all printable ASCII characters */ -int unescape_user(str *sin, str *sout) +int _unescape_user(const str_const *sin, str *sout) { - char *at, *p, c; + char *at, c; + const char *p; if(sin==NULL || sout==NULL || sout->s==NULL || sin->len<0 || sout->len < sin->len+1) { @@ -263,10 +264,11 @@ int unescape_user(str *sin, str *sout) * mark = - | _ | . | ! | ~ | * | ' | ( | ) * user-unreserved = & | = | + | $ | , | ; | ? | / */ -int escape_user(str *sin, str *sout) +int _escape_user(const str_const *sin, str *sout) { - char *at, *p; + char *at; + const char *p; unsigned char x; if(sin==NULL || sout==NULL || sin->s==NULL || sout->s==NULL @@ -312,7 +314,7 @@ int escape_user(str *sin, str *sout) } -int unescape_param(str *sin, str *sout) +int _unescape_param(const str_const *sin, str *sout) { return unescape_user(sin, sout); } @@ -326,9 +328,10 @@ int unescape_param(str *sin, str *sout) * mark = - | _ | . | ! | ~ | * | ' | ( | ) * param-unreserved = [ | ] | / | : | & | + | $ */ -int escape_param(str *sin, str *sout) +int _escape_param(const str_const *sin, str *sout) { - char *at, *p; + char *at; + const char *p; unsigned char x; if (sin==NULL || sout==NULL || sin->s==NULL || sout->s==NULL || diff --git a/strcommon.h b/strcommon.h index 07d24ef53e9..425a4c45029 100644 --- a/strcommon.h +++ b/strcommon.h @@ -33,23 +33,38 @@ /* * add backslashes to special characters */ -int escape_common(char *dst, char *src, int src_len); +int escape_common(char *dst, const char *src, int src_len); /* * remove backslashes to special characters */ -int unescape_common(char *dst, char *src, int src_len); +int unescape_common(char *dst, const char *src, int src_len); -int unescape_xml(char *dst, char *src, int src_len); +int unescape_xml(char *dst, const char *src, int src_len); -void compute_md5(char *dst, char *src, int src_len); +void compute_md5(char *dst, const char *src, int src_len); -int escape_user(str *sin, str *sout); +int _escape_user(const str_const *sin, str *sout); +static inline int _escape_userSS(const str *sin, str *sout){return _escape_user(str2const(sin), sout);} +#define escape_user(sin, sout) ( \ + _Generic(*(sin), str: _escape_userSS, str_const: _escape_user)(sin, sout) \ +) -int unescape_user(str *sin, str *sout); +int _unescape_user(const str_const *sin, str *sout); +static inline int _unescape_userSS(const str *sin, str *sout){return _unescape_user(str2const(sin), sout);} +#define unescape_user(sin, sout) ( \ + _Generic(*(sin), str: _unescape_userSS, str_const: _unescape_user)(sin, sout) \ +) -int escape_param(str *sin, str *sout); +int _escape_param(const str_const *sin, str *sout); +static inline int _escape_paramSS(const str *sin, str *sout){return _escape_param(str2const(sin), sout);} +#define escape_param(sin, sout) ( \ + _Generic(*(sin), str: _escape_paramSS, str_const: _escape_param)(sin, sout) \ +) -int unescape_param(str *sin, str *sout); +int _unescape_param(const str_const *sin, str *sout); +static inline int _unescape_paramSS(const str *sin, str *sout){return _unescape_param(str2const(sin), sout);} +#define unescape_param(sin, sout) ( \ + _Generic(*(sin), str: _unescape_paramSS, str_const: _unescape_param)(sin, sout) \ +) #endif -