win32-file-stat 1.2.3 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,6 @@
1
+ == 1.2.4 - 22-Jan-2007
2
+ * Improved block device handling.
3
+
1
4
  == 1.2.3 - 4-Nov-2006
2
5
  * Bug fix for file sizes over 4gb.
3
6
 
data/README CHANGED
@@ -18,7 +18,7 @@ gem install win32-file-stat-<version>.gem
18
18
  gem install win32-file-stat
19
19
 
20
20
  = Synopsis
21
- require 'win32/file/stat'
21
+ require 'win32/file/stat' # Don't do this in practice - see below
22
22
 
23
23
  stat = File::Stat.new('file.txt')
24
24
  stat.size
@@ -43,8 +43,20 @@ stat.hidden?
43
43
  hidden, etc.
44
44
  * The pp (pretty print) output has been customized.
45
45
 
46
- = Known issues or bugs
47
- None that I'm aware of. Please report any bugs you find on the project page
46
+ = Known issues
47
+ You should not require 'win32/file/stat' directly. Instead, require the
48
+ win32-file package which will, in turn, require win32-file-stat. This is
49
+ the preferred approach because some modules (i.e. 'find') use the pass-through
50
+ methods of the File class, such as File.lstat. Many of the pass through
51
+ methods have been redefined in the win32-file package to work in conjunction
52
+ with the custom File::Stat objects created by this package.
53
+
54
+ Failure to follow these instructions could lead to cases where the core Ruby
55
+ File class attempts to use the custom File::Stat object defined in this class,
56
+ which will likely cause problems.
57
+
58
+ = Known bugs
59
+ None that I'm aware of. Please report any bugs you find on the project page
48
60
  at http://www.rubyforge.org/projects/win32utils.
49
61
 
50
62
  = Miscellaneous
@@ -6,6 +6,7 @@ require 'windows/path'
6
6
  require 'windows/file'
7
7
  require 'windows/error'
8
8
  require 'windows/handle'
9
+ require 'windows/volume'
9
10
  require 'pp'
10
11
 
11
12
  class File::Stat
@@ -17,9 +18,10 @@ class File::Stat
17
18
  include Windows::File
18
19
  include Windows::Error
19
20
  include Windows::Handle
21
+ include Windows::Volume
20
22
  include Comparable
21
23
 
22
- VERSION = '1.2.3'
24
+ VERSION = '1.2.4'
23
25
 
24
26
  # Defined in Ruby's win32.h. Not meant for public consumption.
25
27
  S_IWGRP = 0020
@@ -35,11 +37,16 @@ class File::Stat
35
37
  def initialize(file)
36
38
  @file = file
37
39
 
38
- @blockdev = false
39
- @file_type = get_file_type(file) # May update @blockdev
40
-
40
+ @file_type = get_file_type(file)
41
41
  @chardev = @file_type == FILE_TYPE_CHAR
42
42
 
43
+ case GetDriveType(file)
44
+ when DRIVE_REMOVABLE, DRIVE_CDROM, DRIVE_RAMDISK
45
+ @blockdev = true
46
+ else
47
+ @blockdev = false
48
+ end
49
+
43
50
  stat_buf = [0,0,0,0,0,0,0,0,0,0,0,0,0].pack('ISSssssIIQQQQ')
44
51
 
45
52
  # The stat64 function doesn't seem to like character devices
@@ -63,9 +70,13 @@ class File::Stat
63
70
  @mode = 33188 if @chardev
64
71
 
65
72
  attr = GetFileAttributes(file)
73
+ error_num = GetLastError()
66
74
 
75
+ # Ignore errors caused by empty/open/used block devices.
67
76
  if attr == INVALID_FILE_ATTRIBUTES
68
- raise ArgumentError, get_last_error
77
+ unless error_num == ERROR_NOT_READY
78
+ raise ArgumentError, get_last_error(error_num)
79
+ end
69
80
  end
70
81
 
71
82
  @blksize = get_blksize(file)
@@ -527,8 +538,13 @@ class File::Stat
527
538
  0
528
539
  )
529
540
 
541
+ error_num = GetLastError()
542
+
543
+ # Ignore errors caused by open/empty/used block devices.
530
544
  if handle == INVALID_HANDLE_VALUE
531
- raise ArgumentError, get_last_error
545
+ unless error_num == ERROR_NOT_READY
546
+ raise ArgumentError, get_last_error(error_num)
547
+ end
532
548
  end
533
549
 
534
550
  file_type = GetFileType(handle)
@@ -536,12 +552,6 @@ class File::Stat
536
552
 
537
553
  CloseHandle(handle)
538
554
 
539
- if error == 0
540
- if file_type == FILE_TYPE_DISK || file_type == FILE_TYPE_UNKNOWN
541
- @blockdev = true
542
- end
543
- end
544
-
545
555
  file_type
546
556
  end
547
557
 
data/test/tc_file_stat.rb CHANGED
@@ -13,18 +13,30 @@ end
13
13
 
14
14
  require 'test/unit'
15
15
  require 'win32/file/stat'
16
+ include Windows::Volume
17
+
18
+ # Find a block device
19
+ 'A'.upto('Z'){ |volume|
20
+ volume += ":\\"
21
+ case GetDriveType(volume)
22
+ when DRIVE_REMOVABLE, DRIVE_CDROM, DRIVE_RAMDISK
23
+ $block_dev = volume
24
+ break
25
+ end
26
+ }
16
27
 
17
28
  class TC_Win32_File_Stat < Test::Unit::TestCase
18
- include Windows::File
29
+ include Windows::File
30
+
19
31
  def setup
20
32
  @file = 'sometestfile.txt'
21
33
  @exe = 'sometestfile.exe'
22
34
  @dir = Dir.pwd
23
- @stat = File::Stat.new(@file)
35
+ @stat = File::Stat.new(@file)
24
36
  end
25
37
 
26
38
  def test_version
27
- assert_equal('1.2.3', File::Stat::VERSION)
39
+ assert_equal('1.2.4', File::Stat::VERSION)
28
40
  end
29
41
 
30
42
  # One or more tests will fail if the archive attribute on @file is not set.
@@ -46,8 +58,9 @@ class TC_Win32_File_Stat < Test::Unit::TestCase
46
58
 
47
59
  def test_blockdev
48
60
  assert_respond_to(@stat, :blockdev?)
49
- assert_equal(true, @stat.blockdev?)
61
+ assert_equal(false, @stat.blockdev?)
50
62
  assert_equal(false, File::Stat.new('NUL').blockdev?)
63
+ assert_equal(true, File::Stat.new($block_dev).blockdev?)
51
64
  end
52
65
 
53
66
  def test_blocks
@@ -2,7 +2,7 @@ require "rubygems"
2
2
 
3
3
  spec = Gem::Specification.new do |gem|
4
4
  gem.name = "win32-file-stat"
5
- gem.version = "1.2.3"
5
+ gem.version = "1.2.4"
6
6
  gem.author = "Daniel J. Berger"
7
7
  gem.email = "djberg96@gmail.com"
8
8
  gem.homepage = "http://www.rubyforge.org/projects/win32utils"
@@ -15,7 +15,7 @@ spec = Gem::Specification.new do |gem|
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.4.0")
18
+ gem.add_dependency("windows-pr", ">= 0.6.0")
19
19
  end
20
20
 
21
21
  if $0 == __FILE__
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.0.8
3
3
  specification_version: 1
4
4
  name: win32-file-stat
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.2.3
7
- date: 2006-11-04 00:00:00 -07:00
6
+ version: 1.2.4
7
+ date: 2007-01-22 00:00:00 -07:00
8
8
  summary: A File::Stat class tailored to MS Windows
9
9
  require_paths:
10
10
  - lib
@@ -31,12 +31,14 @@ authors:
31
31
  files:
32
32
  - lib/win32/file/stat.rb
33
33
  - CHANGES
34
+ - CVS
34
35
  - install.rb
35
36
  - lib
36
37
  - MANIFEST
37
38
  - README
38
39
  - test
39
40
  - win32-file-stat.gemspec
41
+ - test/CVS
40
42
  - test/sometestfile.exe
41
43
  - test/sometestfile.txt
42
44
  - test/tc_file_stat.rb
@@ -61,5 +63,5 @@ dependencies:
61
63
  requirements:
62
64
  - - ">="
63
65
  - !ruby/object:Gem::Version
64
- version: 0.4.0
66
+ version: 0.6.0
65
67
  version: