Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Make 'ce_compare_link()' use the new 'strbuf_readlink()'
author
Linus Torvalds
<torvalds@linux-foundation.org>
Wed, 17 Dec 2008 17:47:27 +0000
(09:47 -0800)
committer
Junio C Hamano
<gitster@pobox.com>
Wed, 17 Dec 2008 21:36:34 +0000
(13:36 -0800)
This simplifies the code, and also makes ce_compare_link now able to
handle filesystems with odd 'st_size' return values for symlinks.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
read-cache.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
b11b7e1
)
diff --git
a/read-cache.c
b/read-cache.c
index c14b56231379b1aeaa5f648d208d77ab68818d94..b1475ffa0962e1f0238fdb9a6870aa4b0bfd6d3b 100644
(file)
--- a/
read-cache.c
+++ b/
read-cache.c
@@
-99,27
+99,21
@@
static int ce_compare_data(struct cache_entry *ce, struct stat *st)
static int ce_compare_link(struct cache_entry *ce, size_t expected_size)
{
int match = -1;
static int ce_compare_link(struct cache_entry *ce, size_t expected_size)
{
int match = -1;
- char *target;
void *buffer;
unsigned long size;
enum object_type type;
void *buffer;
unsigned long size;
enum object_type type;
-
int len
;
+
struct strbuf sb = STRBUF_INIT
;
- target = xmalloc(expected_size);
- len = readlink(ce->name, target, expected_size);
- if (len != expected_size) {
- free(target);
+ if (strbuf_readlink(&sb, ce->name, expected_size))
return -1;
return -1;
- }
+
buffer = read_sha1_file(ce->sha1, &type, &size);
buffer = read_sha1_file(ce->sha1, &type, &size);
- if (!buffer) {
- free(target);
- return -1;
+ if (buffer) {
+ if (size == sb.len)
+ match = memcmp(buffer, sb.buf, size);
+ free(buffer);
}
}
- if (size == expected_size)
- match = memcmp(buffer, target, size);
- free(buffer);
- free(target);
+ strbuf_release(&sb);
return match;
}
return match;
}