changeset 743:5d529eb0ad33 1.1.0

Fix bug in peers order
author Sebastien Decugis <sdecugis@nict.go.jp>
date Tue, 29 Mar 2011 11:42:53 +0900
parents eefb6fa3c904
children 3c7964da2262
files libfdcore/peers.c libfdproto/ostr.c
diffstat 2 files changed, 7 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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;
"Welcome to our mercurial repository"