Add "get_sha1()" helper function.
[git.git] / sha1_file.c
index 29f48d5..d91e072 100644 (file)
@@ -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];