// msec2timespec //
//---------------//
-static inline void msec2timespec(long msec, struct timespec *timespec)
+static inline struct timespec msec2timespec(long msec)
{
- memset(timespec, 0, sizeof(struct timespec));
+ struct timespec result = {-1, -1};
if (msec >= 1000) {
- timespec->tv_sec = msec/1000;
- timespec->tv_nsec = (msec % 1000) * 1000000;
+ result.tv_sec = msec/1000;
+ result.tv_nsec = (msec % 1000) * 1000000;
} else {
- timespec->tv_sec = 0;
- timespec->tv_nsec = msec * 1000000;
+ result.tv_sec = 0;
+ result.tv_nsec = msec * 1000000;
}
+
+ return result;
+}
+
+static inline long timespec2msec(const struct timespec *timespec)
+{
+
+ return (timespec->tv_sec % 2147482) * 1000 + timespec->tv_nsec/1000000;
+}
+
+
+#define HOURS_IN_MSECS 3600000
+#define MINUTES_IN_MSECS 60000
+
+#define HOURS_IN_TS 1000000
+#define MINUTES_IN_TS 100000
+
+static inline long timespec2msects(const struct timespec *timespec)
+{
+ long msec_total = -1;
+ long minutes = -1;
+ long hours = -1;
+
+ long remainder_msecs = -1;
+ long timestamp = -1;
+
+ msec_total = (timespec->tv_sec % 2147482) * 1000 + timespec->tv_nsec/1000000;
+
+ hours = msec_total / HOURS_IN_MSECS;
+ minutes = (msec_total % HOURS_IN_MSECS) / MINUTES_IN_MSECS;
+ remainder_msecs = ( (msec_total % HOURS_IN_MSECS) % MINUTES_IN_MSECS);
+
+ timestamp = hours*HOURS_IN_TS + minutes*MINUTES_IN_TS + remainder_msecs;
+
+ return timestamp;
}
+
//------------------------//
// timespec_lessthan_msec //
{
struct timespec msec_timespec = {0, 0};
- msec2timespec(msec, &msec_timespec);
+ msec_timespec = msec2timespec(msec);
return smaller_timespec(timespec, &msec_timespec);
}
{
struct timespec msec_timespec = {0, 0};
- msec2timespec(msec, &msec_timespec);
+ msec_timespec = msec2timespec(msec);
incr_timespec(timespec, &msec_timespec);
}