summaryrefslogtreecommitdiff
path: root/win32/file.h
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-08-25 05:11:19 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-08-25 05:11:19 +0000
commit2f6fdd3aebdee2ce04d003b206f6da78120e8235 (patch)
treeef40ffc3c0be7def2416de6319e6823a09b56cfd /win32/file.h
parentb4b848e6a0ef42df0a4abe55e16cac64fc6395ec (diff)
win32.c: rb_w32_reparse
* win32/win32.c (rb_w32_reparse): read reparse point in a dynamic buffer. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51676 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
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 */