libbsd: add strtonum(), nitems(), timespec operation functions from FreeBSD

Change-Id: I56b677b382d17a27d243b615de19bec10f3a2810
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7426
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
Jérôme Duval
2024-02-26 14:06:29 +00:00
committed by waddlesplash
parent b8caef6915
commit 01dc1ea4cf
5 changed files with 98 additions and 0 deletions
+3
View File
@@ -27,6 +27,9 @@ uint32_t arc4random_uniform(uint32_t upper_bound);
int mkstemps(char *templat, int slen);
long long strtonum(const char *numstr, long long minval,
long long maxval, const char **errstrp);
#ifdef __cplusplus
}
#endif
+2
View File
@@ -37,6 +37,8 @@
#define NBBY 8
#define nitems(x) (sizeof((x)) / sizeof((x)[0]))
#endif
+27
View File
@@ -13,6 +13,33 @@
#ifdef _DEFAULT_SOURCE
/* BSDish macros operating on timespec structs */
#define timespecadd(a, b, res) \
do { \
(res)->tv_sec = (a)->tv_sec + (b)->tv_sec; \
(res)->tv_nsec = (a)->tv_nsec + (b)->tv_nsec; \
if ((res)->tv_nsec >= 1000000000L) { \
(res)->tv_nsec -= 1000000000L; \
(res)->tv_sec++; \
} \
} while (0)
#define timespecsub(a, b, res) \
do { \
(res)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
(res)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec; \
if ((res)->tv_nsec < 0) { \
(res)->tv_nsec += 1000000000L; \
(res)->tv_sec--; \
} \
} while (0)
#define timespecclear(a) ((a)->tv_sec = (a)->tv_nsec = 0)
#define timespecisset(a) ((a)->tv_sec != 0 || (a)->tv_nsec != 0)
#define timespeccmp(a, b, cmp) (((a)->tv_sec == (b)->tv_sec) \
? (a)->tv_nsec cmp (b)->tv_nsec : (a)->tv_sec cmp (b)->tv_sec))
#define timespecvalid_interval(a) ((a)->tv_sec >= 0 \
&& (a)->tv_nsec >= 0 && (&)->tv_nsec < 1000000000L)
#ifdef __cplusplus
extern "C" {
#endif