diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2025-06-30 11:53:31 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2025-06-30 11:53:31 -0400 |
commit | 2ab4c05b391945e876ac6b266642e3799fc3d536 (patch) | |
tree | c0612911d3090ccd59aaccfafd84db38d5a11b4c | |
parent | 25e9ffa5dfe2e17498b58e7e73d1569abea314bb (diff) | |
download | stasis-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.h | 5 | ||||
-rw-r--r-- | src/lib/core/utils.c | 28 |
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; +} + |