diff --git a/src/core/time.c b/src/core/time.c
index fe57384a2aac81572021925b3c09e0eda75c9167..5d34e18b4fed99a8769ed9f17d226e6d9432db5d 100644 (file)
--- a/src/core/time.c
+++ b/src/core/time.c
* 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;
#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 */
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 : */