X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=entry.c;h=8fb99bc83f2d168e4a374d076608a2f42abbe434;hb=6f0783cf9473feaaadf2ebc59167f84f0b1172bd;hp=15b8fda0c648d6dbb55eddde00e7accfeda5ac8e;hpb=d59a6043a8a7aed97c684fb4f14fe5221df1fcaf;p=git.git diff --git a/entry.c b/entry.c index 15b8fda0..8fb99bc8 100644 --- a/entry.c +++ b/entry.c @@ -60,7 +60,7 @@ static void remove_subtree(const char *path) static int create_file(const char *path, unsigned int mode) { mode = (mode & 0100) ? 0777 : 0666; - return open(path, O_WRONLY | O_TRUNC | O_CREAT | O_EXCL, mode); + return open(path, O_WRONLY | O_CREAT | O_EXCL, mode); } static int write_entry(struct cache_entry *ce, const char *path, struct checkout *state) @@ -70,13 +70,12 @@ static int write_entry(struct cache_entry *ce, const char *path, struct checkout unsigned long size; long wrote; char type[20]; - char target[1024]; new = read_sha1_file(ce->sha1, type, &size); if (!new || strcmp(type, "blob")) { if (new) free(new); - return error("git-checkout-cache: unable to read sha1 file of %s (%s)", + return error("git-checkout-index: unable to read sha1 file of %s (%s)", path, sha1_to_hex(ce->sha1)); } switch (ntohl(ce->ce_mode) & S_IFMT) { @@ -84,28 +83,26 @@ static int write_entry(struct cache_entry *ce, const char *path, struct checkout fd = create_file(path, ntohl(ce->ce_mode)); if (fd < 0) { free(new); - return error("git-checkout-cache: unable to create file %s (%s)", + return error("git-checkout-index: unable to create file %s (%s)", path, strerror(errno)); } wrote = write(fd, new, size); close(fd); free(new); if (wrote != size) - return error("git-checkout-cache: unable to write file %s", path); + return error("git-checkout-index: unable to write file %s", path); break; case S_IFLNK: - memcpy(target, new, size); - target[size] = '\0'; - if (symlink(target, path)) { + if (symlink(new, path)) { free(new); - return error("git-checkout-cache: unable to create symlink %s (%s)", - path, strerror(errno)); + return error("git-checkout-index: unable to create " + "symlink %s (%s)", path, strerror(errno)); } free(new); break; default: free(new); - return error("git-checkout-cache: unknown file mode for %s", path); + return error("git-checkout-index: unknown file mode for %s", path); } if (state->refresh_cache) { @@ -126,13 +123,13 @@ int checkout_entry(struct cache_entry *ce, struct checkout *state) strcpy(path + len, ce->name); if (!lstat(path, &st)) { - unsigned changed = ce_match_stat(ce, &st); + unsigned changed = ce_match_stat(ce, &st, 1); if (!changed) return 0; if (!state->force) { if (!state->quiet) - fprintf(stderr, "git-checkout-cache: %s already exists\n", path); - return 0; + fprintf(stderr, "git-checkout-index: %s already exists\n", path); + return -1; } /*