From: Radoslaw Zarzynski Date: Sun, 18 Sep 2016 17:59:25 +0000 (+0200) Subject: rgw: make parse_boundary_params() static method of RGWPostObj_ObjStore. X-Git-Tag: v12.0.3~99^2~18 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fbac200c7ec809a0a62f7243bebf2c891cd0fb70;p=ceph.git rgw: make parse_boundary_params() static method of RGWPostObj_ObjStore. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc index f95f3ddccf2c..7abe148425ee 100644 --- a/src/rgw/rgw_rest.cc +++ b/src/rgw/rgw_rest.cc @@ -1240,30 +1240,33 @@ int RGWPutObj_ObjStore::get_data(bufferlist& bl) /* * parses params in the format: 'first; param1=foo; param2=bar' */ -static void parse_params(const string& params_str, string& first, - map& params) +void RGWPostObj_ObjStore::parse_boundary_params(const std::string& params_str, + std::string& first, + std::map& params) { size_t pos = params_str.find(';'); - if (pos == string::npos) { + if (std::string::npos == pos) { first = rgw_trim_whitespace(params_str); return; } first = rgw_trim_whitespace(params_str.substr(0, pos)); - pos++; while (pos < params_str.size()) { size_t end = params_str.find(';', pos); - if (end == string::npos) + if (std::string::npos == end) { end = params_str.size(); + } - string param = params_str.substr(pos, end - pos); - + std::string param = params_str.substr(pos, end - pos); size_t eqpos = param.find('='); - if (eqpos != string::npos) { - params[rgw_trim_whitespace(param.substr(0, eqpos))] = - rgw_trim_quotes(param.substr(eqpos + 1)); + + if (std::string::npos != eqpos) { + std::string param_name = rgw_trim_whitespace(param.substr(0, eqpos)); + std::string val = rgw_trim_quotes(param.substr(eqpos + 1)); + params[std::move(param_name)] = std::move(val); } else { params[rgw_trim_whitespace(param)] = ""; } @@ -1284,7 +1287,7 @@ int RGWPostObj_ObjStore::parse_part_field(const std::string& line, if (pos >= line.size() - 1) return 0; - parse_params(line.substr(pos + 1), field.val, field.params); + parse_boundary_params(line.substr(pos + 1), field.val, field.params); return 0; } @@ -1541,7 +1544,7 @@ int RGWPostObj_ObjStore::get_params() std::string req_content_type_str = s->info.env->get("CONTENT_TYPE", ""); std::string req_content_type; std::map params; - parse_params(req_content_type_str, req_content_type, params); + parse_boundary_params(req_content_type_str, req_content_type, params); if (req_content_type.compare("multipart/form-data") != 0) { err_msg = "Request Content-Type is not multipart/form-data"; diff --git a/src/rgw/rgw_rest.h b/src/rgw/rgw_rest.h index 2b02f2125e3b..2ce806f2da84 100644 --- a/src/rgw/rgw_rest.h +++ b/src/rgw/rgw_rest.h @@ -263,6 +263,9 @@ protected: std::string& field_name, /* out */ post_part_field& field); /* out */ + static void parse_boundary_params(const std::string& params_str, + std::string& first, + std::map& params); int get_params() override; public: