Commit 1f10747854f04d0ff0e582682613a7cc8a3bcbc8

Vicent Martí 2013-03-25T13:26:50

Merge pull request #1428 from xavier-l/nul-terminated-oid Nul terminated oid

diff --git a/include/git2/oid.h b/include/git2/oid.h
index 6be02da..d2f3f4a 100644
--- a/include/git2/oid.h
+++ b/include/git2/oid.h
@@ -47,6 +47,16 @@ typedef struct git_oid {
 GIT_EXTERN(int) git_oid_fromstr(git_oid *out, const char *str);
 
 /**
+ * Parse a hex formatted null-terminated string into a git_oid.
+ *
+ * @param out oid structure the result is written into.
+ * @param str input hex string; must be at least 4 characters
+ *      long and null-terminated. 
+ * @return 0 or an error code
+ */
+GIT_EXTERN(int) git_oid_fromstrp(git_oid *out, const char *str);
+
+/**
  * Parse N characters of a hex formatted object id into a git_oid
  *
  * If N is odd, N-1 characters will be parsed instead.
diff --git a/src/oid.c b/src/oid.c
index 25c6fce..1d994c3 100644
--- a/src/oid.c
+++ b/src/oid.c
@@ -51,6 +51,11 @@ int git_oid_fromstrn(git_oid *out, const char *str, size_t length)
 	return 0;
 }
 
+int git_oid_fromstrp(git_oid *out, const char *str)
+{
+	return git_oid_fromstrn(out, str, strlen(str));
+}
+
 int git_oid_fromstr(git_oid *out, const char *str)
 {
 	return git_oid_fromstrn(out, str, GIT_OID_HEXSZ);
diff --git a/tests-clar/core/oid.c b/tests-clar/core/oid.c
index c897139..cd88b4e 100644
--- a/tests-clar/core/oid.c
+++ b/tests-clar/core/oid.c
@@ -1,11 +1,17 @@
 #include "clar_libgit2.h"
 
 static git_oid id;
+static git_oid idp;
+static git_oid idm;
 const char *str_oid = "ae90f12eea699729ed24555e40b9fd669da12a12";
+const char *str_oid_p = "ae90f12eea699729ed";
+const char *str_oid_m = "ae90f12eea699729ed24555e40b9fd669da12a12THIS IS EXTRA TEXT THAT SHOULD GET IGNORED";
 
 void test_core_oid__initialize(void)
 {
 	cl_git_pass(git_oid_fromstr(&id, str_oid));
+	cl_git_pass(git_oid_fromstrp(&idp, str_oid_p));
+	cl_git_pass(git_oid_fromstrp(&idm, str_oid_m));
 }
 
 void test_core_oid__streq(void)
@@ -15,4 +21,12 @@ void test_core_oid__streq(void)
 
 	cl_assert(git_oid_streq(&id, "deadbeef") == -1);
 	cl_assert(git_oid_streq(&id, "I'm not an oid.... :)") == -1);
+	
+	cl_assert(git_oid_streq(&idp, "ae90f12eea699729ed0000000000000000000000") == 0);
+	cl_assert(git_oid_streq(&idp, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef") == -1);
+
+	cl_assert(git_oid_streq(&idp, "deadbeef") == -1);
+	cl_assert(git_oid_streq(&idp, "I'm not an oid.... :)") == -1);
+	
+	cl_assert(git_oid_cmp(&id, &idm) == 0);
 }