summaryrefslogtreecommitdiffstats
path: root/src/H5FDonion_header.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5FDonion_header.h')
-rw-r--r--src/H5FDonion_header.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/H5FDonion_header.h b/src/H5FDonion_header.h
new file mode 100644
index 0000000..1728aef
--- /dev/null
+++ b/src/H5FDonion_header.h
@@ -0,0 +1,56 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the COPYING file, which can be found at the root of the source code *
+ * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
+ * If you do not have access to either file, you may request a copy from *
+ * help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Onion Virtual File Driver (VFD)
+ *
+ * Purpose: Interface for the onion file's header
+ */
+
+#ifndef H5FDonion_header_H
+#define H5FDonion_header_H
+
+/* Number of bytes to encode fixed-size components */
+#define H5FD__ONION_ENCODED_SIZE_HEADER 40
+
+/* Flags must align exactly one per bit, up to 24 bits */
+#define H5FD__ONION_HEADER_FLAG_WRITE_LOCK 0x1
+#define H5FD__ONION_HEADER_FLAG_DIVERGENT_HISTORY 0x2
+#define H5FD__ONION_HEADER_FLAG_PAGE_ALIGNMENT 0x4
+#define H5FD__ONION_HEADER_SIGNATURE "OHDH"
+#define H5FD__ONION_HEADER_VERSION_CURR 1
+
+/* In-memory representation of the on-store onion history file header.
+ */
+typedef struct H5FD_onion_header_t {
+ uint8_t version;
+ uint32_t flags; /* At most three bytes used! */
+ uint32_t page_size;
+ uint64_t origin_eof; /* Size of the 'original' canonical file */
+ uint64_t history_addr;
+ uint64_t history_size;
+ uint32_t checksum;
+} H5FD_onion_header_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL herr_t H5FD__onion_ingest_header(H5FD_onion_header_t *hdr_out, H5FD_t *raw_file, haddr_t addr);
+H5_DLL herr_t H5FD__onion_write_header(H5FD_onion_header_t *header, H5FD_t *file);
+H5_DLL size_t H5FD__onion_header_decode(unsigned char *buf, H5FD_onion_header_t *header);
+H5_DLL size_t H5FD__onion_header_encode(H5FD_onion_header_t *header, unsigned char *buf, uint32_t *checksum);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5FDonion_header_H */