bool CWebserverRequest::ParseParams(string param_string) // parse parameter string { string name,value,param; string param_str; int pos; bool ende = false; if(param_string.length() <= 0) return false; param_str = param_string; while(!ende) { pos = param_str.find_first_of("&"); if(pos > 0) { param = param_str.substr(0,pos); param_str = param_str.substr(pos+1,param_str.length() - (pos+1)); } else { param = param_str; ende = true; } // dprintf("param: '%s' param_str: '%s'\n",param.c_str(),param_str.c_str()); SplitParameter(param); } return true; };
bool CWebserverRequest::ParseParams(std::string param_string) // parse parameter string { if(param_string.length() <= 0) return false; char *param_copy = new char[param_string.length()+1]; memcpy(param_copy, param_string.c_str(), param_string.length()+1); // instead of copying and allocating strings again and again, // we just copy once, move pointers // around and set '\0' chars. is faster and less memory is used. char *param; // this is the param char *ptr1; // points to the begin of param char *ptr2; // points to the '&' sign ptr1 = param_copy; ptr2 = ptr1; while(ptr2 && *ptr1) { param = ptr1; ptr2 = strchr(ptr1, '&'); if(ptr2 != NULL) { *ptr2 = '\0'; ptr1 = ptr2+1; } SplitParameter(param); } delete[] param_copy; return true; };