X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcore%2Ftime.c;h=5d34e18b4fed99a8769ed9f17d226e6d9432db5d;hb=9935ca9e91f79b4f5ee6e9a7f94912b7992e8858;hp=fe57384a2aac81572021925b3c09e0eda75c9167;hpb=dfb8c3997e59f23727872d981b19ea59023a4ad5;p=sysdb.git diff --git a/src/core/time.c b/src/core/time.c index fe57384..5d34e18 100644 --- a/src/core/time.c +++ b/src/core/time.c @@ -41,7 +41,7 @@ * public API */ -/* 1 second (in micro-seconds) */ +/* 1 second (in nano-seconds) */ #define SEC 1000000000L const sdb_time_t SDB_INTERVAL_YEAR = 3652425L * 24L * 60L * 60L * 100000L; @@ -115,16 +115,16 @@ sdb_strfinterval(char *s, size_t len, sdb_time_t interval) #define LEN (len > n ? len - n : 0) for (i = 0; i < SDB_STATIC_ARRAY_LEN(specs); ++i) { if (interval >= specs[i].interval) { - n += snprintf(s + n, LEN, "%"PRIscTIME"%s", + n += snprintf(s + n, LEN, "%"PRIsdbTIME"%s", interval / specs[i].interval, specs[i].suffix); interval %= specs[i].interval; - if (i == SDB_STATIC_ARRAY_LEN(specs) - 1) + if (specs[i].interval == SDB_INTERVAL_SECOND) have_seconds = 1; } } if (interval) { - n += snprintf(s + n, LEN, ".%09"PRIscTIME, interval); + n += snprintf(s + n, LEN, ".%09"PRIsdbTIME, interval); have_seconds = 1; /* removing trailing zeroes */ @@ -147,5 +147,31 @@ sdb_strfinterval(char *s, size_t len, sdb_time_t interval) return n; } /* sdb_strfinterval */ +sdb_time_t +sdb_strpunit(const char *s) +{ + struct { + const char *s; + sdb_time_t unit; + } units[] = { + { "Y", SDB_INTERVAL_YEAR }, + { "M", SDB_INTERVAL_MONTH }, + { "D", SDB_INTERVAL_DAY }, + { "h", SDB_INTERVAL_HOUR }, + { "m", SDB_INTERVAL_MINUTE }, + { "s", SDB_INTERVAL_SECOND }, + { "ms", SDB_INTERVAL_SECOND / 1000L }, + { "us", SDB_INTERVAL_SECOND / 1000000L }, + { "ns", 1 }, + }; + + size_t i; + + for (i = 0; i < SDB_STATIC_ARRAY_LEN(units); ++i) + if (! strcmp(s, units[i].s)) + return units[i].unit; + return 0; +} /* sdb_strpunit */ + /* vim: set tw=78 sw=4 ts=4 noexpandtab : */