/* Note: This escape function works on file: URIs, but if you want to * escape something else, please read RFC-2396 */ static void escape_uri_string(const char *string, char *escaped_string, int escaped_string_size, UnsafeCharacterSet mask) { #define ACCEPTABLE(a) ((a) >= 32 && (a) < 128 && (acceptable[(a) - 32] & use_mask)) const char *p; char *q; int c; UnsafeCharacterSet use_mask; use_mask = mask; BLI_assert(escaped_string_size > 0); /* space for \0 */ escaped_string_size -= 1; for (q = escaped_string, p = string; (*p != '\0') && escaped_string_size; p++) { c = (unsigned char) *p; if (!ACCEPTABLE(c)) { if (escaped_string_size < 3) { break; } *q++ = '%'; /* means hex coming */ *q++ = hex[c >> 4]; *q++ = hex[c & 15]; escaped_string_size -= 3; } else { *q++ = *p; escaped_string_size -= 1; } }
/* Note: this doesn't take into account the different forms of escaping that * are needed for different parts of an URL; see RFC-2396 */ static BSTR escapeUriString (const WCHAR *string, UnsafeCharacterSet mask) { #define ACCEPTABLE(a) ((a)>=32 && (a)<128 && (acceptable[(a)-32] & use_mask)) const char *p; char *q; char *result; int c; int unacceptable; UnsafeCharacterSet use_mask; // Get UTF-8 version, we want to encode the parameters in that character set HippoUStr strUtf(string); unacceptable = 0; use_mask = mask; for (p = strUtf.c_str(); *p != '\0'; p++) { c = (unsigned char) *p; if (!ACCEPTABLE(c)) unacceptable++; } result = (char *)malloc (sizeof(char) * (p - strUtf.c_str() + unacceptable * 2 + 1)); if (!result) return NULL; use_mask = mask; for (q = result, p = strUtf.c_str(); *p != '\0'; p++) { c = (unsigned char) *p; if (!ACCEPTABLE(c)) { *q++ = '%'; /* means hex coming */ *q++ = hex[c >> 4]; *q++ = hex[c & 15]; } else
void escape_uri_string (const char *string, char* escaped_string, int len,UnsafeCharacterSet mask) { #define ACCEPTABLE(a) ((a)>=32 && (a)<128 && (acceptable[(a)-32] & use_mask)) const char *p; char *q; int c; UnsafeCharacterSet use_mask; use_mask = mask; for (q = escaped_string, p = string; (*p != '\0') && len; p++) { c = (unsigned char) *p; len--; if (!ACCEPTABLE (c)) { *q++ = '%'; /* means hex coming */ *q++ = hex[c >> 4]; *q++ = hex[c & 15]; } else {