ffi-win32-extensions 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e5acf291b33091d04112998904383526358c6d9f
4
+ data.tar.gz: 77236d03797f75178af185497a584b9d2c2fe0f7
5
+ SHA512:
6
+ metadata.gz: f5c499dc8e3c88802d8d9f87ef3adb375fb2124aee916fb0767a600b05d12e61d0d102088c5ed54a10c6e83fe35f1c36eb32757a5b61e1b819f987f9fa707835
7
+ data.tar.gz: 80be12ecb287a4557985c3796c0753aec200c63894535acb13dbb5fbabd1fa224275ef90071e30a0ece37ac08edbb6af6fbe6f570dd4a241a6016bd94d5b2195
@@ -0,0 +1,2 @@
1
+ C��p��H�*,�&=��yUY-gf�/]��X!�Zҕ l�I��a+���'�����Tr~�V@Y-�QE94QE�܇�&�l���xZMוd-�g������&�cm�P��-� �7�𓲬���ʓc�Y���H�y�瞾��񝞽B6�x^I���l^!4 tވ�0��BDf!?�j���^��_����`���+�?o�
2
+ %�8��>%�
@@ -0,0 +1,2 @@
1
+ by�f�̩��1�ng�w����ڭ���u;'��f=�Bտ�Lb�g�?z����|~�L���C5��a�r��wvMe��~�ϱ
2
+ %�̇���0��̵;����&l�u,�s��ж�A����;ͬ ��o,rg~'i)H���D]�l�����^k��
data/CHANGES ADDED
@@ -0,0 +1,2 @@
1
+ = 1.0.0 - 7-May-2016
2
+ * Initial release
data/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "{}"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright {yyyy} {name of copyright owner}
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
@@ -0,0 +1,9 @@
1
+ * ffi-win32-extensions.gemspec
2
+ * LICENSE
3
+ * MANIFEST
4
+ * Rakefile
5
+ * README
6
+ * lib/ffi-win32-extensions.rb
7
+ * lib/ffi/win32/extensions.rb
8
+ * test/test_ffi_extensions.rb
9
+ * test/test_string_extensions.rb
data/README ADDED
@@ -0,0 +1,47 @@
1
+ = Description
2
+ A Ruby library that adds some core FFI and String methods to supplement
3
+ development of Ruby libraries on Windows.
4
+
5
+ = Installation
6
+ gem install ffi-win32-extensions
7
+
8
+ = Details
9
+ The following FFI::MemoryPointer methods have been added:
10
+
11
+ * read_array_of_string - For reading char** types.
12
+ * read_wide_string - Similar to read_string but for wide char* types.
13
+
14
+ The following FFI module functions have been added:
15
+
16
+ * windows_error_message - A Windows specific error string using FormatMessage.
17
+ * raise_windows_error - Raises a windows specific error using windows_error_message.
18
+
19
+ The following String instance methods have been added:
20
+
21
+ * wincode - Converts a string to UTF-16LE for use in wide character functions.
22
+ * wstrip - Like String#strip, but for wide strings.
23
+
24
+ Example:
25
+
26
+ require 'ffi/win32/extensions'
27
+
28
+ str = old_string.wincode
29
+ rv = SomeWideFunctionW(str)
30
+
31
+ unless rv == 0
32
+ FFI.raise_windows_error('SomeWindowsFunction', rv)
33
+ end
34
+
35
+ = Copyright
36
+ (C) 2016 Daniel J. Berger, All Rights Reserved
37
+
38
+ = Warranty
39
+ This package is provided "as is" and without any express or
40
+ implied warranties, including, without limitation, the implied
41
+ warranties of merchantability and fitness for a particular purpose.
42
+
43
+ = License
44
+ Apache 2.0
45
+
46
+ = Author
47
+ Daniel Berger
@@ -0,0 +1,42 @@
1
+ require 'rake'
2
+ require 'rake/clean'
3
+ require 'rake/testtask'
4
+
5
+ CLEAN.include('**/*.gem', '**/*.rbc')
6
+
7
+ namespace :gem do
8
+ desc "Create the ffi-win32-extensions gem"
9
+ task :create => [:clean] do
10
+ require 'rubygems/package'
11
+ spec = eval(IO.read('ffi-win32-extensions.gemspec'))
12
+ spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
13
+ Gem::Package.build(spec, true)
14
+ end
15
+
16
+ desc "Install the win32-clipboard library"
17
+ task :install => [:create] do
18
+ file = Dir["*.gem"].first
19
+ sh "gem install -l #{file}"
20
+ end
21
+ end
22
+
23
+ namespace :test do
24
+ Rake::TestTask.new(:all) do |t|
25
+ t.warning = true
26
+ t.verbose = true
27
+ end
28
+
29
+ Rake::TestTask.new(:ffi) do |t|
30
+ t.warning = true
31
+ t.verbose = true
32
+ t.test_files = FileList['test/test_ffi_extensions.rb']
33
+ end
34
+
35
+ Rake::TestTask.new(:string) do |t|
36
+ t.warning = true
37
+ t.verbose = true
38
+ t.test_files = FileList['test/test_string_extensions.rb']
39
+ end
40
+ end
41
+
42
+ task :default => 'test:all'
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl
3
+ cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
4
+ MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi
5
+ ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
6
+ bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS
7
+ Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI
8
+ S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M
9
+ gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi
10
+ FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O
11
+ zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl
12
+ DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe
13
+ nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv
14
+ bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD
15
+ ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7
16
+ tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC
17
+ /sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2
18
+ wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ
19
+ EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V
20
+ tGSHgAmcLlkdGgan182qsE/4kKM=
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'ffi-win32-extensions'
5
+ spec.version = '1.0.0'
6
+ spec.authors = 'Daniel J. Berger'
7
+ spec.license = 'Apache 2.0'
8
+ spec.email = 'djberg96@gmail.com'
9
+ spec.homepage = 'http://github.com/djberg96/ffi-win32-extensions'
10
+ spec.summary = 'Extends the FFI and String classes on MS Windows'
11
+ spec.test_files = Dir['test/test*']
12
+ spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
13
+ spec.cert_chain = ['certs/djberg96_pub.pem']
14
+
15
+ spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
16
+
17
+ spec.add_dependency('ffi')
18
+ spec.add_development_dependency('test-unit')
19
+
20
+ spec.description = <<-EOF
21
+ The ffi-win32-extensions library adds additional methods to the FFI
22
+ and String classes to aid in the development of FFI based libraries
23
+ on MS Windows.
24
+ EOF
25
+ end
@@ -0,0 +1 @@
1
+ require_relative 'ffi/win32/extensions'
@@ -0,0 +1,79 @@
1
+ require 'ffi'
2
+
3
+ class FFI::Pointer
4
+ # Returns an array of strings for char** types.
5
+ #
6
+ def read_array_of_string
7
+ elements = []
8
+
9
+ loc = self
10
+
11
+ until ((element = loc.read_pointer).null?)
12
+ elements << element.read_string
13
+ loc += FFI::Type::POINTER.size
14
+ end
15
+
16
+ elements
17
+ end
18
+
19
+ # Read +num_bytes+ from a wide character string pointer.
20
+ #
21
+ def read_wide_string(num_bytes)
22
+ read_bytes(num_bytes).force_encoding('UTF-16LE')
23
+ .encode('UTF-8', :invalid => :replace, :undef => :replace)
24
+ .split(0.chr).first.force_encoding(Encoding.default_external)
25
+ end
26
+ end
27
+
28
+ module FFI
29
+ extend FFI::Library
30
+
31
+ ffi_lib :kernel32
32
+
33
+ # We deliberately use the ANSI version because all Ruby error messages are English.
34
+ attach_function :FormatMessage, :FormatMessageA,
35
+ [:ulong, :pointer, :ulong, :ulong, :pointer, :ulong, :pointer], :ulong
36
+
37
+ # Returns a Windows specific error message based on +err+ prepended
38
+ # with the +function+ name. Note that this does not actually raise
39
+ # an error, it only returns the message.
40
+ #
41
+ # The message will always be English regardless of your locale.
42
+ #
43
+ def windows_error_message(function, err=FFI.errno)
44
+ flags = 0x00001000 | 0x00000200 # ARGUMENT_ARRAY + SYSTEM
45
+ buf = FFI::MemoryPointer.new(:char, 1024)
46
+
47
+ # 0x0409 = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
48
+ FormatMessage(flags, nil, err , 0x0409, buf, 1024, nil)
49
+
50
+ function + ': ' + buf.read_string.strip
51
+ end
52
+
53
+ # Raises a Windows specific error using SystemCallError that is based on
54
+ # the +err+ provided, with the message prepended with the +function+ name.
55
+ #
56
+ def raise_windows_error(function, err=FFI.errno)
57
+ raise SystemCallError.new(windows_error_message(function, err), err)
58
+ end
59
+
60
+ module_function :windows_error_message
61
+ module_function :raise_windows_error
62
+ end
63
+
64
+ class String
65
+ # Convenience method for converting strings to UTF-16LE for wide character
66
+ # functions that require it.
67
+ #
68
+ def wincode
69
+ (self.tr(File::SEPARATOR, File::ALT_SEPARATOR) + 0.chr).encode('UTF-16LE')
70
+ end
71
+
72
+ # Read a wide character string up until the first double null, and delete
73
+ # any remaining null characters.
74
+ #
75
+ def wstrip
76
+ self.force_encoding('UTF-16LE').encode('UTF-8', :invalid=>:replace, :undef=>:replace).
77
+ split("\x00")[0].encode(Encoding.default_external)
78
+ end
79
+ end
@@ -0,0 +1,25 @@
1
+ require 'ffi-win32-extensions'
2
+ require 'test-unit'
3
+
4
+ class TC_FFI_Win32_Extensions < Test::Unit::TestCase
5
+ def setup
6
+ @ptr = FFI::MemoryPointer.new(:char)
7
+ end
8
+
9
+ test 'read_array_of_strings' do
10
+ assert_respond_to(@ptr, :read_array_of_string)
11
+ end
12
+
13
+ test 'windows_error_message' do
14
+ assert_respond_to(FFI, :windows_error_message)
15
+ end
16
+
17
+ test 'raise_windows_error' do
18
+ assert_respond_to(FFI, :raise_windows_error)
19
+ end
20
+
21
+ def teardown
22
+ @ptr.free
23
+ @ptr = nil
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ require 'ffi-win32-extensions'
2
+ require 'test-unit'
3
+
4
+ class TC_String_Win32_Extensions < Test::Unit::TestCase
5
+ def setup
6
+ @string = 'foo/bar'
7
+ end
8
+
9
+ test 'wincode' do
10
+ assert_respond_to(@string, :wincode)
11
+ end
12
+
13
+ test 'wstrip' do
14
+ assert_respond_to(@string, :wstrip)
15
+ end
16
+
17
+ def teardown
18
+ @string = nil
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ffi-win32-extensions
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Daniel J. Berger
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl
14
+ cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
15
+ MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi
16
+ ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
17
+ bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS
18
+ Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI
19
+ S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M
20
+ gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi
21
+ FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O
22
+ zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl
23
+ DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe
24
+ nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv
25
+ bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD
26
+ ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7
27
+ tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC
28
+ /sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2
29
+ wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ
30
+ EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V
31
+ tGSHgAmcLlkdGgan182qsE/4kKM=
32
+ -----END CERTIFICATE-----
33
+ date: 2016-05-07 00:00:00.000000000 Z
34
+ dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: ffi
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ - !ruby/object:Gem::Dependency
50
+ name: test-unit
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ description: |2
64
+ The ffi-win32-extensions library adds additional methods to the FFI
65
+ and String classes to aid in the development of FFI based libraries
66
+ on MS Windows.
67
+ email: djberg96@gmail.com
68
+ executables: []
69
+ extensions: []
70
+ extra_rdoc_files:
71
+ - README
72
+ - CHANGES
73
+ - MANIFEST
74
+ files:
75
+ - certs
76
+ - certs/djberg96_pub.pem
77
+ - CHANGES
78
+ - ffi-win32-extensions.gemspec
79
+ - lib
80
+ - lib/ffi
81
+ - lib/ffi/win32
82
+ - lib/ffi/win32/extensions.rb
83
+ - lib/ffi-win32-extensions.rb
84
+ - LICENSE
85
+ - MANIFEST
86
+ - Rakefile
87
+ - README
88
+ - test
89
+ - test/test_ffi_extensions.rb
90
+ - test/test_string_extensions.rb
91
+ homepage: http://github.com/djberg96/ffi-win32-extensions
92
+ licenses:
93
+ - Apache 2.0
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.4.8
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: Extends the FFI and String classes on MS Windows
115
+ test_files:
116
+ - test/test_ffi_extensions.rb
117
+ - test/test_string_extensions.rb
@@ -0,0 +1 @@
1
+ =B��"�i3���<�ٞ��U/%Z���JOZ���==ֽByΘQ5�2�a�>�ӆ���r����WcW���å�Cw�������l����?�L�rd�VT*M�b�8��ܿ��Xzzz�[ ��Ena�o��k�ѧ�XD�]}������f����2a@�*�W[��T32S;n��nρ䃌��\�7BL��q8�� ��ڶ�'m���(K�˽��� �_]�]���4�d6��uC �nn�[7�򌎽<�����t