From 2f6fdd3aebdee2ce04d003b206f6da78120e8235 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 25 Aug 2015 05:11:19 +0000 Subject: 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 --- win32/file.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 win32/file.h (limited to 'win32/file.h') 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 */ -- cgit v1.2.3