diff options
-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; +} + |