+struct blob_descriptor;
+struct blob_table;
+
+/* Windows enforces this limit on the size of a reparse point buffer. */
+#define REPARSE_POINT_MAX_SIZE 16384
+
+/*
+ * On-disk format of a reparse point buffer. See:
+ * https://msdn.microsoft.com/en-us/library/dd541671.aspx
+ *
+ * Note: we are not using _packed_attribute for this structure, so only cast to
+ * this if properly aligned!
+ */
+struct reparse_buffer_disk {
+ le32 rptag;
+ le16 rpdatalen;
+ le16 rpreserved;
+ union {
+ u8 rpdata[REPARSE_POINT_MAX_SIZE - 8];
+
+ struct {
+ le16 substitute_name_offset;
+ le16 substitute_name_nbytes;
+ le16 print_name_offset;
+ le16 print_name_nbytes;
+
+ union {
+ struct {
+ u8 data[REPARSE_POINT_MAX_SIZE - 16];
+ } junction;
+
+ struct {
+ le32 flags;
+ #define SYMBOLIC_LINK_RELATIVE 0x00000001
+ u8 data[REPARSE_POINT_MAX_SIZE - 20];
+ } symlink;
+ };
+ } link;
+ };
+};