summaryrefslogtreecommitdiff
path: root/src/util.h
diff options
context:
space:
mode:
authorAnders Betts <anders.betts@gmail.com>2026-09-17 19:55:36 +0200
committerAnders Betts <anders.betts@gmail.com>2026-09-17 19:55:36 +0200
commit380195f7cd5e57acf2c1cf2bc41069e6b0b979ed (patch)
tree32a88fb22a7fbe8f1fd5c105156d1f928c93950d /src/util.h
downloadbokf-380195f7cd5e57acf2c1cf2bc41069e6b0b979ed.tar.gz
bokf-380195f7cd5e57acf2c1cf2bc41069e6b0b979ed.zip
Initial commit: daemon, clients, docs, Docker deploy pipelinev0.1.0
Diffstat (limited to 'src/util.h')
-rw-r--r--src/util.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/util.h b/src/util.h
new file mode 100644
index 0000000..d854f76
--- /dev/null
+++ b/src/util.h
@@ -0,0 +1,53 @@
+#ifndef BOKF_UTIL_H
+#define BOKF_UTIL_H
+
+#include <stddef.h>
+#include <stdint.h>
+#include <time.h>
+
+void *xmalloc(size_t n);
+void *xcalloc(size_t n, size_t sz);
+void *xrealloc(void *p, size_t n);
+char *xstrdup(const char *s);
+
+struct buf {
+ unsigned char *p;
+ size_t len, cap;
+};
+
+void buf_init(struct buf *b);
+void buf_free(struct buf *b);
+void buf_append(struct buf *b, const void *data, size_t n);
+void buf_append_u16be(struct buf *b, uint16_t v);
+void buf_append_u32be(struct buf *b, uint32_t v);
+void buf_append_u64be(struct buf *b, uint64_t v);
+
+void util_sha256(const void *data, size_t n, unsigned char out[32]);
+void util_hex(const unsigned char *in, size_t n, char *out);
+char *util_b64url(const unsigned char *in, size_t n);
+char *util_b64(const unsigned char *in, size_t n);
+int util_random(void *out, size_t n);
+char *util_random_id(const char *prefix, size_t nbytes);
+int util_const_eq(const void *a, const void *b, size_t n);
+int64_t util_now(void);
+void util_iso8601(int64_t t, char *buf, size_t n);
+char *util_str_trim(char *s);
+int util_parse_iso_date(const char *s);
+
+/* base64 (standard alphabet, padding required) */
+int util_b64_decode(const char *in, size_t in_len, unsigned char **out,
+ size_t *out_len);
+
+/* date helpers, all dates "YYYY-MM-DD" */
+int util_date_parse(const char *s, int *y, int *m, int *d);
+void util_date_fmt(int y, int m, int d, char *buf, size_t n);
+int util_days_in_month(int y, int m);
+void util_date_add_months(const char *date, int months, char *out, size_t n);
+void util_date_add_days(const char *date, int days, char *out, size_t n);
+int util_date_valid(const char *s);
+
+/* encoding conversion for SIE files (IBM PC8 / CP437) */
+size_t util_utf8_to_cp437(const char *in, unsigned char *out, size_t out_sz);
+char *util_cp437_to_utf8(const unsigned char *in, size_t n);
+
+#endif