Fix range comparision operators implementation
diff --git a/src/fcrange.c b/src/fcrange.c
index f70226c..8689930 100644
--- a/src/fcrange.c
+++ b/src/fcrange.c
@@ -96,9 +96,6 @@
 FcBool
 FcRangeIsInRange (const FcRange *a, const FcRange *b)
 {
-    if (!a || !b)
-	return FcFalse;
-
     return a->begin >= b->begin && a->end <= b->end;
 }
 
@@ -107,20 +104,22 @@
 {
     switch ((int) op) {
     case FcOpEqual:
+	return a->begin == b->begin && a->end == b->end;
     case FcOpContains:
     case FcOpListing:
 	return FcRangeIsInRange (a, b);
     case FcOpNotEqual:
+	return a->begin != b->begin || a->end != b->end;
     case FcOpNotContains:
 	return !FcRangeIsInRange (a, b);
     case FcOpLess:
-	return a->begin < b->begin;
+	return a->end < b->begin;
     case FcOpLessEqual:
-	return a->begin <= b->begin;
+	return a->end <= b->begin;
     case FcOpMore:
-	return a->end > b->end;
+	return a->begin > b->end;
     case FcOpMoreEqual:
-	return a->end >= b->end;
+	return a->begin >= b->end;
     default:
 	break;
     }