win32-dir 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +4 -0
- data/lib/win32/dir.rb +7 -15
- data/lib/win32/dir/functions.rb +26 -13
- data/test/test_win32_dir.rb +1 -1
- data/win32-dir.gemspec +2 -2
- metadata +3 -3
data/CHANGES
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
== 0.4.2 - 8-Apr-2013
|
2
|
+
* Fixed the HANDLE function prototypes in the underlying FFI code and added
|
3
|
+
some custom typedefs for convenience. This affects 64 bit Ruby code.
|
4
|
+
|
1
5
|
== 0.4.1 - 2-Oct-2012
|
2
6
|
* Added the Dir.read_junction method. Thanks go to Gabriel Wilkins for the patch.
|
3
7
|
|
data/lib/win32/dir.rb
CHANGED
@@ -26,7 +26,7 @@ class Dir
|
|
26
26
|
)
|
27
27
|
|
28
28
|
# The version of the win32-dir library.
|
29
|
-
VERSION = '0.4.
|
29
|
+
VERSION = '0.4.2'
|
30
30
|
|
31
31
|
# CSIDL constants
|
32
32
|
csidl = Hash[
|
@@ -194,11 +194,8 @@ class Dir
|
|
194
194
|
# Dir.create_junction('C:/to', 'C:/from')
|
195
195
|
#
|
196
196
|
def self.create_junction(to, from)
|
197
|
-
to = to.
|
198
|
-
from = from.
|
199
|
-
|
200
|
-
to.encode!('UTF-16LE')
|
201
|
-
from.encode!('UTF-16LE')
|
197
|
+
to = to.wincode
|
198
|
+
from = from.wincode
|
202
199
|
|
203
200
|
from_path = 0.chr * 1024
|
204
201
|
from_path.encode!('UTF-16LE')
|
@@ -212,7 +209,6 @@ class Dir
|
|
212
209
|
end
|
213
210
|
|
214
211
|
to_path = 0.chr * 1024
|
215
|
-
to.encode!('UTF-16LE')
|
216
212
|
to_path.encode!('UTF-16LE')
|
217
213
|
|
218
214
|
length = GetFullPathNameW(to, to_path.size, to_path, nil)
|
@@ -303,9 +299,9 @@ class Dir
|
|
303
299
|
#
|
304
300
|
def self.read_junction(junction)
|
305
301
|
return false unless Dir.junction?(junction)
|
306
|
-
junction = junction.tr(File::SEPARATOR, File::ALT_SEPARATOR) + "\0" # Normalize path
|
307
302
|
|
308
|
-
junction.
|
303
|
+
junction = junction.wincode
|
304
|
+
|
309
305
|
junction_path = 0.chr * 1024
|
310
306
|
junction_path.encode!('UTF-16LE')
|
311
307
|
|
@@ -379,19 +375,15 @@ class Dir
|
|
379
375
|
# a directory, or contains any files other than '.' or '..'.
|
380
376
|
#
|
381
377
|
def self.empty?(path)
|
382
|
-
path
|
383
|
-
path = path.encode('UTF-16LE')
|
384
|
-
PathIsDirectoryEmptyW(path)
|
378
|
+
PathIsDirectoryEmptyW(path.wincode)
|
385
379
|
end
|
386
380
|
|
387
381
|
# Returns whether or not +path+ is a junction.
|
388
382
|
#
|
389
383
|
def self.junction?(path)
|
390
384
|
bool = true
|
391
|
-
path = path + "\0"
|
392
|
-
path.encode!('UTF-16LE')
|
393
385
|
|
394
|
-
attrib = GetFileAttributesW(path)
|
386
|
+
attrib = GetFileAttributesW(path.wincode)
|
395
387
|
|
396
388
|
# Only directories with a reparse point attribute can be junctions
|
397
389
|
if attrib == INVALID_FILE_ATTRIBUTES ||
|
data/lib/win32/dir/functions.rb
CHANGED
@@ -9,11 +9,16 @@ require 'ffi'
|
|
9
9
|
module Dir::Functions
|
10
10
|
extend FFI::Library
|
11
11
|
|
12
|
+
typedef :ulong, :dword
|
13
|
+
typedef :uintptr_t, :handle
|
14
|
+
typedef :uintptr_t, :hwnd
|
15
|
+
typedef :pointer, :ptr
|
16
|
+
|
12
17
|
ffi_lib :shell32
|
13
18
|
|
14
|
-
attach_function :SHGetFolderPathW, [:
|
15
|
-
attach_function :SHGetFolderLocation, [:
|
16
|
-
attach_function :SHGetFileInfo, [:
|
19
|
+
attach_function :SHGetFolderPathW, [:hwnd, :int, :handle, :dword, :buffer_out], :dword
|
20
|
+
attach_function :SHGetFolderLocation, [:hwnd, :int, :handle, :dword, :ptr], :dword
|
21
|
+
attach_function :SHGetFileInfo, [:dword, :dword, :ptr, :uint, :uint], :dword
|
17
22
|
|
18
23
|
ffi_lib :shlwapi
|
19
24
|
|
@@ -21,15 +26,23 @@ module Dir::Functions
|
|
21
26
|
|
22
27
|
ffi_lib :kernel32
|
23
28
|
|
24
|
-
attach_function :CloseHandle, [:
|
25
|
-
attach_function :CreateDirectoryW, [:buffer_in, :
|
26
|
-
attach_function :CreateFileW, [:buffer_in, :
|
27
|
-
attach_function :DeviceIoControl, [:
|
28
|
-
attach_function :GetCurrentDirectoryW, [:
|
29
|
-
attach_function :GetFileAttributesW, [:buffer_in], :
|
30
|
-
attach_function :GetLastError, [], :
|
31
|
-
attach_function :GetShortPathNameW, [:buffer_in, :buffer_out, :
|
32
|
-
attach_function :GetLongPathNameW, [:buffer_in, :buffer_out, :
|
33
|
-
attach_function :GetFullPathNameW, [:buffer_in, :
|
29
|
+
attach_function :CloseHandle, [:handle], :bool
|
30
|
+
attach_function :CreateDirectoryW, [:buffer_in, :ptr], :bool
|
31
|
+
attach_function :CreateFileW, [:buffer_in, :dword, :dword, :ptr, :dword, :dword, :handle], :handle
|
32
|
+
attach_function :DeviceIoControl, [:handle, :dword, :ptr, :dword, :ptr, :dword, :ptr, :ptr], :bool
|
33
|
+
attach_function :GetCurrentDirectoryW, [:dword, :buffer_out], :dword
|
34
|
+
attach_function :GetFileAttributesW, [:buffer_in], :dword
|
35
|
+
attach_function :GetLastError, [], :dword
|
36
|
+
attach_function :GetShortPathNameW, [:buffer_in, :buffer_out, :dword], :dword
|
37
|
+
attach_function :GetLongPathNameW, [:buffer_in, :buffer_out, :dword], :dword
|
38
|
+
attach_function :GetFullPathNameW, [:buffer_in, :dword, :buffer_out, :ptr], :dword
|
34
39
|
attach_function :RemoveDirectoryW, [:buffer_in], :bool
|
35
40
|
end
|
41
|
+
|
42
|
+
class String
|
43
|
+
# Convenience method for converting strings to UTF-16LE for wide character
|
44
|
+
# functions that require it.
|
45
|
+
def wincode
|
46
|
+
(self.tr(File::SEPARATOR, File::ALT_SEPARATOR) + 0.chr).encode('UTF-16LE')
|
47
|
+
end
|
48
|
+
end
|
data/test/test_win32_dir.rb
CHANGED
data/win32-dir.gemspec
CHANGED
@@ -2,11 +2,11 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'win32-dir'
|
5
|
-
spec.version = '0.4.
|
5
|
+
spec.version = '0.4.2'
|
6
6
|
spec.authors = ['Daniel J. Berger', 'Park Heesob']
|
7
7
|
spec.license = 'Artistic 2.0'
|
8
8
|
spec.email = 'djberg96@gmail.com'
|
9
|
-
spec.homepage = 'http://
|
9
|
+
spec.homepage = 'http://github.com/djberg96/win32-dir'
|
10
10
|
spec.summary = 'Extra constants and methods for the Dir class on Windows.'
|
11
11
|
spec.test_file = 'test/test_win32_dir.rb'
|
12
12
|
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-dir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-04-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: ffi
|
@@ -68,7 +68,7 @@ files:
|
|
68
68
|
- README
|
69
69
|
- test/test_win32_dir.rb
|
70
70
|
- win32-dir.gemspec
|
71
|
-
homepage: http://
|
71
|
+
homepage: http://github.com/djberg96/win32-dir
|
72
72
|
licenses:
|
73
73
|
- Artistic 2.0
|
74
74
|
post_install_message:
|