1 /*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5 #ifndef UTILS_H
6 #define UTILS_H
7
8
9 #include <dirent.h>
10 #include <string.h>
11 #include <time.h>
12
13 #include <OS.h>
14
15
16 inline bool operator<(const timespec& a, const timespec& b)
17 {
18 return a.tv_sec < b.tv_sec
19 || (a.tv_sec == b.tv_sec && a.tv_nsec < b.tv_nsec);
20 }
21
22
23 inline bool operator>(const timespec& a, const timespec& b)
24 {
25 return b < a;
26 }
27
28
29 static inline bool
set_dirent_name(struct dirent * buffer,size_t bufferSize,const char * name,size_t nameLen)30 set_dirent_name(struct dirent* buffer, size_t bufferSize, const char* name,
31 size_t nameLen)
32 {
33 size_t length = (buffer->d_name + nameLen + 1) - (char*)buffer;
34 if (length > bufferSize)
35 return false;
36
37 memcpy(buffer->d_name, name, nameLen);
38 buffer->d_name[nameLen] = '\0';
39 buffer->d_reclen = length;
40 return true;
41 }
42
43
44 static inline bool
set_dirent_name(struct dirent * buffer,size_t bufferSize,const char * name)45 set_dirent_name(struct dirent* buffer, size_t bufferSize, const char* name)
46 {
47 return set_dirent_name(buffer, bufferSize, name, strlen(name));
48 }
49
50
51 static inline void
get_real_time(timespec & time)52 get_real_time(timespec& time)
53 {
54 bigtime_t timeMicros = real_time_clock_usecs();
55
56 time.tv_sec = timeMicros / 1000000;
57 time.tv_nsec = (timeMicros % 1000000) * 1000;
58 }
59
60
61 #endif // UTILS_H
62