diff options
Diffstat (limited to 'sha1_file.c')
-rw-r--r-- | sha1_file.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sha1_file.c b/sha1_file.c index 29f48d56b1..d91e072f3e 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]; |