hivex_root: Return errno == HIVEX_NO_KEY when root key is missing.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 13 May 2011 17:19:22 +0000 (18:19 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 13 May 2011 17:19:22 +0000 (18:19 +0100)
Previously we returned errno == ENOKEY.  However this was an
unfortunate choice of error code since it is not defined in POSIX.  As
a result it is missing on several platforms.

HIVEX_NO_KEY is defined as ENOKEY on platforms where this symbol
exists (thus maintaining backwards ABI compatibility), and defined as
another POSIX error code otherwise.

generator/generator.ml
lib/hivex.c

index 9722312..117781a 100755 (executable)
@@ -701,6 +701,13 @@ typedef struct hive_h hive_h;
 typedef size_t hive_node_h;
 typedef size_t hive_value_h;
 
+#include <errno.h>
+#ifdef ENOKEY
+# define HIVEX_NO_KEY ENOKEY
+#else
+# define HIVEX_NO_KEY ENOENT
+#endif
+
 /* Pre-defined types. */
 enum hive_type {
 ";
@@ -1273,7 +1280,7 @@ exhaustive):
 
 Corrupt or unsupported Registry file format.
 
-=item ENOKEY
+=item HIVEX_NO_KEY
 
 Missing root key.
 
index 7715520..d042f4f 100644 (file)
@@ -559,7 +559,7 @@ hivex_root (hive_h *h)
 {
   hive_node_h ret = h->rootoffs;
   if (!IS_VALID_BLOCK (h, ret)) {
-    errno = ENOKEY;
+    errno = HIVEX_NO_KEY;
     return 0;
   }
   return ret;