remote.c: minor clean-up of match_explicit()
[gitweb.git] / entry.c
diff --git a/entry.c b/entry.c
index 50ffae40c76478a10d1c3fc9623105e7f14f863e..c540ae13e858685faa8dbbada5b064074235ae6d 100644 (file)
--- a/entry.c
+++ b/entry.c
@@ -1,7 +1,7 @@
 #include "cache.h"
 #include "blob.h"
 
-static void create_directories(const char *path, struct checkout *state)
+static void create_directories(const char *path, const struct checkout *state)
 {
        int len = strlen(path);
        char *buf = xmalloc(len + 1);
@@ -31,9 +31,9 @@ static void remove_subtree(const char *path)
        struct dirent *de;
        char pathbuf[PATH_MAX];
        char *name;
-       
+
        if (!dir)
-               die("cannot opendir %s", path);
+               die("cannot opendir %s (%s)", path, strerror(errno));
        strcpy(pathbuf, path);
        name = pathbuf + strlen(path);
        *name++ = '/';
@@ -45,15 +45,15 @@ static void remove_subtree(const char *path)
                        continue;
                strcpy(name, de->d_name);
                if (lstat(pathbuf, &st))
-                       die("cannot lstat %s", pathbuf);
+                       die("cannot lstat %s (%s)", pathbuf, strerror(errno));
                if (S_ISDIR(st.st_mode))
                        remove_subtree(pathbuf);
                else if (unlink(pathbuf))
-                       die("cannot unlink %s", pathbuf);
+                       die("cannot unlink %s (%s)", pathbuf, strerror(errno));
        }
        closedir(dir);
        if (rmdir(path))
-               die("cannot rmdir %s", path);
+               die("cannot rmdir %s (%s)", path, strerror(errno));
 }
 
 static int create_file(const char *path, unsigned int mode)
@@ -75,14 +75,14 @@ static void *read_blob_entry(struct cache_entry *ce, const char *path, unsigned
        return NULL;
 }
 
-static int write_entry(struct cache_entry *ce, char *path, struct checkout *state, int to_tempfile)
+static int write_entry(struct cache_entry *ce, char *path, const struct checkout *state, int to_tempfile)
 {
        int fd;
        long wrote;
 
        switch (ntohl(ce->ce_mode) & S_IFMT) {
                char *buf, *new;
-               unsigned long size, nsize;
+               unsigned long size;
 
        case S_IFREG:
                new = read_blob_entry(ce, path, &size);
@@ -103,12 +103,10 @@ static int write_entry(struct cache_entry *ce, char *path, struct checkout *stat
                /*
                 * Convert from git internal format to working tree format
                 */
-               buf = new;
-               nsize = size;
-               if (convert_to_working_tree(ce->name, &buf, &nsize)) {
+               buf = convert_to_working_tree(ce->name, new, &size);
+               if (buf) {
                        free(new);
                        new = buf;
-                       size = nsize;
                }
 
                wrote = write_in_full(fd, new, size);
@@ -147,7 +145,7 @@ static int write_entry(struct cache_entry *ce, char *path, struct checkout *stat
                                                 "symlink %s (%s)", path, strerror(errno));
                }
                break;
-       case S_IFDIRLNK:
+       case S_IFGITLINK:
                if (to_tempfile)
                        return error("git-checkout-index: cannot create temporary subproject %s", path);
                if (mkdir(path, 0777) < 0)
@@ -165,7 +163,7 @@ static int write_entry(struct cache_entry *ce, char *path, struct checkout *stat
        return 0;
 }
 
-int checkout_entry(struct cache_entry *ce, struct checkout *state, char *topath)
+int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath)
 {
        static char path[PATH_MAX + 1];
        struct stat st;
@@ -196,7 +194,7 @@ int checkout_entry(struct cache_entry *ce, struct checkout *state, char *topath)
                unlink(path);
                if (S_ISDIR(st.st_mode)) {
                        /* If it is a gitlink, leave it alone! */
-                       if (S_ISDIRLNK(ntohl(ce->ce_mode)))
+                       if (S_ISGITLINK(ntohl(ce->ce_mode)))
                                return 0;
                        if (!state->force)
                                return error("%s is a directory", path);