Use int for the sign rather than a char.  char can be signed or unsigned.
It's system dependent.  This might fix the problem with test_rfind failing.
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index defef41..49fe7f7 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -263,7 +263,7 @@
 		return NULL;
 	} else {
 		const char *p, *start_p, *end_p;
-		char sign = reverse ? -1 : 1;
+		int sign = reverse ? -1 : 1;
 
                 if (start < 0)
 			start += self->size;