static int valid_path(request_rec *r, const char *value) { char *p = apr_pstrdup(r->pool, value); char *uri; char *tmp; char *name; char *val; char *pstat; DBG(r, "start valid_path() unparsed_uri:[%s] value:[%s]", r->unparsed_uri, value); if (chxj_starts_with(r->unparsed_uri, "http://")) { uri = strchr(&r->unparsed_uri[sizeof("http://")], '/'); if (uri != NULL) { uri = apr_pstrdup(r->pool, uri); } } else if (chxj_starts_with(r->unparsed_uri, "https://")) { uri = strchr(&r->unparsed_uri[sizeof("https://")], '/'); if (uri != NULL) { uri = apr_pstrdup(r->pool, uri); } } else if (chxj_starts_with(r->unparsed_uri, "/")) { uri = apr_pstrdup(r->pool, r->unparsed_uri); } else { uri = apr_pstrdup(r->pool, "/"); } if ((tmp = strchr(uri, '?'))) { *tmp = '\0'; } DBG(r, "uri=[%s]", uri); name = apr_strtok(p, "=", &pstat); val = apr_strtok(NULL, "=", &pstat); name = qs_trim_string(r->pool, name); val = qs_trim_string(r->pool, val); DBG(r, "name=[%s] val=[%s]", name, val); DBG(r, "val:[%s] vs uri:[%s]", val, uri); if (! chxj_starts_with(uri, val)) { DBG(r, "end valid_path() unparsed_uri:[%s] value:[%s] (false)", r->unparsed_uri, value); return CHXJ_FALSE; } DBG(r, "end valid_path() unparsed_uri:[%s] value:[%s] (true)", r->unparsed_uri, value); return CHXJ_TRUE; }
static char * s_path_to_fullurl(apr_pool_t *pool, const char *base_url, const char *base_path, const char *uri) { char *new_url = NULL; if (chxj_starts_with(uri, "http")) { return apr_pstrdup(pool, uri); } if (*uri == '/') { return apr_pstrcat(pool, base_url, uri, NULL); } new_url = apr_pstrcat(pool, base_url, base_path, NULL); if (new_url[strlen(new_url)-1] == '/') { new_url = apr_pstrcat(pool, new_url, uri, NULL); } else { new_url = apr_pstrcat(pool, new_url, "/", uri, NULL); } return new_url; }
char * chxj_css_rgb_func_to_value(apr_pool_t *pool, const char *rgb_func_string) { char *s = apr_pstrdup(pool, rgb_func_string); if (chxj_starts_with(s, "rgb")) { s += 3; s = qs_trim_string(pool, s); if (*s == '(') s++; int len = strlen(s); if (s[len - 1] == ')') s[len-1] = 0; char *pstat; char *red = qs_trim_string(pool, apr_strtok(s, ",", &pstat)); char *green = qs_trim_string(pool, apr_strtok(NULL, ",", &pstat)); char *blue = qs_trim_string(pool, apr_strtok(NULL, ",", &pstat)); int red_per_flag = 0; int green_per_flag = 0; int blue_per_flag = 0; if (red && (pstat = strchr(red, '%'))) { *pstat = 0; red_per_flag = 1; } else { red = "0"; } if (green && (pstat = strchr(green, '%'))) { *pstat = 0; green_per_flag = 1; } else { green = "0"; } if (blue && (pstat = strchr(blue, '%'))) { *pstat = 0; blue_per_flag = 1; } else { blue = "0"; } double d_red = (double)chxj_atoi(red); double d_green = (double)chxj_atoi(green); double d_blue = (double)chxj_atoi(blue); if (red_per_flag) { d_red /= 100.0; d_red *= 255; } if (green_per_flag) { d_green /= 100.0; d_green *= 255; } if (blue_per_flag) { d_blue /= 100.0; d_blue *= 255; } char *ret = apr_psprintf(pool, "#%02x%02x%02x", (int)d_red, (int)d_green, (int)d_blue); return ret; } else if (s[0] == '#') { if (strlen(&s[1]) == 3) { char red[2]; char green[2]; char blue[2]; red[0] = s[1]; green[0] = s[2]; blue[0] = s[3]; red[1] = 0; green[1] = 0; blue[1] = 0; int ired = chxj_axtoi(red); int igreen = chxj_axtoi(green); int iblue = chxj_axtoi(blue); return apr_psprintf(pool, "#%02x%02x%02x", ired * 0x10 + ired, igreen * 0x10 + igreen, iblue * 0x10 + iblue); } } else { switch(*s) { case 'a': case 'A': if (STRCASEEQ('q','Q', &s[1], "qua")) { /* aqua */ return apr_pstrdup(pool, "#00ffff"); } break; case 'b': case 'B': if (s[1] == 'l' || s[1] == 'L') { if (s[2] == 'a' || s[2] == 'A') { if (STRCASEEQ('c','C',&s[3], "ck")) { /* black */ return apr_pstrdup(pool, "#000000"); } } else if (s[2] == 'u' || s[2] == 'U') { if (s[3] == 'e' || s[3] == 'E') { /* blue */ return apr_pstrdup(pool, "#0000ff"); } } } break; case 'f': case 'F': if (STRCASEEQ('u','U',&s[1], "uchsia")) { /* fuchsia */ return apr_pstrdup(pool, "#ff00ff"); } break; case 'g': case 'G': if (s[1] == 'r'||s[1] == 'R') { if (STRCASEEQ('a','A', &s[2], "ay")) { /* gray */ return apr_pstrdup(pool, "#808080"); } else if (STRCASEEQ('e','E',&s[2], "een")) { /* green */ return apr_pstrdup(pool, "#008000"); } } break; case 'l': case 'L': if (STRCASEEQ('i','I', &s[1], "ime")) { /* lime */ return apr_pstrdup(pool, "#00ff00"); } break; case 'm': case 'M': if (STRCASEEQ('a','A', &s[1], "aroon")) { /* maroon */ return apr_pstrdup(pool, "#800000"); } break; case 'n': case 'N': if (STRCASEEQ('a','A', &s[1], "avy")) { /* navy */ return apr_pstrdup(pool, "#000080"); } break; case 'o': case 'O': if (STRCASEEQ('l','L', &s[1], "live")) { /* olive */ return apr_pstrdup(pool, "#808000"); } break; case 'p': case 'P': if (STRCASEEQ('u','U', &s[1], "urple")) { /* purple */ return apr_pstrdup(pool, "#800080"); } break; case 'r': case 'R': if (STRCASEEQ('e','E', &s[1], "ed")) { /* red */ return apr_pstrdup(pool, "#ff0000"); } break; case 's': case 'S': if (STRCASEEQ('i','I', &s[1], "ilver")) { /* silver */ return apr_pstrdup(pool, "#c0c0c0"); } break; case 't': case 'T': if (STRCASEEQ('e','E', &s[1], "eal")) { /* teal */ return apr_pstrdup(pool, "#008080"); } break; case 'w': case 'W': if (STRCASEEQ('h','H', &s[1], "hite")) { /* white */ return apr_pstrdup(pool, "#ffffff"); } break; case 'y': case 'Y': if (STRCASEEQ('y','Y', &s[1], "ellow")) { /* yellow */ return apr_pstrdup(pool, "#ffff00"); } break; default: break; } } return s; }