in tcl_cmds.c [395:441]
static int read_post(request_rec *r, Tcl_Interp *interp)
{
int rc;
const char *val, *key;
char *nm_var = apr_psprintf(r->pool, "%s::pram", r->filename);
char *rbuf;
if ((rc = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR)) != OK) {
return rc;
}
if (ap_should_client_block(r)) {
char buf[HUGE_STRING_LEN];
int rsize, len_read, rpos = 0;
long length = r->remaining;
rbuf = (char*) apr_pcalloc(r->pool, length + 1);
while ((len_read = ap_get_client_block(r, buf, sizeof(buf))) > 0) {
if ((rpos + len_read) > length) {
rsize = length - rpos;
}
else {
rsize = len_read;
}
memcpy(rbuf + rpos, buf, rsize);
rpos += rsize;
}
}
while (rbuf && *rbuf && (val = ap_getword(r->pool, (const char**) &rbuf, '&'))) {
key = ap_getword(r->pool, &val, '=');
ap_unescape_url((char*) key);
ap_unescape_url((char*) val);
if (!key || !val) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r->server, "read_post(...): invalid key or value, key = %s, val = %s", key, val);
break;
}
set_var(interp, nm_var, (char*) key, "%s", (char*) val);
}
return OK;
}