From 7683205c69c76b6515c242429a927974aedfb5c0 Mon Sep 17 00:00:00 2001 From: "Chloe M." Date: Sat, 22 Aug 2026 06:48:01 +0000 Subject: core: build: Add manifest handling This resolves redundant rebuilds by detecting when there are differences in a built file. Signed-off-by: Chloe M. --- core/hash.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 core/hash.c (limited to 'core/hash.c') diff --git a/core/hash.c b/core/hash.c new file mode 100644 index 0000000..557e406 --- /dev/null +++ b/core/hash.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2026, Chloe M., et al. + * Provided under the BSD-3 clause. + */ + +#include +#include +#include +#include +#include "bop/hash.h" + +int +bop_hash_file(const char *path, char hashres[BOP_HASH_LEN]) +{ + int fd; + size_t len, i; + uint8_t hash[SHA256_DIGEST_LENGTH]; + void *mem; + + if (path == NULL) { + return -1; + } + + if ((fd = open(path, O_RDONLY)) < 0) { + perror("open"); + return -1; + } + + /* Grab the file length */ + len = lseek(fd, 0, SEEK_END); + lseek(fd, 0, SEEK_SET); + + /* Map the file */ + mem = mmap( + NULL, + len, + PROT_READ, + MAP_SHARED, + fd, + 0 + ); + + if (mem == NULL) { + perror("mmap"); + close(fd); + return -1; + } + + SHA256(mem, len, hash); + for (i = 0; i < SHA256_DIGEST_LENGTH; ++i) { + sprintf((char *)hashres + i*2, "%02X", hash[i]); + } + return 0; +} -- cgit v1.2.3