From 496a04f3b2d46893635f93e5a33032969a826cd2 Mon Sep 17 00:00:00 2001 From: Pranith K Date: Thu, 10 Mar 2011 02:20:20 +0000 Subject: libglusterfs: Add sort routine Signed-off-by: Pranith Kumar K Signed-off-by: Vijay Bellur BUG: 1965 (need a cmd to get io-stat details) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1965 --- libglusterfs/src/common-utils.c | 42 +++++++++++++++++++++++++++++++++++++++-- libglusterfs/src/common-utils.h | 4 +++- 2 files changed, 43 insertions(+), 3 deletions(-) (limited to 'libglusterfs/src') diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 931cc66fb..98dbeb831 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -1684,13 +1684,13 @@ valid_internet_address (char *address) goto out; } - if (valid_ipv4_address (address, length) + if (valid_ipv4_address (address, length) || valid_ipv6_address (address, length) || valid_host_name (address, length)) { ret = 1; } -out: +out: return ret; } @@ -1725,3 +1725,41 @@ void _get_md5_str (char *out_str, size_t outlen, snprintf(out_str + j * 2, outlen-j*2, "%02x", out[j]); } + +void* gf_array_elem (void *a, int index, size_t elem_size) +{ + uint8_t* ptr = a; + return (void*)(ptr + index * elem_size); +} + +void +gf_elem_swap (void *x, void *y, size_t l) { + uint8_t *a = x, *b = y, c; + while(l--) { + c = *a; + *a++ = *b; + *b++ = c; + } +} + +void +gf_array_insertionsort (void *A, int l, int r, size_t elem_size, + gf_cmp cmp) +{ + int i = l; + int N = r+1; + void *Temp = NULL; + int j = 0; + + for(i = l; i < N; i++) { + Temp = gf_array_elem (A, i, elem_size); + j = i - 1; + while((cmp (Temp, gf_array_elem (A, j, elem_size)) < 0) && j>=0) + { + gf_elem_swap (Temp, gf_array_elem (A, j, elem_size), + elem_size); + Temp = gf_array_elem (A, j, elem_size); + j = j-1; + } + } +} diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index 96a7c3e4f..b6a29b5b9 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -76,6 +76,7 @@ enum _gf_boolean }; typedef enum _gf_boolean gf_boolean_t; +typedef int (*gf_cmp) (void *, void *); void gf_global_variable_init(void); @@ -355,5 +356,6 @@ char *uuid_utoa (uuid_t uuid); char *uuid_utoa_r (uuid_t uuid, char *dst); void _get_md5_str (char *out_str, size_t outlen, const uint8_t *input, int n); +void gf_array_insertionsort (void *a, int l, int r, size_t elem_size, + gf_cmp cmp); #endif /* _COMMON_UTILS_H */ - -- cgit