From ac363b0b326afc73b7e01d0bed8848ed336e0a39 Mon Sep 17 00:00:00 2001 From: auric <104602845+ihateamongus@users.noreply.github.com> Date: Sun, 7 Sep 2025 19:23:44 -0500 Subject: refactor: share accent color shm header --- accent.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 accent.h (limited to 'accent.h') diff --git a/accent.h b/accent.h new file mode 100644 index 0000000..8c9c6d4 --- /dev/null +++ b/accent.h @@ -0,0 +1,52 @@ +#ifndef ACCENT_H +#define ACCENT_H +#include +#include +#include +#include +#include + +#define SHMNAME "/breathing_color_shm" +#define SHM_MAGIC 0xBEEFCAFEu +#define SHM_VERSION 1u + +typedef struct { + uint32_t magic; + uint32_t version; + volatile uint32_t seq; + char color[8]; +} ColorShm; + +static inline ColorShm * +mapaccent(void) +{ + int fd; + ColorShm *blk; + if ((fd = shm_open(SHMNAME, O_RDONLY, 0)) < 0) + return NULL; + blk = mmap(NULL, sizeof(ColorShm), PROT_READ, MAP_SHARED, fd, 0); + close(fd); + if (blk == MAP_FAILED) + return NULL; + if (blk->magic != SHM_MAGIC || blk->version != SHM_VERSION) { + munmap(blk, sizeof(ColorShm)); + return NULL; + } + return blk; +} + +static inline int +readaccent(ColorShm **blk, char out[8]) +{ + uint32_t s1, s2; + if (!*blk && !(*blk = mapaccent())) + return 0; + do { + s1 = (*blk)->seq; + memcpy(out, (*blk)->color, 8); + s2 = (*blk)->seq; + } while (s1 != s2); + return out[0] == '#'; +} + +#endif /* ACCENT_H */ -- cgit v1.2.3