win32-mmap 0.2.4 → 0.3.0

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.
@@ -0,0 +1,34 @@
1
+ module Windows
2
+ module Constants
3
+ GENERIC_READ = 0x80000000
4
+ GENERIC_WRITE = 0x40000000
5
+
6
+ WAIT_OBJECT_0 = 0
7
+
8
+ INVALID_HANDLE_VALUE = -1
9
+
10
+ PAGE_NOACCESS = 0x01
11
+ PAGE_READONLY = 0x02
12
+ PAGE_READWRITE = 0x04
13
+ PAGE_WRITECOPY = 0x08
14
+ PAGE_EXECUTE = 0x10
15
+ PAGE_EXECUTE_READ = 0x20
16
+ PAGE_EXECUTE_READWRITE = 0x40
17
+ PAGE_EXECUTE_WRITECOPY = 0x80
18
+ PAGE_GUARD = 0x100
19
+ PAGE_NOCACHE = 0x200
20
+ PAGE_WRITECOMBINE = 0x400
21
+
22
+ SEC_FILE = 0x800000
23
+ SEC_IMAGE = 0x1000000
24
+ SEC_VLM = 0x2000000
25
+ SEC_RESERVE = 0x4000000
26
+ SEC_COMMIT = 0x8000000
27
+ SEC_NOCACHE = 0x10000000
28
+
29
+ FILE_MAP_COPY = 0x0001
30
+ FILE_MAP_WRITE = 0x0002
31
+ FILE_MAP_READ = 0x0004
32
+ FILE_MAP_ALL_ACCESS = 983071
33
+ end
34
+ end
@@ -0,0 +1,50 @@
1
+ require 'ffi'
2
+
3
+ module Windows
4
+ module Functions
5
+ module FFI::Library
6
+ def attach_pfunc(*args)
7
+ attach_function(*args)
8
+ private args[0]
9
+ end
10
+ end
11
+
12
+ extend FFI::Library
13
+
14
+ ffi_lib :kernel32
15
+
16
+ typedef :ulong, :dword
17
+ typedef :uintptr_t, :handle
18
+ typedef :pointer, :ptr
19
+ typedef :string, :str
20
+
21
+ attach_pfunc :CloseHandle, [:handle], :bool
22
+
23
+ attach_pfunc :CreateFile, :CreateFileA,
24
+ [:str, :dword, :dword, :pointer, :dword, :dword, :handle],
25
+ :handle
26
+
27
+ attach_pfunc :CreateFileMapping, :CreateFileMappingA,
28
+ [:handle, :pointer, :dword, :dword, :dword, :str],
29
+ :handle
30
+
31
+ attach_pfunc :CreateSemaphore, :CreateSemaphoreA,
32
+ [:pointer, :long, :long, :str],
33
+ :handle
34
+
35
+ attach_pfunc :FlushViewOfFile, [:uintptr_t, :size_t], :bool
36
+
37
+ attach_pfunc :MapViewOfFileEx,
38
+ [:handle, :dword, :dword, :dword, :size_t, :uintptr_t],
39
+ :uintptr_t
40
+
41
+ attach_pfunc :OpenFileMapping, :OpenFileMappingA,
42
+ [:dword, :bool, :str],
43
+ :handle
44
+
45
+ attach_pfunc :ReleaseSemaphore, [:handle, :long, :pointer], :bool
46
+ attach_pfunc :UnmapViewOfFile, [:uintptr_t], :bool
47
+ attach_pfunc :WaitForSingleObject, [:handle, :dword], :dword
48
+ attach_pfunc :VirtualQuery, [:uintptr_t, :pointer, :size_t], :size_t
49
+ end
50
+ end
@@ -0,0 +1,28 @@
1
+ require 'ffi'
2
+
3
+ module Windows
4
+ module Structs
5
+ extend FFI::Library
6
+ typedef :ulong, :dword
7
+
8
+ class SECURITY_ATTRIBUTES < FFI::Struct
9
+ layout(
10
+ :nLength, :dword,
11
+ :lpSecurityDescriptor, :pointer,
12
+ :bInheritHandle, :bool
13
+ )
14
+ end
15
+
16
+ class MEMORY_BASIC_INFORMATION < FFI::Struct
17
+ layout(
18
+ :BaseAddress, :pointer,
19
+ :AllocationBase, :pointer,
20
+ :AllocationProtect, :ulong,
21
+ :RegionSize, :size_t,
22
+ :State, :ulong,
23
+ :Protect, :dword,
24
+ :Type, :dword
25
+ )
26
+ end
27
+ end
28
+ end
@@ -4,104 +4,104 @@
4
4
  # Test suite for the win32-mmap package. This should be run via the
5
5
  # 'rake test' task.
6
6
  #####################################################################
7
- require 'test/unit'
7
+ require 'test-unit'
8
8
  require 'win32/mmap'
9
9
  include Win32
10
10
 
11
11
  class TC_Win32_Mmap < Test::Unit::TestCase
12
- def setup
13
- @mmap = MMap.new(:name => 'test', :size => 100)
14
- end
15
-
16
- def test_version
17
- assert_equal('0.2.4', MMap::VERSION)
18
- end
19
-
20
- def test_dynamic_string_value
21
- assert_nothing_raised{ @mmap.foo = 'test' }
22
- assert_nothing_raised{ @mmap.bar = 'alpha123' }
23
- assert_equal('test', @mmap.foo)
24
- assert_equal('alpha123', @mmap.bar)
25
- end
26
-
27
- def test_dynamic_integer_value
28
- assert_nothing_raised{ @mmap.bar = 7 }
29
- assert_nothing_raised{ @mmap.zero = 0 }
30
- assert_equal(7, @mmap.bar)
31
- assert_equal(0, @mmap.zero)
32
- end
33
-
34
- def test_dynamic_hash_value
35
- assert_nothing_raised{ @mmap.ahash = {'foo' => 0} }
36
- assert_nothing_raised{ @mmap.bhash = {'foo' => 0, 'bar' => 'hello'} }
37
- assert_equal({'foo' => 0}, @mmap.ahash)
38
- assert_equal({'foo' => 0, 'bar' => 'hello'}, @mmap.bhash)
39
- end
40
-
41
- def test_dynamic_array_value
42
- assert_nothing_raised{ @mmap.aarray = [1, 'x', 3] }
43
- assert_nothing_raised{ @mmap.barray = [{1 => 2}, [1,2,3], 'foo'] }
44
- assert_equal([1, 'x', 3], @mmap.aarray)
45
- assert_equal([{1=>2}, [1,2,3], 'foo'], @mmap.barray)
46
- end
47
-
48
- def test_valid_options
49
- assert_raises(ArgumentError){ MMap.new(:foo => 1) }
50
- end
51
-
52
- def test_address
53
- assert_respond_to(@mmap, :address)
54
- assert_kind_of(Fixnum, @mmap.address)
55
- end
56
-
57
- def test_base_address
58
- assert_respond_to(@mmap, :base_address)
59
- assert_respond_to(@mmap, :base_address=)
60
- assert_kind_of(Fixnum, @mmap.base_address)
61
- end
62
-
63
- def test_name
64
- assert_respond_to(@mmap, :name)
65
- assert_respond_to(@mmap, :name=)
66
- assert_equal('test', @mmap.name)
67
- end
68
-
69
- def test_inherit
70
- assert_respond_to(@mmap, :inherit?)
71
- assert_respond_to(@mmap, :inherit=)
72
- assert_equal(false, @mmap.inherit?)
73
- end
74
-
75
- def test_size
76
- assert_respond_to(@mmap, :size)
77
- assert_respond_to(@mmap, :size=)
78
- assert_equal(100, @mmap.size)
79
- end
80
-
81
- def test_file
82
- assert_respond_to(@mmap, :file)
83
- assert_respond_to(@mmap, :file=)
84
- assert_nil(@mmap.file)
85
- end
86
-
87
- def test_access
88
- assert_respond_to(@mmap, :access)
89
- assert_respond_to(@mmap, :access=)
90
- end
91
-
92
- def test_autolock
93
- assert_respond_to(@mmap, :autolock?)
94
- assert_respond_to(@mmap, :autolock=)
95
- assert_equal(true, @mmap.autolock?)
96
- end
97
-
98
- def test_protection
99
- assert_respond_to(@mmap, :protection)
100
- assert_respond_to(@mmap, :protection=)
101
- assert_equal(4, @mmap.protection)
102
- end
103
-
104
- def teardown
105
- @mmap.close
106
- end
12
+ def setup
13
+ @mmap = MMap.new(:name => 'test', :size => 100)
14
+ end
15
+
16
+ test "version is set to expected value" do
17
+ assert_equal('0.3.0', MMap::VERSION)
18
+ end
19
+
20
+ test "dynamic variable names and string values work as expected" do
21
+ assert_nothing_raised{ @mmap.foo = 'test' }
22
+ assert_nothing_raised{ @mmap.bar = 'alpha123' }
23
+ assert_equal('test', @mmap.foo)
24
+ assert_equal('alpha123', @mmap.bar)
25
+ end
26
+
27
+ test "dynamic variable names and integer values work as expected" do
28
+ assert_nothing_raised{ @mmap.bar = 7 }
29
+ assert_nothing_raised{ @mmap.zero = 0 }
30
+ assert_equal(7, @mmap.bar)
31
+ assert_equal(0, @mmap.zero)
32
+ end
33
+
34
+ test "dynamic variable names and hash values work as expected" do
35
+ assert_nothing_raised{ @mmap.ahash = {'foo' => 0} }
36
+ assert_nothing_raised{ @mmap.bhash = {'foo' => 0, 'bar' => 'hello'} }
37
+ assert_equal({'foo' => 0}, @mmap.ahash)
38
+ assert_equal({'foo' => 0, 'bar' => 'hello'}, @mmap.bhash)
39
+ end
40
+
41
+ test "dynamic variable names and array values work as expected" do
42
+ assert_nothing_raised{ @mmap.aarray = [1, 'x', 3] }
43
+ assert_nothing_raised{ @mmap.barray = [{1 => 2}, [1,2,3], 'foo'] }
44
+ assert_equal([1, 'x', 3], @mmap.aarray)
45
+ assert_equal([{1=>2}, [1,2,3], 'foo'], @mmap.barray)
46
+ end
47
+
48
+ test "passing an invalid option raises an argument error" do
49
+ assert_raises(ArgumentError){ MMap.new(:foo => 1) }
50
+ end
51
+
52
+ test "address method basic functionality" do
53
+ assert_respond_to(@mmap, :address)
54
+ assert_kind_of(Fixnum, @mmap.address)
55
+ end
56
+
57
+ test "base_address method basic functionality" do
58
+ assert_respond_to(@mmap, :base_address)
59
+ assert_respond_to(@mmap, :base_address=)
60
+ assert_kind_of(Fixnum, @mmap.base_address)
61
+ end
62
+
63
+ test "name accessor basic functionality" do
64
+ assert_respond_to(@mmap, :name)
65
+ assert_respond_to(@mmap, :name=)
66
+ assert_equal('test', @mmap.name)
67
+ end
68
+
69
+ test "inherit accessor basic functionality" do
70
+ assert_respond_to(@mmap, :inherit?)
71
+ assert_respond_to(@mmap, :inherit=)
72
+ assert_equal(false, @mmap.inherit?)
73
+ end
74
+
75
+ test "size accessor basic functionality" do
76
+ assert_respond_to(@mmap, :size)
77
+ assert_respond_to(@mmap, :size=)
78
+ assert_equal(100, @mmap.size)
79
+ end
80
+
81
+ test "file accessor basic functionality" do
82
+ assert_respond_to(@mmap, :file)
83
+ assert_respond_to(@mmap, :file=)
84
+ assert_nil(@mmap.file)
85
+ end
86
+
87
+ test "access accessor basic functionality" do
88
+ assert_respond_to(@mmap, :access)
89
+ assert_respond_to(@mmap, :access=)
90
+ end
91
+
92
+ test "autolock accessor basic functionality" do
93
+ assert_respond_to(@mmap, :autolock?)
94
+ assert_respond_to(@mmap, :autolock=)
95
+ assert_equal(true, @mmap.autolock?)
96
+ end
97
+
98
+ test "protection accessor basic functionality" do
99
+ assert_respond_to(@mmap, :protection)
100
+ assert_respond_to(@mmap, :protection=)
101
+ assert_equal(4, @mmap.protection)
102
+ end
103
+
104
+ def teardown
105
+ @mmap.close
106
+ end
107
107
  end
data/win32-mmap.gemspec CHANGED
@@ -2,15 +2,13 @@ require 'rubygems'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'win32-mmap'
5
- spec.version = '0.2.4'
5
+ spec.version = '0.3.0'
6
6
  spec.author = 'Daniel J. Berger'
7
7
  spec.license = 'Artistic 2.0'
8
8
  spec.email = 'djberg96@gmail.com'
9
- spec.homepage = 'http://www.rubyforge.org/projects/win32utils'
10
- spec.platform = Gem::Platform::RUBY
9
+ spec.homepage = 'https://github.com/djberg96/win32-mmap'
11
10
  spec.summary = 'Memory mapped IO for Windows.'
12
11
  spec.test_file = 'test/test_win32_mmap.rb'
13
- spec.has_rdoc = true
14
12
  spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
15
13
 
16
14
  spec.rubyforge_project = 'win32utils'
metadata CHANGED
@@ -1,84 +1,79 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: win32-mmap
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 2
8
- - 4
9
- version: 0.2.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Daniel J. Berger
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2010-04-28 00:00:00 -06:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-04-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: windows-pr
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
30
22
  type: :runtime
31
- version_requirements: *id001
32
- description: " The win32-mmap library provides an interface for memory mapped IO on\n MS Windows.\n"
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: ! " The win32-mmap library provides an interface for memory mapped
31
+ IO on\n MS Windows.\n"
33
32
  email: djberg96@gmail.com
34
33
  executables: []
35
-
36
34
  extensions: []
37
-
38
- extra_rdoc_files:
35
+ extra_rdoc_files:
39
36
  - MANIFEST
40
37
  - README
41
38
  - CHANGES
42
- files:
39
+ files:
43
40
  - CHANGES
44
41
  - examples/example_mmap_client.rb
45
42
  - examples/example_mmap_file.rb
46
43
  - examples/example_mmap_server.rb
47
44
  - lib/win32/mmap.rb
45
+ - lib/win32/windows/constants.rb
46
+ - lib/win32/windows/functions.rb
47
+ - lib/win32/windows/structs.rb
48
48
  - MANIFEST
49
49
  - Rakefile
50
50
  - README
51
51
  - test/test_win32_mmap.rb
52
52
  - win32-mmap.gemspec
53
- has_rdoc: true
54
- homepage: http://www.rubyforge.org/projects/win32utils
55
- licenses:
53
+ homepage: https://github.com/djberg96/win32-mmap
54
+ licenses:
56
55
  - Artistic 2.0
57
56
  post_install_message:
58
57
  rdoc_options: []
59
-
60
- require_paths:
58
+ require_paths:
61
59
  - lib
62
- required_ruby_version: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- segments:
67
- - 0
68
- version: "0"
69
- required_rubygems_version: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- segments:
74
- - 0
75
- version: "0"
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
76
72
  requirements: []
77
-
78
73
  rubyforge_project: win32utils
79
- rubygems_version: 1.3.6
74
+ rubygems_version: 1.8.24
80
75
  signing_key:
81
76
  specification_version: 3
82
77
  summary: Memory mapped IO for Windows.
83
- test_files:
78
+ test_files:
84
79
  - test/test_win32_mmap.rb