win32-file-stat 1.2.7 → 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,8 @@
1
+ == 1.2.8 - 29-Jul-2008
2
+ * Internally now always uses wide character functions.
3
+ * A private alias was made private.
4
+ * Now requires windows-pr 0.9.1 or later.
5
+
1
6
  == 1.2.7 - 1-Oct-2007
2
7
  * Changed an error type in a private method in order to maintain
3
8
  compatibility with the FileUtils module.
@@ -32,7 +37,7 @@
32
37
 
33
38
  == 1.2.0 - 23-Apr-2006
34
39
  * Removed the attribute setters. From now on this class provides readonly
35
- methods. Use the win32-file package for attribute setters.
40
+ methods. Use the win32-file library for attribute setters.
36
41
  * Added the content_indexed? alias for the indexed? method.
37
42
  * Corresponding test suite changes.
38
43
  * Fixed the pp issue by writing a custom pretty_print method.
data/MANIFEST CHANGED
@@ -6,4 +6,4 @@
6
6
  * lib/win32/file/stat.rb
7
7
  * test/sometestfile.exe
8
8
  * test/sometestfile.txt
9
- * test/tc_file_stat.rb
9
+ * test/test_file_stat.rb
data/README CHANGED
@@ -2,8 +2,8 @@
2
2
  A redefinition of the File::Stat class for MS Windows.
3
3
 
4
4
  = Prerequisites
5
- * Ruby 1.8.0 or later.
6
- * windows-pr 0.6.0 or later.
5
+ * Ruby 1.8.2 or later.
6
+ * windows-pr 0.9.1 or later.
7
7
 
8
8
  = Installation
9
9
  rake install (non-gem) OR rake install_gem (gems)
@@ -37,32 +37,35 @@ rake install (non-gem) OR rake install_gem (gems)
37
37
 
38
38
  = Known issues
39
39
  You should not require 'win32/file/stat' directly. Instead, require the
40
- win32-file package which will, in turn, require win32-file-stat. This is
40
+ win32-file library which will, in turn, require win32-file-stat. This is
41
41
  the preferred approach because some modules (i.e. 'find') use the pass-through
42
42
  methods of the File class, such as File.lstat. Many of the pass through
43
- methods have been redefined in the win32-file package to work in conjunction
44
- with the custom File::Stat objects created by this package.
43
+ methods have been redefined in the win32-file library to work in conjunction
44
+ with the custom File::Stat objects created by this library.
45
45
 
46
46
  Failure to follow these instructions could lead to cases where the core Ruby
47
47
  File class attempts to use the custom File::Stat object defined in this class,
48
- which will likely cause problems.
48
+ and that will likely cause problems.
49
49
 
50
50
  = Known bugs
51
- None that I'm aware of. Please report any bugs you find on the project page
52
- at http://www.rubyforge.org/projects/win32utils.
51
+ None that I'm aware of beyond the Known Issues listed above. Please report any
52
+ bugs you find on the project page at:
53
+
54
+ http://www.rubyforge.org/projects/win32utils.
53
55
 
54
56
  = Miscellaneous
55
57
  I had to require 'pp' explicitly in order to deal with the fact that pp.rb
56
- has a builtin pretty_print method for File::Stat. If I didn't do this
58
+ has a builtin pretty_print method for File::Stat. If I didn't do this
57
59
  you would end up using the pretty_print in pp.rb, which would break.
58
60
 
59
61
  = License
60
62
  Ruby's
61
63
 
62
64
  = Warranty
63
- This package is provided "as is" and without any express or
65
+ This library is provided "as is" and without any express or
64
66
  implied warranties, including, without limitation, the implied
65
67
  warranties of merchantability and fitness for a particular purpose.
66
68
 
67
- = Author
68
- Daniel J. Berger
69
+ = Authors
70
+ Daniel J. Berger
71
+ Park Heesob
data/Rakefile CHANGED
@@ -23,8 +23,6 @@ task :install_gem do
23
23
  end
24
24
 
25
25
  Rake::TestTask.new do |t|
26
- t.libs << 'test'
27
26
  t.verbose = true
28
27
  t.warning = true
29
- t.test_files = FileList['test/tc_file_stat.rb']
30
28
  end
@@ -21,7 +21,9 @@ class File::Stat
21
21
  include Windows::Volume
22
22
  include Comparable
23
23
 
24
- VERSION = '1.2.7'
24
+ VERSION = '1.2.8'
25
+
26
+ private
25
27
 
26
28
  # Defined in Ruby's win32.h. Not meant for public consumption.
27
29
  S_IWGRP = 0020
@@ -39,6 +41,8 @@ class File::Stat
39
41
  undef_method(:size, :size?, :socket?, :sticky?, :symlink?, :uid, :writable?)
40
42
  undef_method(:writable_real?, :zero?)
41
43
  undef_method(:pretty_print, :inspect, :<=>)
44
+
45
+ public
42
46
 
43
47
  attr_reader :dev_major, :dev_minor, :rdev_major, :rdev_minor
44
48
 
@@ -48,12 +52,13 @@ class File::Stat
48
52
  # the file after that point will not be reflected.
49
53
  #
50
54
  def initialize(file)
51
- @file = file
55
+ @file = file.tr('/', "\\")
56
+ @file = multi_to_wide(@file)
52
57
 
53
- @file_type = get_file_type(file)
58
+ @file_type = get_file_type(@file)
54
59
  @chardev = @file_type == FILE_TYPE_CHAR
55
60
 
56
- case GetDriveType(file)
61
+ case GetDriveTypeW(@file)
57
62
  when DRIVE_REMOVABLE, DRIVE_CDROM, DRIVE_RAMDISK
58
63
  @blockdev = true
59
64
  else
@@ -63,7 +68,7 @@ class File::Stat
63
68
  stat_buf = [0,0,0,0,0,0,0,0,0,0,0,0,0].pack('ISSssssIIQQQQ')
64
69
 
65
70
  # The stat64 function doesn't seem to like character devices
66
- if stat64(file, stat_buf) != 0
71
+ if wstat64(@file, stat_buf) != 0
67
72
  raise ArgumentError, get_last_error unless @chardev
68
73
  end
69
74
 
@@ -91,17 +96,17 @@ class File::Stat
91
96
 
92
97
  @mode = 33188 if @chardev
93
98
 
94
- attr = GetFileAttributes(file)
95
- error_num = GetLastError()
99
+ attributes = GetFileAttributesW(@file)
100
+ error_num = GetLastError()
96
101
 
97
102
  # Ignore errors caused by empty/open/used block devices.
98
- if attr == INVALID_FILE_ATTRIBUTES
103
+ if attributes == INVALID_FILE_ATTRIBUTES
99
104
  unless error_num == ERROR_NOT_READY
100
105
  raise ArgumentError, get_last_error(error_num)
101
106
  end
102
107
  end
103
108
 
104
- @blksize = get_blksize(file)
109
+ @blksize = get_blksize(@file)
105
110
 
106
111
  # This is a reasonable guess
107
112
  case @blksize
@@ -113,21 +118,21 @@ class File::Stat
113
118
  @blocks = (@size.to_f / @blksize.to_f).ceil
114
119
  end
115
120
 
116
- @readonly = attr & FILE_ATTRIBUTE_READONLY > 0
117
- @hidden = attr & FILE_ATTRIBUTE_HIDDEN > 0
118
- @system = attr & FILE_ATTRIBUTE_SYSTEM > 0
119
- @archive = attr & FILE_ATTRIBUTE_ARCHIVE > 0
120
- @directory = attr & FILE_ATTRIBUTE_DIRECTORY > 0
121
- @encrypted = attr & FILE_ATTRIBUTE_ENCRYPTED > 0
122
- @normal = attr & FILE_ATTRIBUTE_NORMAL > 0
123
- @temporary = attr & FILE_ATTRIBUTE_TEMPORARY > 0
124
- @sparse = attr & FILE_ATTRIBUTE_SPARSE_FILE > 0
125
- @reparse_point = attr & FILE_ATTRIBUTE_REPARSE_POINT > 0
126
- @compressed = attr & FILE_ATTRIBUTE_COMPRESSED > 0
127
- @offline = attr & FILE_ATTRIBUTE_OFFLINE > 0
128
- @indexed = attr & ~FILE_ATTRIBUTE_NOT_CONTENT_INDEXED > 0
121
+ @readonly = attributes & FILE_ATTRIBUTE_READONLY > 0
122
+ @hidden = attributes & FILE_ATTRIBUTE_HIDDEN > 0
123
+ @system = attributes & FILE_ATTRIBUTE_SYSTEM > 0
124
+ @archive = attributes & FILE_ATTRIBUTE_ARCHIVE > 0
125
+ @directory = attributes & FILE_ATTRIBUTE_DIRECTORY > 0
126
+ @encrypted = attributes & FILE_ATTRIBUTE_ENCRYPTED > 0
127
+ @normal = attributes & FILE_ATTRIBUTE_NORMAL > 0
128
+ @temporary = attributes & FILE_ATTRIBUTE_TEMPORARY > 0
129
+ @sparse = attributes & FILE_ATTRIBUTE_SPARSE_FILE > 0
130
+ @reparse_point = attributes & FILE_ATTRIBUTE_REPARSE_POINT > 0
131
+ @compressed = attributes & FILE_ATTRIBUTE_COMPRESSED > 0
132
+ @offline = attributes & FILE_ATTRIBUTE_OFFLINE > 0
133
+ @indexed = attributes & ~FILE_ATTRIBUTE_NOT_CONTENT_INDEXED > 0
129
134
 
130
- @executable = GetBinaryType(file, '')
135
+ @executable = GetBinaryTypeW(@file, '')
131
136
  @regular = @file_type == FILE_TYPE_DISK
132
137
  @pipe = @file_type == FILE_TYPE_PIPE
133
138
 
@@ -539,7 +544,7 @@ class File::Stat
539
544
  # If there's a drive letter it must contain a trailing backslash.
540
545
  # The dup is necessary here because, for some odd reason, the function
541
546
  # appears to modify the argument passed in.
542
- if PathStripToRoot(file.dup)
547
+ if PathStripToRootW(file.dup)
543
548
  file += "\\" unless file[-1].chr == "\\"
544
549
  else
545
550
  file = 0 # Default to root drive
@@ -556,34 +561,42 @@ class File::Stat
556
561
  # Returns the file's type (as a numeric).
557
562
  #
558
563
  def get_file_type(file)
559
- handle = CreateFile(
560
- file,
561
- 0,
562
- 0,
563
- 0,
564
- OPEN_EXISTING,
565
- FILE_FLAG_BACKUP_SEMANTICS, # Need this for directories
566
- 0
567
- )
564
+ begin
565
+ handle = CreateFileW(
566
+ file,
567
+ GENERIC_READ,
568
+ FILE_SHARE_READ,
569
+ nil,
570
+ OPEN_EXISTING,
571
+ FILE_FLAG_BACKUP_SEMANTICS, # Need this for directories
572
+ nil
573
+ )
568
574
 
569
- error_num = GetLastError()
575
+ error_num = GetLastError()
570
576
 
571
- # Ignore errors caused by open/empty/used block devices. We raise a
572
- # SystemCallError explicitly here in order to maintain compatibility
573
- # with the FileUtils module.
574
- if handle == INVALID_HANDLE_VALUE
575
- unless error_num == ERROR_NOT_READY
576
- raise SystemCallError, get_last_error(error_num)
577
+ # Ignore errors caused by open/empty/used block devices. We raise a
578
+ # SystemCallError explicitly here in order to maintain compatibility
579
+ # with the FileUtils module.
580
+ if handle == INVALID_HANDLE_VALUE
581
+ unless error_num == ERROR_NOT_READY
582
+ raise SystemCallError, get_last_error(error_num)
583
+ end
577
584
  end
578
- end
579
585
 
580
- file_type = GetFileType(handle)
581
- error = GetLastError()
582
-
583
- CloseHandle(handle)
586
+ file_type = GetFileType(handle)
587
+ error_num = GetLastError()
588
+ ensure
589
+ CloseHandle(handle)
590
+ end
591
+
592
+ if file_type == FILE_TYPE_UNKNOWN && error_num != NO_ERROR
593
+ raise SystemCallError, get_last_error(error_num)
594
+ end
584
595
 
585
596
  file_type
586
597
  end
598
+
599
+ private
587
600
 
588
601
  # Verifies that a value is either true or false
589
602
  def check_bool(val)
File without changes
@@ -1,5 +1,5 @@
1
1
  #####################################################################
2
- # tc_file_stat.rb
2
+ # test_file_stat.rb
3
3
  #
4
4
  # Test case for stat related methods of win32-file. You should use
5
5
  # the 'rake test' task to run these tests.
@@ -30,14 +30,14 @@ class TC_Win32_File_Stat < Test::Unit::TestCase
30
30
  end
31
31
 
32
32
  def test_version
33
- assert_equal('1.2.7', File::Stat::VERSION)
33
+ assert_equal('1.2.8', File::Stat::VERSION)
34
34
  end
35
35
 
36
36
  # One or more tests will fail if the archive attribute on @file is not set.
37
37
  def test_archive
38
38
  assert_respond_to(@stat, :archive?)
39
39
  assert_nothing_raised{ @stat.archive? }
40
- assert(@stat.archive?, '- May fail: ignore -')
40
+ assert(@stat.archive?, '=> May fail - ignore')
41
41
  end
42
42
 
43
43
  def test_atime
@@ -2,20 +2,21 @@ require "rubygems"
2
2
 
3
3
  spec = Gem::Specification.new do |gem|
4
4
  gem.name = "win32-file-stat"
5
- gem.version = "1.2.7"
6
- gem.author = "Daniel J. Berger"
5
+ gem.version = "1.2.8"
6
+ gem.authors = ["Daniel J. Berger", "Park Heesob"]
7
7
  gem.email = "djberg96@gmail.com"
8
8
  gem.homepage = "http://www.rubyforge.org/projects/win32utils"
9
9
  gem.platform = Gem::Platform::RUBY
10
10
  gem.summary = "A File::Stat class tailored to MS Windows"
11
11
  gem.description = "A File::Stat class tailored to MS Windows"
12
- gem.test_file = "test/tc_file_stat.rb"
12
+ gem.test_file = "test/test_file_stat.rb"
13
13
  gem.has_rdoc = true
14
14
  gem.files = Dir['lib/win32/file/*.rb'] + Dir['[A-Z]*'] + Dir['test/*']
15
15
  gem.files.reject! { |fn| fn.include? "CVS" }
16
16
  gem.require_path = "lib"
17
17
  gem.extra_rdoc_files = ["README", "CHANGES"]
18
- gem.add_dependency("windows-pr", ">= 0.6.0")
18
+ gem.add_dependency("windows-pr", ">= 0.9.1")
19
+ gem.rubyforge_project = 'Win32Utils'
19
20
  end
20
21
 
21
22
  if $0 == __FILE__
metadata CHANGED
@@ -1,67 +1,74 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: win32-file-stat
5
3
  version: !ruby/object:Gem::Version
6
- version: 1.2.7
7
- date: 2007-10-01 00:00:00 -06:00
8
- summary: A File::Stat class tailored to MS Windows
9
- require_paths:
10
- - lib
11
- email: djberg96@gmail.com
12
- homepage: http://www.rubyforge.org/projects/win32utils
13
- rubyforge_project:
14
- description: A File::Stat class tailored to MS Windows
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 1.2.8
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Daniel J. Berger
8
+ - Park Heesob
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2008-07-29 00:00:00 -06:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: windows-pr
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.9.1
25
+ version:
26
+ description: A File::Stat class tailored to MS Windows
27
+ email: djberg96@gmail.com
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - README
34
+ - CHANGES
31
35
  files:
32
36
  - lib/win32/file/stat.rb
33
37
  - CHANGES
34
- - CVS
35
38
  - lib
36
39
  - MANIFEST
37
40
  - Rakefile
38
41
  - README
39
42
  - test
40
43
  - win32-file-stat.gemspec
41
- - test/CVS
42
44
  - test/sometestfile.exe
43
45
  - test/sometestfile.txt
44
- - test/tc_file_stat.rb
45
- test_files:
46
- - test/tc_file_stat.rb
46
+ - test/test_file_stat.rb
47
+ has_rdoc: true
48
+ homepage: http://www.rubyforge.org/projects/win32utils
49
+ post_install_message:
47
50
  rdoc_options: []
48
51
 
49
- extra_rdoc_files:
50
- - README
51
- - CHANGES
52
- executables: []
53
-
54
- extensions: []
55
-
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
56
66
  requirements: []
57
67
 
58
- dependencies:
59
- - !ruby/object:Gem::Dependency
60
- name: windows-pr
61
- version_requirement:
62
- version_requirements: !ruby/object:Gem::Version::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: 0.6.0
67
- version:
68
+ rubyforge_project: Win32Utils
69
+ rubygems_version: 1.2.0
70
+ signing_key:
71
+ specification_version: 2
72
+ summary: A File::Stat class tailored to MS Windows
73
+ test_files:
74
+ - test/test_file_stat.rb