aboutsummaryrefslogtreecommitdiff
path: root/src/util_rt.c
diff options
context:
space:
mode:
authorDavid Timber <mieabby@gmail.com>2020-09-14 15:47:30 +0930
committerDavid Timber <mieabby@gmail.com>2020-09-14 15:47:30 +0930
commitf7f7332afafd4f965c5ef1d45cc1c7da9275c6ef (patch)
tree53b8e96d2d070215f0c6ee133cdba58ca93a4138 /src/util_rt.c
parentc4160ed41717260b5941e2729c444b8ec051d5f0 (diff)
* 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()
Diffstat (limited to 'src/util_rt.c')
-rw-r--r--src/util_rt.c71
1 files changed, 71 insertions, 0 deletions
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];
+ }
+}