Signed-off-by: Shi Lei <shi_lei(a)massclouds.com>
---
src/libvirt_private.syms | 3 +++
src/util/virstring.c | 57 ++++++++++++++++++++++++++++++++++++++++
src/util/virstring.h | 9 +++++++
3 files changed, 69 insertions(+)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 191eab0..4ad9d1e 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -3242,6 +3242,7 @@ virStringStripSuffix;
virStringToUpper;
virStringTrimOptionalNewline;
virStrncpy;
+virStrToBool;
virStrToDouble;
virStrToLong_i;
virStrToLong_l;
@@ -3252,6 +3253,8 @@ virStrToLong_ul;
virStrToLong_ull;
virStrToLong_ullp;
virStrToLong_ulp;
+virStrToTime;
+virTimeFormatBuf;
virTrimSpaces;
diff --git a/src/util/virstring.c b/src/util/virstring.c
index de2ef96..23ade40 100644
--- a/src/util/virstring.c
+++ b/src/util/virstring.c
@@ -1349,3 +1349,60 @@ int virStringParseYesNo(const char *str, bool *result)
return 0;
}
+
+
+int
+virStrToBool(const char *str, const char *truevalue, bool *result)
+{
+ if (STREQ(str, truevalue))
+ *result = true;
+ else
+ *result = false;
+
+ return 0;
+}
+
+
+int virStrToTime(const char *str, time_t *result)
+{
+ g_autoptr(GDateTime) then = NULL;
+ g_autoptr(GTimeZone) tz = g_time_zone_new_utc();
+ char *tmp;
+ int year, mon, mday, hour, min, sec;
+
+ /* Expect: YYYY-MM-DDTHH:MM:SS (%d-%d-%dT%d:%d:%d) eg 2010-11-28T14:29:01 */
+ if (/* year */
+ virStrToLong_i(str, &tmp, 10, &year) < 0 || *tmp != '-' ||
+ /* month */
+ virStrToLong_i(tmp+1, &tmp, 10, &mon) < 0 || *tmp != '-' ||
+ /* day */
+ virStrToLong_i(tmp+1, &tmp, 10, &mday) < 0 || *tmp != 'T' ||
+ /* hour */
+ virStrToLong_i(tmp+1, &tmp, 10, &hour) < 0 || *tmp != ':' ||
+ /* minute */
+ virStrToLong_i(tmp+1, &tmp, 10, &min) < 0 || *tmp != ':' ||
+ /* second */
+ virStrToLong_i(tmp+1, &tmp, 10, &sec) < 0 || *tmp != '\0') {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("invalid time '%s', expect
YYYY-MM-DDTHH:MM:SS"),
+ str);
+ return -1;
+ }
+
+ then = g_date_time_new(tz, year, mon, mday, hour, min, sec);
+ *result = (time_t)g_date_time_to_unix(then);
+ return 0;
+}
+
+
+int
+virTimeFormatBuf(virBufferPtr buf, const char *layout, const time_t time)
+{
+ g_autoptr(GDateTime) then = NULL;
+ g_autofree char *thenstr = NULL;
+
+ then = g_date_time_new_from_unix_utc(time);
+ thenstr = g_date_time_format(then, "%Y-%m-%dT%H:%M:%S");
+ virBufferAsprintf(buf, layout, thenstr);
+ return 0;
+}
diff --git a/src/util/virstring.h b/src/util/virstring.h
index 561ce0c..658b575 100644
--- a/src/util/virstring.h
+++ b/src/util/virstring.h
@@ -19,6 +19,7 @@
#pragma once
#include "internal.h"
+#include "virbuffer.h"
#define VIR_INT64_STR_BUFLEN 21
@@ -179,6 +180,14 @@ int virStringParsePort(const char *str,
int virStringParseYesNo(const char *str,
bool *result)
G_GNUC_WARN_UNUSED_RESULT;
+
+int virStrToBool(const char *str, const char *truevalue, bool *result);
+
+int virStrToTime(const char *str, time_t *result)
+ G_GNUC_WARN_UNUSED_RESULT;
+
+int virTimeFormatBuf(virBufferPtr buf, const char *layout, const time_t time);
+
/**
* VIR_AUTOSTRINGLIST:
*
--
2.25.1