summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-12-06 21:41:48 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-12-07 01:28:26 (GMT)
commite23eff8be92a2a2cb66b53deef020063cff285ed (patch)
tree014d940871fa860412d000ca329f9ef57ad12d46
parenta6da9395a5b6d3df901ce0a6cb61d123f77d7342 (diff)
downloadgit-e23eff8be92a2a2cb66b53deef020063cff285ed.zip
git-e23eff8be92a2a2cb66b53deef020063cff285ed.tar.gz
git-e23eff8be92a2a2cb66b53deef020063cff285ed.tar.bz2
qsort() ptrdiff_t may be larger than int
Morten Welinder <mwelinder@gmail.com> writes: > The code looks wrong. It assumes that pointers are no larger than ints. > If pointers are larger than ints, the code does not necessarily compute > a consistent ordering and qsort is allowed to do whatever it wants. > > Morten > > static int compare_object_pointers(const void *a, const void *b) > { > const struct object * const *pa = a; > const struct object * const *pb = b; > return *pa - *pb; > } Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--object.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/object.c b/object.c
index 427e14c..cf5931a 100644
--- a/object.c
+++ b/object.c
@@ -82,7 +82,12 @@ static int compare_object_pointers(const void *a, const void *b)
{
const struct object * const *pa = a;
const struct object * const *pb = b;
- return *pa - *pb;
+ if (*pa == *pb)
+ return 0;
+ else if (*pa < *pb)
+ return -1;
+ else
+ return 1;
}
void set_object_refs(struct object *obj, struct object_refs *refs)