From f7f7332afafd4f965c5ef1d45cc1c7da9275c6ef Mon Sep 17 00:00:00 2001 From: David Timber Date: Mon, 14 Sep 2020 15:47:30 +0930 Subject: * Add "--enable-static" configure option * Change "PRNE_DEBUG" macro use * Add "PRNE_VERBOSE" * Impl "recon" * Add "inet.h" for Internet Protocol stuff * Changes regarding "PRNE_RND_WELL512_SEEDLEN" * Add prne_own_realloc() for objects with multiple array memebers * Add prne_add_timespec() --- src/util_rt.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) (limited to 'src/util_rt.c') diff --git a/src/util_rt.c b/src/util_rt.c index 24e924d..df12015 100644 --- a/src/util_rt.c +++ b/src/util_rt.c @@ -123,6 +123,32 @@ size_t prne_getpagesize (void) { return (size_t)ret; } +bool prne_own_realloc ( + void **p, + bool *ownership, + const size_t se, + size_t *old, + const size_t req) +{ + void *ny = prne_realloc( + *ownership ? *p : NULL, + se, + req); + + if (req > 0 && ny == NULL) { + return false; + } + + if (!*ownership) { + memcpy(ny, *p, prne_op_min(*old, req) * se); + } + *p = ny; + *old = req; + *ownership = true; + + return true; +} + bool prne_nstreq (const char *a, const char *b) { return strcmp(a == NULL ? "" : a, b == NULL ? "" : b) == 0; } @@ -293,6 +319,19 @@ void prne_uuid_tostr (const uint8_t *in, char *out) { out[ptr] = 0; } +struct timespec prne_add_timespec ( + const struct timespec a, + const struct timespec b) +{ + struct timespec ret; + + ret.tv_nsec = a.tv_nsec + b.tv_nsec; + ret.tv_sec = a.tv_sec + b.tv_sec + (ret.tv_nsec / 1000000000); + ret.tv_nsec %= 1000000000; + + return ret; +} + struct timespec prne_sub_timespec (const struct timespec a, const struct timespec b) { struct timespec ret; @@ -422,3 +461,35 @@ ssize_t prne_geturandom (void *buf, const size_t len) { return ret; } + +void prne_bitop_and ( + const uint8_t *a, + const uint8_t *b, + uint8_t *c, + const size_t len) +{ + for (size_t i = 0; i < len; i += 1) { + c[i] = a[i] & b[i]; + } +} + +void prne_bitop_or ( + const uint8_t *a, + const uint8_t *b, + uint8_t *c, + const size_t len) +{ + for (size_t i = 0; i < len; i += 1) { + c[i] = a[i] | b[i]; + } +} + +void prne_bitop_inv ( + const uint8_t *x, + uint8_t *y, + const size_t len) +{ + for (size_t i = 0; i < len; i += 1) { + y[i] = ~x[i]; + } +} -- cgit