return oss;
}
+string rgw_string_unquote(const string& s)
+{
+ if (s[0] != '"' || s.size() < 2)
+ return s;
+
+ int len;
+ for (len = s.size(); len > 2; --len) {
+ if (s[len - 1] != ' ')
+ break;
+ }
+
+ if (s[len-1] != '"')
+ return s;
+
+ return s.substr(1, len - 2);
+}
+
static bool check_str_end(const char *s)
{
if (!s)
return "unknown";
}
+extern string rgw_string_unquote(const string& s);
/** time parsing */
extern int parse_time(const char *time_str, time_t *time);
extern bool parse_rfc2616(const char *s, struct tm *t);
return 0;
}
-static string string_unquote(const string& s)
-{
- if (s[0] != '"' || s.size() < 2)
- return s;
-
- int len;
- for (len = s.size(); len > 2; --len) {
- if (s[len - 1] != ' ')
- break;
- }
-
- if (s[len-1] != '"')
- return s;
-
- return s.substr(1, len - 2);
-}
-
void RGWCompleteMultipart::execute()
{
RGWMultiCompleteUpload *parts;
ret = -ERR_INVALID_PART;
return;
}
- string part_etag = string_unquote(iter->second);
+ string part_etag = rgw_string_unquote(iter->second);
if (part_etag.compare(obj_iter->second.etag) != 0) {
ldout(s->cct, 0) << "NOTICE: etag mismatch: part: " << iter->first << " etag: " << iter->second << dendl;
ret = -ERR_INVALID_PART;
goto done_err;
if (if_match) {
- ldout(cct, 10) << "ETag: " << etag.c_str() << " " << " If-Match: " << if_match << dendl;
- if (strcmp(if_match, etag.c_str())) {
+ string if_match_str = rgw_string_unquote(if_match);
+ ldout(cct, 10) << "ETag: " << etag.c_str() << " " << " If-Match: " << if_match_str << dendl;
+ if (if_match_str.compare(etag.c_str()) != 0) {
r = -ERR_PRECONDITION_FAILED;
goto done_err;
}
}
if (if_nomatch) {
- ldout(cct, 10) << "ETag: " << etag.c_str() << " " << " If-NoMatch: " << if_nomatch << dendl;
- if (strcmp(if_nomatch, etag.c_str()) == 0) {
+ string if_nomatch_str = rgw_string_unquote(if_nomatch);
+ ldout(cct, 10) << "ETag: " << etag.c_str() << " " << " If-NoMatch: " << if_nomatch_str << dendl;
+ if (if_nomatch_str.compare(etag.c_str()) == 0) {
r = -ERR_NOT_MODIFIED;
goto done_err;
}
+ if_nomatch = if_nomatch_str.c_str();
}
}