aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2025-06-30 11:53:31 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2025-06-30 11:53:31 -0400
commit2ab4c05b391945e876ac6b266642e3799fc3d536 (patch)
treec0612911d3090ccd59aaccfafd84db38d5a11b4c
parent25e9ffa5dfe2e17498b58e7e73d1569abea314bb (diff)
downloadstasis-2ab4c05b391945e876ac6b266642e3799fc3d536.tar.gz
Add helper functions
* in_ascii_range: determine if the input character is within the defined range * is_git_sha: determine if the string is most likely a git commit string
-rw-r--r--src/lib/core/include/utils.h5
-rw-r--r--src/lib/core/utils.c28
2 files changed, 33 insertions, 0 deletions
diff --git a/src/lib/core/include/utils.h b/src/lib/core/include/utils.h
index 583a8b8..1512285 100644
--- a/src/lib/core/include/utils.h
+++ b/src/lib/core/include/utils.h
@@ -456,4 +456,9 @@ void debug_hexdump(char *data, int len);
* @return -1 on error
*/
int grow(size_t size_new, size_t *size_orig, char **data);
+
+int in_ascii_range(char c, char lower, char upper);
+
+#define GIT_HASH_LEN 40
+int is_git_sha(char const *hash);
#endif //STASIS_UTILS_H
diff --git a/src/lib/core/utils.c b/src/lib/core/utils.c
index f02a7ea..3d9659d 100644
--- a/src/lib/core/utils.c
+++ b/src/lib/core/utils.c
@@ -966,3 +966,31 @@ int grow(const size_t size_new, size_t *size_orig, char **data) {
return 0;
}
+int in_ascii_range(const char c, char lower, char upper) {
+ if (!(c >= lower && c <= upper)) {
+ return 0;
+ }
+ return 1;
+}
+
+int is_git_sha(char const *hash) {
+ size_t result = 0;
+ size_t len = strlen(hash);
+
+ if (len > GIT_HASH_LEN) {
+ // too long to be a git commit hash
+ return 0;
+ }
+ for (size_t i = 0; i < len; i++) {
+ if (in_ascii_range(hash[i], 'a', 'f')
+ || in_ascii_range(hash[i], 'A', 'F')
+ || in_ascii_range(hash[i], '0', '9')) {
+ result++;
+ }
+ }
+ if (result < len) {
+ return 0;
+ }
+ return 1;
+}
+