Exemple #1
0
/* 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
Exemple #3
0
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 {