aboutsummaryrefslogtreecommitdiffstats
path: root/mpi/mpi-cmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'mpi/mpi-cmp.c')
-rw-r--r--mpi/mpi-cmp.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/mpi/mpi-cmp.c b/mpi/mpi-cmp.c
index e119fad04..3c1322a10 100644
--- a/mpi/mpi-cmp.c
+++ b/mpi/mpi-cmp.c
@@ -20,6 +20,7 @@
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "mpi-internal.h"
int
@@ -49,6 +50,21 @@ mpi_cmp( MPI u, MPI v )
mpi_size_t usize, vsize;
int cmp;
+ if (mpi_is_opaque (u) || mpi_is_opaque (v))
+ {
+ if (mpi_is_opaque (u) && !mpi_is_opaque (v))
+ return -1;
+ if (!mpi_is_opaque (u) && mpi_is_opaque (v))
+ return 1;
+ if (!u->nbits && !v->nbits)
+ return 0; /* Empty buffers are identical. */
+ if (u->nbits < v->nbits)
+ return -1;
+ if (u->nbits > v->nbits)
+ return 1;
+ return memcmp (u->d, v->d, u->nbits);
+ }
+
mpi_normalize( u );
mpi_normalize( v );
usize = u->nlimbs;