win32_filetime 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/restoreoldtimes +3 -2
- data/lib/win32_filetime/version.rb +1 -1
- data/lib/win32ft.rb +24 -1
- data/specs/win32ft.spec.rb +9 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfec75656526105c2346b005cb0879b11803f724
|
4
|
+
data.tar.gz: 803e386dd888deb474fdae573c2b91d044437c1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09e8735b0ee1577da9be12df50105e39efb6aab65f80726168152a23ab62e482b57ff635341e16d0df520f5e3f30160048d559d89a6fe8570272f34bd9fda26f
|
7
|
+
data.tar.gz: fd963772426cb6019dedb7b21ce2d5a9c1506507403b90cc43dcae77ac8665c8601f420445279a4dfbe5e3c6dd324f5dc5e539d76afbf2efdfd209be709ed02f
|
data/bin/restoreoldtimes
CHANGED
@@ -15,9 +15,10 @@ def rolloldtime(d1, fn)
|
|
15
15
|
Dir.chdir(d1) do
|
16
16
|
File.foreach(fn) do |line|
|
17
17
|
line.strip!
|
18
|
-
next if line.empty?
|
18
|
+
next if line.empty?
|
19
|
+
p1 = line.index(/ 0x\w+ 0x\w+ 0x\w+ \d+$/)
|
20
|
+
next if !p1
|
19
21
|
|
20
|
-
p1 = line.index(/ 0x\w+ 0x\w+ 0x\w+ \d+/)
|
21
22
|
fn = line[0...p1]
|
22
23
|
next if !File.file?(fn) && !File.directory?(fn)
|
23
24
|
|
data/lib/win32ft.rb
CHANGED
@@ -122,7 +122,7 @@ class HANDLE < FFI::Struct
|
|
122
122
|
layout :handle, :uint
|
123
123
|
end
|
124
124
|
|
125
|
-
|
125
|
+
module CFflag
|
126
126
|
GENERIC_READ = 0x80000000
|
127
127
|
GENERIC_WRITE = 0x40000000
|
128
128
|
GENERIC_EXECUTE = 0x20000000
|
@@ -151,6 +151,24 @@ class CFflag
|
|
151
151
|
FILE_FLAG_FIRST_PIPE_INSTANCE =0x00080000
|
152
152
|
end
|
153
153
|
|
154
|
+
module FA
|
155
|
+
FILE_ATTRIBUTE_READONLY =0x00000001
|
156
|
+
FILE_ATTRIBUTE_HIDDEN =0x00000002
|
157
|
+
FILE_ATTRIBUTE_SYSTEM =0x00000004
|
158
|
+
FILE_ATTRIBUTE_DIRECTORY =0x00000010
|
159
|
+
FILE_ATTRIBUTE_ARCHIVE =0x00000020
|
160
|
+
FILE_ATTRIBUTE_DEVICE =0x00000040
|
161
|
+
FILE_ATTRIBUTE_NORMAL =0x00000080
|
162
|
+
FILE_ATTRIBUTE_TEMPORARY =0x00000100
|
163
|
+
FILE_ATTRIBUTE_SPARSE_FILE =0x00000200
|
164
|
+
FILE_ATTRIBUTE_REPARSE_POINT =0x00000400
|
165
|
+
FILE_ATTRIBUTE_COMPRESSED =0x00000800
|
166
|
+
FILE_ATTRIBUTE_OFFLINE =0x00001000
|
167
|
+
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED =0x00002000
|
168
|
+
FILE_ATTRIBUTE_ENCRYPTED =0x00004000
|
169
|
+
FILE_ATTRIBUTE_VIRTUAL =0x00010000
|
170
|
+
end
|
171
|
+
|
154
172
|
module Win32ft
|
155
173
|
extend FFI::Library
|
156
174
|
ffi_lib 'msvcrt', 'kernel32'
|
@@ -210,6 +228,8 @@ module Win32ft
|
|
210
228
|
GetLocalTime(lt)
|
211
229
|
lt
|
212
230
|
end
|
231
|
+
attach_function :GetFileAttributes, :GetFileAttributesA, [:string], :ulong
|
232
|
+
attach_function :SetFileAttributes, :SetFileAttributesA, [:string, :ulong], :bool
|
213
233
|
|
214
234
|
=begin
|
215
235
|
CreateFileA("", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
|
@@ -272,6 +292,8 @@ CloseHandle(HANDLE)
|
|
272
292
|
ttts
|
273
293
|
end
|
274
294
|
def self.setfiletime(fn, tc, ta, tm)
|
295
|
+
fattr = GetFileAttributes(fn)
|
296
|
+
SetFileAttributes(fn, fattr & ~FA::FILE_ATTRIBUTE_READONLY) if fattr & FA::FILE_ATTRIBUTE_READONLY
|
275
297
|
hf = CreateFileA(fn, CFflag::GENERIC_WRITE, CFflag::FILE_SHARE_READ | CFflag::FILE_SHARE_WRITE,
|
276
298
|
nil, CFflag::OPEN_EXISTING, CFflag::FILE_FLAG_BACKUP_SEMANTICS, 0)
|
277
299
|
raise "setfiletime: Can not open file \"#{fn}\"" if hf == -1
|
@@ -281,6 +303,7 @@ CloseHandle(HANDLE)
|
|
281
303
|
res = SetFileTime(hf, tc, ta, tm)
|
282
304
|
raise "setfiletime: SetFileTime error." if !res
|
283
305
|
CloseHandle(hf)
|
306
|
+
SetFileAttributes(fn, fattr) if fattr & FA::FILE_ATTRIBUTE_READONLY
|
284
307
|
true
|
285
308
|
end
|
286
309
|
def self.copyfiletime(fn1, fn2)
|
data/specs/win32ft.spec.rb
CHANGED
@@ -300,4 +300,13 @@ describe "GetFileTime SetFileTime" do
|
|
300
300
|
Dir.rmdir 'a' rescue nil
|
301
301
|
Dir.rmdir 'b' rescue nil
|
302
302
|
end
|
303
|
+
it "SetFileAttributes" do
|
304
|
+
fn = "1.txt"
|
305
|
+
File.write(fn, "asdfadsf")
|
306
|
+
tc, ta, tm = Win32ft.getfiletime(fn)
|
307
|
+
FileTime.should === tc
|
308
|
+
FileUtils.chmod(0000, fn)
|
309
|
+
Win32ft.setfiletime(fn, tc, ta, tm).should == true
|
310
|
+
FileUtils.rm(fn)
|
311
|
+
end
|
303
312
|
end
|