Fix up previous commit
[git.git] / sha1_file.c
index 430f5fd..83bc38c 100644 (file)
@@ -59,6 +59,38 @@ int get_sha1_file(const char *path, unsigned char *result)
        return get_sha1_hex(buffer, result);
 }
 
+static char *git_dir, *git_object_dir, *git_index_file;
+static void setup_git_env(void)
+{
+       git_dir = gitenv(GIT_DIR_ENVIRONMENT);
+       if (!git_dir)
+               git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
+       git_object_dir = gitenv(DB_ENVIRONMENT);
+       if (!git_object_dir) {
+               git_object_dir = xmalloc(strlen(git_dir) + 9);
+               sprintf(git_object_dir, "%s/objects", git_dir);
+       }
+       git_index_file = gitenv(INDEX_ENVIRONMENT);
+       if (!git_index_file) {
+               git_index_file = xmalloc(strlen(git_dir) + 7);
+               sprintf(git_index_file, "%s/index", git_dir);
+       }
+}
+
+char *get_object_directory(void)
+{
+       if (!git_object_dir)
+               setup_git_env();
+       return git_object_dir;
+}
+
+char *get_index_file(void)
+{
+       if (!git_index_file)
+               setup_git_env();
+       return git_index_file;
+}
+
 int get_sha1(const char *str, unsigned char *sha1)
 {
        static char pathname[PATH_MAX];
@@ -70,15 +102,16 @@ int get_sha1(const char *str, unsigned char *sha1)
                "refs/snap",
                NULL
        };
-       const char *gitdir;
        const char **p;
 
        if (!get_sha1_hex(str, sha1))
                return 0;
 
-       gitdir = ".git";
+       if (!git_dir)
+               setup_git_env();
        for (p = prefix; *p; p++) {
-               snprintf(pathname, sizeof(pathname), "%s/%s/%s", gitdir, *p, str);
+               snprintf(pathname, sizeof(pathname), "%s/%s/%s",
+                        git_dir, *p, str);
                if (!get_sha1_file(pathname, sha1))
                        return 0;
        }
@@ -280,13 +313,13 @@ void * unpack_sha1_file(void *map, unsigned long mapsize, char *type, unsigned l
        int ret, bytes;
        z_stream stream;
        char buffer[8192];
-       char *buf;
+       unsigned char *buf;
 
        /* Get the data stream */
        memset(&stream, 0, sizeof(stream));
        stream.next_in = map;
        stream.avail_in = mapsize;
-       stream.next_out = buffer;
+       stream.next_out = (unsigned char *)buffer;
        stream.avail_out = sizeof(buffer);
 
        inflateInit(&stream);
@@ -326,7 +359,7 @@ void * read_sha1_file(const unsigned char *sha1, char *type, unsigned long *size
 }
 
 void *read_object_with_reference(const unsigned char *sha1,
-                                const unsigned char *required_type,
+                                const char *required_type,
                                 unsigned long *size,
                                 unsigned char *actual_sha1_return)
 {
@@ -370,20 +403,20 @@ void *read_object_with_reference(const unsigned char *sha1,
        }
 }
 
-int write_sha1_file(char *buf, unsigned long len, const char *type, unsigned char *returnsha1)
+int write_sha1_file(void *buf, unsigned long len, const char *type, unsigned char *returnsha1)
 {
        int size;
-       char *compressed;
+       unsigned char *compressed;
        z_stream stream;
        unsigned char sha1[20];
        SHA_CTX c;
        char *filename;
        static char tmpfile[PATH_MAX];
-       char hdr[50];
+       unsigned char hdr[50];
        int fd, hdrlen, ret;
 
        /* Generate the header */
-       hdrlen = sprintf(hdr, "%s %lu", type, len)+1;
+       hdrlen = sprintf((char *)hdr, "%s %lu", type, len)+1;
 
        /* Sha1.. */
        SHA1_Init(&c);
@@ -432,7 +465,7 @@ int write_sha1_file(char *buf, unsigned long len, const char *type, unsigned cha
        stream.next_in = hdr;
        stream.avail_in = hdrlen;
        while (deflate(&stream, 0) == Z_OK)
-               /* nothing */
+               /* nothing */;
 
        /* Then the data itself.. */
        stream.next_in = buf;
@@ -483,8 +516,8 @@ int write_sha1_from_fd(const unsigned char *sha1, int fd)
        int local;
        z_stream stream;
        unsigned char real_sha1[20];
-       char buf[4096];
-       char discard[4096];
+       unsigned char buf[4096];
+       unsigned char discard[4096];
        int ret;
        SHA_CTX c;