From a7c3c4fdd6f8b5fc820c14bf56ff6077f829f90a Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 19 Aug 2016 04:39:06 -0700 Subject: [PATCH] rgw: utility function to dump iso8601 Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_common.cc | 26 ++++++++++++++++++++++++++ src/rgw/rgw_common.h | 2 ++ src/rgw/rgw_rest.cc | 16 ++-------------- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/rgw/rgw_common.cc b/src/rgw/rgw_common.cc index ffe34094a648a..50c3b90b7d3ad 100644 --- a/src/rgw/rgw_common.cc +++ b/src/rgw/rgw_common.cc @@ -474,6 +474,32 @@ int parse_time(const char *time_str, real_time *time) return 0; } +#define TIME_BUF_SIZE 128 + +void rgw_to_iso8601(const real_time& t, char *dest, int buf_size) +{ + utime_t ut(t); + + char buf[TIME_BUF_SIZE]; + struct tm result; + time_t epoch = ut.sec(); + struct tm *tmp = gmtime_r(&epoch, &result); + if (tmp == NULL) + return; + + if (strftime(buf, sizeof(buf), "%Y-%m-%dT%T", tmp) == 0) + return; + + snprintf(dest, buf_size, "%s.%03dZ", buf, (int)(ut.usec() / 1000)); +} + +void rgw_to_iso8601(const real_time& t, string *dest) +{ + char buf[TIME_BUF_SIZE]; + rgw_to_iso8601(t, buf, sizeof(buf)); + *dest = buf; +} + /* * calculate the sha1 value of a given msg and key */ diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 42a1ec8219872..96c03a4eb874a 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -1914,6 +1914,8 @@ extern bool parse_iso8601(const char *s, struct tm *t, uint32_t *pns = NULL, boo extern string rgw_trim_whitespace(const string& src); extern string rgw_trim_quotes(const string& val); +extern void rgw_to_iso8601(const real_time& t, char *dest, int buf_size); +extern void rgw_to_iso8601(const real_time& t, string *dest); /** Check if the req_state's user has the necessary permissions * to do the requested action */ diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc index 06da365b6842d..20b846e65d406 100644 --- a/src/rgw/rgw_rest.cc +++ b/src/rgw/rgw_rest.cc @@ -527,22 +527,10 @@ void dump_epoch_header(struct req_state *s, const char *name, real_time t) void dump_time(struct req_state *s, const char *name, real_time *t) { - utime_t ut(*t); - char buf[TIME_BUF_SIZE]; - struct tm result; - time_t epoch = ut.sec(); - struct tm *tmp = gmtime_r(&epoch, &result); - if (tmp == NULL) - return; - - if (strftime(buf, sizeof(buf), "%Y-%m-%dT%T", tmp) == 0) - return; - - char buf2[TIME_BUF_SIZE]; - snprintf(buf2, sizeof(buf2), "%s.%03dZ", buf, (int)(ut.usec() / 1000)); + rgw_to_iso8601(*t, buf, sizeof(buf)); - s->formatter->dump_string(name, buf2); + s->formatter->dump_string(name, buf); } void dump_owner(struct req_state *s, rgw_user& id, string& name, -- 2.39.5