X-Git-Url: http://git.samba.org/?a=blobdiff_plain;f=lib%2Fldb%2Fcommon%2Fqsort.c;h=012aaf3c403d87445862f5e132a11e2b72ba066a;hb=889d1daf8758841a8252916c4e85932ac6a6e6a6;hp=1a0b886b8c201c6426b8864508cde7e9fb549136;hpb=be709e8cde584dcc94d394ae3ae49e9342bb5d34;p=metze%2Fsamba%2Fwip.git diff --git a/lib/ldb/common/qsort.c b/lib/ldb/common/qsort.c index 1a0b886b8c20..012aaf3c403d 100644 --- a/lib/ldb/common/qsort.c +++ b/lib/ldb/common/qsort.c @@ -59,9 +59,8 @@ typedef struct #define CHAR_BIT 8 #endif #define STACK_SIZE (CHAR_BIT * sizeof(size_t)) -#define PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top)) -#define POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi))) -#define STACK_NOT_EMPTY (stack < top) +#define PUSH(low, high) ((void) ((stack[i].lo = (low)), (stack[i].hi = (high)), i++)) +#define POP(low, high) ((void) (i--, (low = stack[i].lo), (high = stack[i].hi))) /* Order size using quicksort. This implementation incorporates @@ -104,11 +103,11 @@ void ldb_qsort (void *const pbase, size_t total_elems, size_t size, char *lo = base_ptr; char *hi = &lo[size * (total_elems - 1)]; stack_node stack[STACK_SIZE]; - stack_node *top = stack; + size_t i = 0; PUSH (NULL, NULL); - while (STACK_NOT_EMPTY) + do { char *left_ptr; char *right_ptr; @@ -194,6 +193,7 @@ void ldb_qsort (void *const pbase, size_t total_elems, size_t size, hi = right_ptr; } } + while (i > 0 && i < STACK_SIZE); } /* Once the BASE_PTR array is partially sorted by quicksort the rest