# HG changeset patch # User Sebastien Decugis # Date 1301366573 -32400 # Node ID 5d529eb0ad331e9a381de9100a9670e1148b7a98 # Parent eefb6fa3c90464a03dcbdc61a77c427a7b4a2590 Fix bug in peers order diff -r eefb6fa3c904 -r 5d529eb0ad33 libfdcore/peers.c --- a/libfdcore/peers.c Tue Mar 29 10:48:04 2011 +0900 +++ b/libfdcore/peers.c Tue Mar 29 11:42:53 2011 +0900 @@ -149,11 +149,11 @@ int cmp = fd_os_almostcasesrch( p->p_hdr.info.pi_diamid, p->p_hdr.info.pi_diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen, &cont ); - if (cmp < 0) - li_inf = li; + if (cmp > 0) + li_inf = li; /* it will come after this element, for sure */ if (cmp == 0) { - ret = EEXIST; + ret = EEXIST; /* we have a duplicate */ break; } if (!cont) @@ -190,7 +190,7 @@ /* Search in the list */ CHECK_POSIX( pthread_rwlock_rdlock(&fd_g_peers_rw) ); - if (igncase) + if (igncase) { for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { struct fd_peer * next = (struct fd_peer *)li; int cmp, cont; @@ -202,7 +202,7 @@ if (!cont) break; } - else + } else { for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { struct fd_peer * next = (struct fd_peer *)li; int cmp = fd_os_cmp( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen ); @@ -212,6 +212,7 @@ *peer = &next->p_hdr; break; } + } CHECK_POSIX( pthread_rwlock_unlock(&fd_g_peers_rw) ); return 0; diff -r eefb6fa3c904 -r 5d529eb0ad33 libfdproto/ostr.c --- a/libfdproto/ostr.c Tue Mar 29 10:48:04 2011 +0900 +++ b/libfdproto/ostr.c Tue Mar 29 11:42:53 2011 +0900 @@ -69,6 +69,7 @@ } /* less sensitive to case, slower. */ +/* the semantics of "maybefurther" assume you are searching for os1 in a list of elements ordered, each element passed as os2 */ int fd_os_almostcasesrch_int(uint8_t * os1, size_t os1sz, uint8_t * os2, size_t os2sz, int *maybefurther) { int i;