#include #include #include "uri_decode.h" #define BUFLEN 255 /* query_decode() * Dekodiert einen in application/x-www-form-urlencoded Query-String. * query enthaelt den Query-String, key den Schluessel. Es wird der * zum Schluessel key gehoerige Wert zurueckgegeben. Enthaelt der * Query-String keinen Schluessel names key gibt query_decode() NULL * zurueck */ char *query_decode(char *query, char *key) { int i; char tmp[BUFLEN], unescaped[BUFLEN], *resbuf, *pair; bzero(tmp, BUFLEN); bzero(unescaped, BUFLEN); for (i = 0; i < strlen(query); i++) tmp[i] = (query[i] == '+') ? ' ' : query[i]; if (decode_uri(tmp, unescaped) < 0) return NULL; for (pair = strtok(unescaped, "&"); pair; pair = strtok(NULL, "&")) { char *idx_key, thiskey[BUFLEN]; int vallen; idx_key = index(pair, '='); if (idx_key == NULL) return NULL; bzero(thiskey, BUFLEN); strncpy(thiskey, pair, (int)idx_key - (int)pair); vallen = strlen(pair) - ((int)idx_key - (int)pair); if (strcmp(key, thiskey) == 0) { resbuf = (char *) calloc(vallen + 1, sizeof(char)); return (resbuf == NULL) ? NULL : strncpy(resbuf, &idx_key[1], vallen); } } return NULL; }