|
|
|
@ -510,33 +510,15 @@ int buffer_is_empty(buffer *b) {
|
|
|
|
|
/**
|
|
|
|
|
* check if two buffer contain the same data |
|
|
|
|
*
|
|
|
|
|
* this is a optimized 32/64bit compare function. |
|
|
|
|
*
|
|
|
|
|
* it is assumed that the leftmost byte have the most equality.
|
|
|
|
|
* That why the comparision is done right to left |
|
|
|
|
*
|
|
|
|
|
* HISTORY: this function was pretty much optimized, but didn't handled |
|
|
|
|
* alignment properly. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
int buffer_is_equal(buffer *a, buffer *b) { |
|
|
|
|
size_t i; |
|
|
|
|
|
|
|
|
|
if (a->used != b->used) return 0; |
|
|
|
|
if (a->used == 0) return 1; |
|
|
|
|
|
|
|
|
|
/* we are unsigned, if i < 0 it will flip to MAX_SIZE_T and will be > a->used */ |
|
|
|
|
for (i = a->used - 1; i < a->used && i % (sizeof(size_t)); i--) { |
|
|
|
|
if (a->ptr[i] != b->ptr[i]) return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* compare the single char itself which was kicked us out of the loop */
|
|
|
|
|
if (i < a->used && a->ptr[i] != b->ptr[i]) return 0; |
|
|
|
|
|
|
|
|
|
for (i -= (sizeof(size_t)); i < a->used; i -= (sizeof(size_t))) { |
|
|
|
|
if (*((size_t *)(a->ptr + i)) !=
|
|
|
|
|
*((size_t *)(b->ptr + i))) return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
|
return (0 == strcmp(a->ptr, b->ptr)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int buffer_is_equal_string(buffer *a, const char *s, size_t b_len) { |
|
|
|
|