aboutsummaryrefslogtreecommitdiff
path: root/sha1_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'sha1_file.c')
-rw-r--r--sha1_file.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/sha1_file.c b/sha1_file.c
index 29f48d56b..d91e072f3 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -45,6 +45,35 @@ int get_sha1_hex(const char *hex, unsigned char *sha1)
return 0;
}
+int get_sha1_file(const char *path, unsigned char *result)
+{
+ char buffer[60];
+ int fd = open(path, O_RDONLY);
+ int len;
+
+ if (fd < 0)
+ return -1;
+ len = read(fd, buffer, sizeof(buffer));
+ close(fd);
+ if (len < 40)
+ return -1;
+ return get_sha1_hex(buffer, result);
+}
+
+int get_sha1(const char *str, unsigned char *sha1)
+{
+ static char pathname[PATH_MAX];
+
+ if (!get_sha1_hex(str, sha1))
+ return 0;
+ if (!get_sha1_file(str, sha1))
+ return 0;
+ snprintf(pathname, sizeof(pathname), ".git/%s", str);
+ if (!get_sha1_file(pathname, sha1))
+ return 0;
+ return -1;
+}
+
char * sha1_to_hex(const unsigned char *sha1)
{
static char buffer[50];