+static int get_parent(int index, const char *str, unsigned char *result)
+{
+ unsigned char sha1[20];
+ char *buffer;
+ unsigned long size, offset;
+ int ret;
+
+ if (get_sha1(str, sha1) < 0)
+ return -1;
+ buffer = read_object_with_reference(sha1, "commit", &size, NULL);
+ if (!buffer)
+ return -1;
+ ret = -1;
+ offset = 46;
+ for (;;) {
+ if (offset + 48 > size)
+ break;
+ if (memcmp(buffer + offset, "parent ", 7))
+ break;
+ if (index > 0) {
+ offset += 48;
+ index--;
+ continue;
+ }
+ ret = get_sha1_hex(buffer + offset + 7, result);
+ break;
+ }
+ free(buffer);
+ return ret;
+}
+