win32-dir 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +62 -59
- data/README +265 -265
- data/Rakefile +32 -32
- data/lib/win32/dir/constants.rb +18 -18
- data/lib/win32/dir/functions.rb +35 -35
- data/lib/win32/dir/structs.rb +29 -29
- data/lib/win32/dir.rb +419 -331
- data/test/test_win32_dir.rb +397 -385
- data/win32-dir.gemspec +28 -28
- metadata +2 -2
data/Rakefile
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
require 'rake'
|
2
|
-
require 'rake/clean'
|
3
|
-
require 'rake/testtask'
|
4
|
-
|
5
|
-
CLEAN.include('**/*.gem', '**/*.log')
|
6
|
-
|
7
|
-
namespace 'gem' do
|
8
|
-
desc "Create the win32-dir gem"
|
9
|
-
task :build => [:clean] do
|
10
|
-
Dir["*.gem"].each{ |f| File.delete(f) }
|
11
|
-
spec = eval(IO.read('win32-dir.gemspec'))
|
12
|
-
Gem::Builder.new(spec).build
|
13
|
-
end
|
14
|
-
|
15
|
-
desc "Install the win32-dir gem"
|
16
|
-
task :install => [:build] do
|
17
|
-
file = Dir["*.gem"].first
|
18
|
-
sh "gem install #{file}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
desc "Run the example program"
|
23
|
-
task :example do
|
24
|
-
sh "ruby -Ilib examples/dir_example.rb"
|
25
|
-
end
|
26
|
-
|
27
|
-
Rake::TestTask.new do |t|
|
28
|
-
t.warning = true
|
29
|
-
t.verbose = true
|
30
|
-
end
|
31
|
-
|
32
|
-
task :default => :test
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/clean'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
CLEAN.include('**/*.gem', '**/*.log')
|
6
|
+
|
7
|
+
namespace 'gem' do
|
8
|
+
desc "Create the win32-dir gem"
|
9
|
+
task :build => [:clean] do
|
10
|
+
Dir["*.gem"].each{ |f| File.delete(f) }
|
11
|
+
spec = eval(IO.read('win32-dir.gemspec'))
|
12
|
+
Gem::Builder.new(spec).build
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Install the win32-dir gem"
|
16
|
+
task :install => [:build] do
|
17
|
+
file = Dir["*.gem"].first
|
18
|
+
sh "gem install #{file}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Run the example program"
|
23
|
+
task :example do
|
24
|
+
sh "ruby -Ilib examples/dir_example.rb"
|
25
|
+
end
|
26
|
+
|
27
|
+
Rake::TestTask.new do |t|
|
28
|
+
t.warning = true
|
29
|
+
t.verbose = true
|
30
|
+
end
|
31
|
+
|
32
|
+
task :default => :test
|
data/lib/win32/dir/constants.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
module Dir::Constants
|
2
|
-
private
|
3
|
-
|
4
|
-
FILE_DEVICE_FILE_SYSTEM = 0x00000009
|
5
|
-
INVALID_HANDLE_VALUE = 0xFFFFFFFF
|
6
|
-
INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF
|
7
|
-
FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
|
8
|
-
FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
|
9
|
-
FILE_ATTRIBUTE_DIRECTORY = 0x00000010
|
10
|
-
FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
|
11
|
-
ERROR_ALREADY_EXISTS = 183
|
12
|
-
METHOD_BUFFERED = 0
|
13
|
-
OPEN_EXISTING = 3
|
14
|
-
GENERIC_READ = 0x80000000
|
15
|
-
GENERIC_WRITE = 0x40000000
|
16
|
-
SHGFI_DISPLAYNAME = 0x000000200
|
17
|
-
SHGFI_PIDL = 0x000000008
|
18
|
-
end
|
1
|
+
module Dir::Constants
|
2
|
+
private
|
3
|
+
|
4
|
+
FILE_DEVICE_FILE_SYSTEM = 0x00000009
|
5
|
+
INVALID_HANDLE_VALUE = 0xFFFFFFFF
|
6
|
+
INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF
|
7
|
+
FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
|
8
|
+
FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
|
9
|
+
FILE_ATTRIBUTE_DIRECTORY = 0x00000010
|
10
|
+
FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
|
11
|
+
ERROR_ALREADY_EXISTS = 183
|
12
|
+
METHOD_BUFFERED = 0
|
13
|
+
OPEN_EXISTING = 3
|
14
|
+
GENERIC_READ = 0x80000000
|
15
|
+
GENERIC_WRITE = 0x40000000
|
16
|
+
SHGFI_DISPLAYNAME = 0x000000200
|
17
|
+
SHGFI_PIDL = 0x000000008
|
18
|
+
end
|
data/lib/win32/dir/functions.rb
CHANGED
@@ -1,35 +1,35 @@
|
|
1
|
-
# Necessary to force JRuby to use the gem, not its builtin version
|
2
|
-
if RUBY_PLATFORM == 'java'
|
3
|
-
require 'rubygems'
|
4
|
-
gem 'ffi'
|
5
|
-
end
|
6
|
-
|
7
|
-
require 'ffi'
|
8
|
-
|
9
|
-
module Dir::Functions
|
10
|
-
extend FFI::Library
|
11
|
-
|
12
|
-
ffi_lib :shell32
|
13
|
-
|
14
|
-
attach_function :SHGetFolderPathW, [:ulong, :int, :ulong, :ulong, :buffer_out], :ulong
|
15
|
-
attach_function :SHGetFolderLocation, [:ulong, :int, :ulong, :ulong, :pointer], :ulong
|
16
|
-
attach_function :SHGetFileInfo, [:ulong, :ulong, :pointer, :uint, :uint], :ulong
|
17
|
-
|
18
|
-
ffi_lib :shlwapi
|
19
|
-
|
20
|
-
attach_function :PathIsDirectoryEmptyW, [:buffer_in], :bool
|
21
|
-
|
22
|
-
ffi_lib :kernel32
|
23
|
-
|
24
|
-
attach_function :CloseHandle, [:ulong], :bool
|
25
|
-
attach_function :CreateDirectoryW, [:buffer_in, :pointer], :bool
|
26
|
-
attach_function :CreateFileW, [:buffer_in, :ulong, :ulong, :pointer, :ulong, :ulong, :ulong], :ulong
|
27
|
-
attach_function :DeviceIoControl, [:ulong, :ulong, :pointer, :ulong, :pointer, :ulong, :pointer, :pointer], :bool
|
28
|
-
attach_function :GetCurrentDirectoryW, [:ulong, :buffer_out], :ulong
|
29
|
-
attach_function :GetFileAttributesW, [:buffer_in], :ulong
|
30
|
-
attach_function :GetLastError, [], :ulong
|
31
|
-
attach_function :GetShortPathNameW, [:buffer_in, :buffer_out, :ulong], :ulong
|
32
|
-
attach_function :GetLongPathNameW, [:buffer_in, :buffer_out, :ulong], :ulong
|
33
|
-
attach_function :GetFullPathNameW, [:buffer_in, :ulong, :buffer_out, :pointer], :ulong
|
34
|
-
attach_function :RemoveDirectoryW, [:buffer_in], :bool
|
35
|
-
end
|
1
|
+
# Necessary to force JRuby to use the gem, not its builtin version
|
2
|
+
if RUBY_PLATFORM == 'java'
|
3
|
+
require 'rubygems'
|
4
|
+
gem 'ffi'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'ffi'
|
8
|
+
|
9
|
+
module Dir::Functions
|
10
|
+
extend FFI::Library
|
11
|
+
|
12
|
+
ffi_lib :shell32
|
13
|
+
|
14
|
+
attach_function :SHGetFolderPathW, [:ulong, :int, :ulong, :ulong, :buffer_out], :ulong
|
15
|
+
attach_function :SHGetFolderLocation, [:ulong, :int, :ulong, :ulong, :pointer], :ulong
|
16
|
+
attach_function :SHGetFileInfo, [:ulong, :ulong, :pointer, :uint, :uint], :ulong
|
17
|
+
|
18
|
+
ffi_lib :shlwapi
|
19
|
+
|
20
|
+
attach_function :PathIsDirectoryEmptyW, [:buffer_in], :bool
|
21
|
+
|
22
|
+
ffi_lib :kernel32
|
23
|
+
|
24
|
+
attach_function :CloseHandle, [:ulong], :bool
|
25
|
+
attach_function :CreateDirectoryW, [:buffer_in, :pointer], :bool
|
26
|
+
attach_function :CreateFileW, [:buffer_in, :ulong, :ulong, :pointer, :ulong, :ulong, :ulong], :ulong
|
27
|
+
attach_function :DeviceIoControl, [:ulong, :ulong, :pointer, :ulong, :pointer, :ulong, :pointer, :pointer], :bool
|
28
|
+
attach_function :GetCurrentDirectoryW, [:ulong, :buffer_out], :ulong
|
29
|
+
attach_function :GetFileAttributesW, [:buffer_in], :ulong
|
30
|
+
attach_function :GetLastError, [], :ulong
|
31
|
+
attach_function :GetShortPathNameW, [:buffer_in, :buffer_out, :ulong], :ulong
|
32
|
+
attach_function :GetLongPathNameW, [:buffer_in, :buffer_out, :ulong], :ulong
|
33
|
+
attach_function :GetFullPathNameW, [:buffer_in, :ulong, :buffer_out, :pointer], :ulong
|
34
|
+
attach_function :RemoveDirectoryW, [:buffer_in], :bool
|
35
|
+
end
|
data/lib/win32/dir/structs.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
|
-
require 'ffi'
|
2
|
-
|
3
|
-
module Dir::Structs
|
4
|
-
extend FFI::Library
|
5
|
-
|
6
|
-
class SHFILEINFO < FFI::Struct
|
7
|
-
layout(
|
8
|
-
:hIcon, :ulong,
|
9
|
-
:iIcon, :int,
|
10
|
-
:dwAttributes, :ulong,
|
11
|
-
:szDisplayName, [:char, 256],
|
12
|
-
:szTypeName, [:char, 80]
|
13
|
-
)
|
14
|
-
end
|
15
|
-
|
16
|
-
# I fudge a bit, assuming a MountPointReparseBuffer
|
17
|
-
class REPARSE_JDATA_BUFFER < FFI::Struct
|
18
|
-
layout(
|
19
|
-
:ReparseTag, :ulong,
|
20
|
-
:ReparseDataLength, :ushort,
|
21
|
-
:Reserved, :ushort,
|
22
|
-
:SubstituteNameOffset, :ushort,
|
23
|
-
:SubstituteNameLength, :ushort,
|
24
|
-
:PrintNameOffset, :ushort,
|
25
|
-
:PrintNameLength, :ushort,
|
26
|
-
:PathBuffer, [:char, 1024]
|
27
|
-
)
|
28
|
-
end
|
29
|
-
end
|
1
|
+
require 'ffi'
|
2
|
+
|
3
|
+
module Dir::Structs
|
4
|
+
extend FFI::Library
|
5
|
+
|
6
|
+
class SHFILEINFO < FFI::Struct
|
7
|
+
layout(
|
8
|
+
:hIcon, :ulong,
|
9
|
+
:iIcon, :int,
|
10
|
+
:dwAttributes, :ulong,
|
11
|
+
:szDisplayName, [:char, 256],
|
12
|
+
:szTypeName, [:char, 80]
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
# I fudge a bit, assuming a MountPointReparseBuffer
|
17
|
+
class REPARSE_JDATA_BUFFER < FFI::Struct
|
18
|
+
layout(
|
19
|
+
:ReparseTag, :ulong,
|
20
|
+
:ReparseDataLength, :ushort,
|
21
|
+
:Reserved, :ushort,
|
22
|
+
:SubstituteNameOffset, :ushort,
|
23
|
+
:SubstituteNameLength, :ushort,
|
24
|
+
:PrintNameOffset, :ushort,
|
25
|
+
:PrintNameLength, :ushort,
|
26
|
+
:PathBuffer, [:char, 1024]
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|