equal
deleted
inserted
replaced
350 int (__cdecl *compare)(const void *, const void *)) |
350 int (__cdecl *compare)(const void *, const void *)) |
351 { |
351 { |
352 size_t low = 0; |
352 size_t low = 0; |
353 size_t high = num - 1; |
353 size_t high = num - 1; |
354 while (low <= high) { |
354 while (low <= high) { |
355 unsigned int mid = ((unsigned) (low + high)) >> 1; |
355 size_t mid = (low + high) >> 1; |
356 int c = compare(key, (char*)base + mid * size); |
356 int c = compare(key, (char*)base + mid * size); |
357 if (c < 0) |
357 if (c < 0) { |
|
358 if (!mid) |
|
359 break; |
358 high = mid - 1; |
360 high = mid - 1; |
359 else if (c > 0) |
361 } else if (c > 0) |
360 low = mid + 1; |
362 low = mid + 1; |
361 else |
363 else |
362 return (char*) base + mid * size; |
364 return (char*) base + mid * size; |
363 } |
365 } |
364 return (NULL); |
366 return 0; |
365 } |
367 } |
366 |
368 |
367 void *lfind(const void* key, const void* base, size_t* elements, size_t size, |
369 void *lfind(const void* key, const void* base, size_t* elements, size_t size, |
368 int (__cdecl *compare)(const void*, const void*)) |
370 int (__cdecl *compare)(const void*, const void*)) |
369 { |
371 { |