win32-file-attributes 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES +6 -0
- data/lib/win32/file/attributes.rb +15 -12
- data/lib/win32/file/windows/functions.rb +20 -9
- data/test/test_win32_file_attributes.rb +1 -1
- data/win32-file-attributes.gemspec +1 -2
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e979471f10493700b371adf06ef6ae4a78b25daa
|
4
|
+
data.tar.gz: d9d23da6540f250822ab25ee9ab8cf32e1a734a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b09b0521108e59e35a98ed8357d7cf2df2f06db138c58cc3ca16efb29ffbcc952c4ed64abd06df76f709a2ef23ed37ea76c2e300a2b927a3eaf9713bd373ca69
|
7
|
+
data.tar.gz: 414fe460270f5702e118a7b6bda0e23abafb3a600d14bbc2202fa3439e929c6b48e2c21e24260243b108aa6466848cf9861490a50c28124a941dc472b7b29bfe
|
data/CHANGES
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
= 1.0.3 - 8-Nov-2014
|
2
|
+
* Make FFI functions private.
|
3
|
+
* Removed reference to Rubyforge in gemspec.
|
4
|
+
* Use require_relative internally.
|
5
|
+
* Explicitly free some FFI memory pointers where appropriate.
|
6
|
+
|
1
7
|
= 1.0.2 - 28-Apr-2014
|
2
8
|
* The singleton methods now accept arguments that implement to_str or to_path.
|
3
9
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require_relative 'windows/constants'
|
2
|
+
require_relative 'windows/structs'
|
3
|
+
require_relative 'windows/functions'
|
4
4
|
|
5
5
|
class File
|
6
6
|
include Windows::File::Constants
|
@@ -10,7 +10,7 @@ class File
|
|
10
10
|
extend Windows::File::Functions
|
11
11
|
|
12
12
|
# The version of the win32-file library
|
13
|
-
WIN32_FILE_ATTRIBUTE_VERSION = '1.0.
|
13
|
+
WIN32_FILE_ATTRIBUTE_VERSION = '1.0.3'
|
14
14
|
|
15
15
|
## ABBREVIATED ATTRIBUTE CONSTANTS
|
16
16
|
|
@@ -276,12 +276,6 @@ class File
|
|
276
276
|
# that compression is the default for newly created files and subdirectories.
|
277
277
|
#
|
278
278
|
def compressed=(bool)
|
279
|
-
in_buf = FFI::MemoryPointer.new(:ulong)
|
280
|
-
bytes = FFI::MemoryPointer.new(:ulong)
|
281
|
-
|
282
|
-
compression_value = bool ? COMPRESSION_FORMAT_DEFAULT : COMPRESSION_FORMAT_NONE
|
283
|
-
in_buf.write_ulong(compression_value)
|
284
|
-
|
285
279
|
# We can't use get_osfhandle here because we need specific attributes
|
286
280
|
handle = CreateFileW(
|
287
281
|
self.path.wincode,
|
@@ -297,6 +291,12 @@ class File
|
|
297
291
|
raise SystemCallError.new("CreateFile", FFI.errno)
|
298
292
|
end
|
299
293
|
|
294
|
+
in_buf = FFI::MemoryPointer.new(:ulong)
|
295
|
+
bytes = FFI::MemoryPointer.new(:ulong)
|
296
|
+
|
297
|
+
compression_value = bool ? COMPRESSION_FORMAT_DEFAULT : COMPRESSION_FORMAT_NONE
|
298
|
+
in_buf.write_ulong(compression_value)
|
299
|
+
|
300
300
|
begin
|
301
301
|
bool = DeviceIoControl(
|
302
302
|
handle,
|
@@ -314,6 +314,8 @@ class File
|
|
314
314
|
end
|
315
315
|
ensure
|
316
316
|
CloseHandle(handle)
|
317
|
+
in_buf.free
|
318
|
+
bytes.free
|
317
319
|
end
|
318
320
|
|
319
321
|
self
|
@@ -449,8 +451,6 @@ class File
|
|
449
451
|
return
|
450
452
|
end
|
451
453
|
|
452
|
-
bytes = FFI::MemoryPointer.new(:ulong)
|
453
|
-
|
454
454
|
handle = CreateFileW(
|
455
455
|
self.path.wincode,
|
456
456
|
FILE_READ_DATA | FILE_WRITE_DATA,
|
@@ -465,6 +465,8 @@ class File
|
|
465
465
|
raise SystemCallError.new("CreateFile", FFI.errno)
|
466
466
|
end
|
467
467
|
|
468
|
+
bytes = FFI::MemoryPointer.new(:ulong)
|
469
|
+
|
468
470
|
begin
|
469
471
|
bool = DeviceIoControl(
|
470
472
|
handle,
|
@@ -482,6 +484,7 @@ class File
|
|
482
484
|
end
|
483
485
|
ensure
|
484
486
|
CloseHandle(handle)
|
487
|
+
bytes.free
|
485
488
|
end
|
486
489
|
|
487
490
|
self
|
@@ -4,16 +4,25 @@ module Windows
|
|
4
4
|
module File
|
5
5
|
module Functions
|
6
6
|
extend FFI::Library
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
# Wrapper method for attach_function + private
|
11
|
+
def self.attach_pfunc(*args)
|
12
|
+
attach_function(*args)
|
13
|
+
private args[0]
|
14
|
+
end
|
15
|
+
|
7
16
|
typedef :ulong, :dword
|
8
17
|
typedef :uintptr_t, :handle
|
9
18
|
|
10
19
|
ffi_lib :kernel32
|
11
20
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
21
|
+
attach_pfunc :CloseHandle, [:handle], :bool
|
22
|
+
attach_pfunc :CreateFileW, [:buffer_in, :dword, :dword, :pointer, :dword, :dword, :handle], :handle
|
23
|
+
attach_pfunc :DeviceIoControl, [:handle, :dword, :pointer, :dword, :pointer, :dword, :pointer, :pointer], :bool
|
24
|
+
attach_pfunc :GetFileAttributesW, [:buffer_in], :dword
|
25
|
+
attach_pfunc :SetFileAttributesW, [:buffer_in, :dword], :bool
|
17
26
|
|
18
27
|
def CTL_CODE(device, function, method, access)
|
19
28
|
((device) << 16) | ((access) << 14) | ((function) << 2) | (method)
|
@@ -31,9 +40,11 @@ module Windows
|
|
31
40
|
end
|
32
41
|
|
33
42
|
class String
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
43
|
+
unless instance_methods.include?(:wincode)
|
44
|
+
# Convenience method for converting strings to UTF-16LE for wide character
|
45
|
+
# functions that require it.
|
46
|
+
def wincode
|
47
|
+
(self.tr(File::SEPARATOR, File::ALT_SEPARATOR) + 0.chr).encode('UTF-16LE')
|
48
|
+
end
|
38
49
|
end
|
39
50
|
end
|
@@ -28,7 +28,7 @@ class TC_Win32_File_Attributes < Test::Unit::TestCase
|
|
28
28
|
end
|
29
29
|
|
30
30
|
test "version is set to expected value" do
|
31
|
-
assert_equal('1.0.
|
31
|
+
assert_equal('1.0.3', File::WIN32_FILE_ATTRIBUTE_VERSION)
|
32
32
|
end
|
33
33
|
|
34
34
|
test "temporary? singleton method basic functionality" do
|
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'win32-file-attributes'
|
5
|
-
spec.version = '1.0.
|
5
|
+
spec.version = '1.0.3'
|
6
6
|
spec.authors = ['Daniel J. Berger', 'Park Heesob']
|
7
7
|
spec.license = 'Artistic 2.0'
|
8
8
|
spec.email = 'djberg96@gmail.com'
|
@@ -11,7 +11,6 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.test_files = Dir['test/test*']
|
12
12
|
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
13
13
|
|
14
|
-
spec.rubyforge_project = 'win32utils'
|
15
14
|
spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
16
15
|
|
17
16
|
spec.add_dependency('ffi')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-file-attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -9,34 +9,34 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-11-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: test-unit
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
description: |2
|
@@ -71,17 +71,17 @@ require_paths:
|
|
71
71
|
- lib
|
72
72
|
required_ruby_version: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- -
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
81
|
version: '0'
|
82
82
|
requirements: []
|
83
|
-
rubyforge_project:
|
84
|
-
rubygems_version: 2.
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.4.2
|
85
85
|
signing_key:
|
86
86
|
specification_version: 4
|
87
87
|
summary: File attribute methods for the File class on MS Windows
|