summaryrefslogtreecommitdiff
path: root/win32/file.h
diff options
context:
space:
mode:
Diffstat (limited to 'win32/file.h')
-rw-r--r--win32/file.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/win32/file.h b/win32/file.h
new file mode 100644
index 0000000000..95a792a63f
--- /dev/null
+++ b/win32/file.h
@@ -0,0 +1,40 @@
+#ifndef RUBY_WIN32_FILE_H
+#define RUBY_WIN32_FILE_H
+
+#define MAX_REPARSE_PATH_LEN 4092
+
+enum {
+ MINIMUM_REPARSE_BUFFER_PATH_LEN = 4
+};
+/* License: Ruby's */
+typedef struct {
+ ULONG ReparseTag;
+ USHORT ReparseDataLength;
+ USHORT Reserved;
+ union {
+ struct {
+ USHORT SubstituteNameOffset;
+ USHORT SubstituteNameLength;
+ USHORT PrintNameOffset;
+ USHORT PrintNameLength;
+ ULONG Flags;
+ WCHAR PathBuffer[4];
+ } SymbolicLinkReparseBuffer;
+ struct {
+ USHORT SubstituteNameOffset;
+ USHORT SubstituteNameLength;
+ USHORT PrintNameOffset;
+ USHORT PrintNameLength;
+ WCHAR PathBuffer[4];
+ } MountPointReparseBuffer;
+ };
+} rb_w32_reparse_buffer_t;
+
+#define rb_w32_reparse_buffer_size(n) \
+ (sizeof(rb_w32_reparse_buffer_t) + \
+ sizeof(WCHAR)*((n)-MINIMUM_REPARSE_BUFFER_PATH_LEN))
+
+int rb_w32_read_reparse_point(const WCHAR *path, rb_w32_reparse_buffer_t *rp,
+ size_t bufsize, WCHAR **result, DWORD *len);
+
+#endif /* RUBY_WIN32_FILE_H */