file-handle-def: New function fh_equal().
[pspp] / src / data / file-handle-def.c
index de09ae39a75566b664995442667fcf73757b43f6..09340833be4134d4125eefb96ec2ff1141884a11 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "data/dataset.h"
 #include "data/variable.h"
+#include "libpspp/assertion.h"
 #include "libpspp/cast.h"
 #include "libpspp/compiler.h"
 #include "libpspp/hash-functions.h"
@@ -392,6 +393,40 @@ fh_get_encoding (const struct file_handle *handle)
   return handle->encoding;
 }
 
+/* Returns true if A and B refer to the same file or dataset, false
+   otherwise. */
+bool
+fh_equal (const struct file_handle *a, const struct file_handle *b)
+{
+  if (a->referent != b->referent)
+    return false;
+
+  switch (a->referent)
+    {
+    case FH_REF_FILE:
+      {
+        struct file_identity *a_id = fh_get_identity (a);
+        struct file_identity *b_id = fh_get_identity (b);
+
+        int cmp = fh_compare_file_identities (a_id, b_id);
+
+        fh_free_identity (a_id);
+        fh_free_identity (b_id);
+
+        return cmp == 0;
+      }
+
+    case FH_REF_INLINE:
+      return true;
+
+    case FH_REF_DATASET:
+      return a->ds == b->ds;
+
+    default:
+      NOT_REACHED ();
+    }
+}
+
 /* Returns the dataset handle associated with HANDLE.
    Applicable to only FH_REF_DATASET files. */
 struct dataset *