Skip to content

Commit b82d566

Browse files
committed
oid: introduce git_oid__is_hexstr
Introduce a function that determines whether a given string is a valid object id (40 chars of hexadigits).
1 parent 4efd656 commit b82d566

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/oid.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,16 @@ GIT_INLINE(void) git_oid__cpy_prefix(
4848
out->id[len / 2] &= 0xF0;
4949
}
5050

51+
GIT_INLINE(bool) git_oid__is_hexstr(const char *str)
52+
{
53+
size_t i;
54+
55+
for (i = 0; str[i] != '\0'; i++) {
56+
if (git__fromhex(str[i]) < 0)
57+
return false;
58+
}
59+
60+
return (i == GIT_OID_HEXSZ);
61+
}
62+
5163
#endif

tests/core/oid.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "clar_libgit2.h"
2+
#include "oid.h"
23

34
static git_oid id;
45
static git_oid idp;
@@ -68,3 +69,11 @@ void test_core_oid__ncmp(void)
6869
cl_assert(!git_oid_ncmp(&id, &id, 40));
6970
cl_assert(!git_oid_ncmp(&id, &id, 41));
7071
}
72+
73+
void test_core_oid__is_hexstr(void)
74+
{
75+
cl_assert(git_oid__is_hexstr("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"));
76+
cl_assert(!git_oid__is_hexstr("deadbeefdeadbeef"));
77+
cl_assert(!git_oid__is_hexstr("zeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"));
78+
cl_assert(!git_oid__is_hexstr("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef1"));
79+
}

0 commit comments

Comments
 (0)