+/* On-disk format of reparse point buffer */
+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;
+ le32 rpflags;
+ u8 data[REPARSE_POINT_MAX_SIZE - 20];
+ } _packed_attribute symlink;
+
+ struct {
+ le16 substitute_name_offset;
+ le16 substitute_name_nbytes;
+ le16 print_name_offset;
+ le16 print_name_nbytes;
+ u8 data[REPARSE_POINT_MAX_SIZE - 16];
+ } _packed_attribute junction;
+ };
+} _packed_attribute;
+
+#define REPARSE_DATA_OFFSET (offsetof(struct reparse_buffer_disk, rpdata))
+
+#define REPARSE_DATA_MAX_SIZE (REPARSE_POINT_MAX_SIZE - REPARSE_DATA_OFFSET)
+
+