xref: /haiku/src/add-ons/kernel/file_systems/packagefs/util/Utils.h (revision 9f81ca838ce7b92b5689e57d3f86765db4705a7b)
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