win32-api 1.9.2 → 1.10.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 032a6ef3e186d1e7f75d66aa491b1d6555911b7e6d06c3cef5574aa8cf1c9716
4
- data.tar.gz: 06663e721eb60abfe6e5298eff49bfff2dcb47c50c24936053188672d8406ef0
3
+ metadata.gz: f85be5c9ccd5960b68065fa44683552bf7a5620a06d3687bd4c260e2d616cd2d
4
+ data.tar.gz: a84981ff3ee59f2fde7c5d67932126718c158a60626989fb329d43402e271985
5
5
  SHA512:
6
- metadata.gz: 7bc5b2840703fd15b8bab1745fe9a06d8364654163ef9887b90409074b2c9ebb9e63be59e9f2ba27ad3334d749393a88cb1c143f6f02da2413a82aaea9ed93b4
7
- data.tar.gz: 8cfc35b23d169cdd12beba170cad6ca1a5c43c6f54adc57764c8d2046b11c7fdfd8ecb8bb6e07c9471f730b6ed5a2f5a72741988af881658d05e8814a1184493
6
+ metadata.gz: 7779f082d4ba995a9d6d0c66a58125158454d37f7704c75855f8fa6fc7df3c9858f56a94afc5bf8af32eca27c88fab909382a362a12ee5fb4ca7130ba07d2c76
7
+ data.tar.gz: 2b54ff36d075f30572ad94b88456db94e8de059611e760fb1af9da962c81a766fc11001550d7d8312196e778bea27f705bcbc87ef6f8261f7c05ffd35e4bd195
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ == 1.10.0 - 19-Apr-2021
2
+ * Add Ruby 3.1 snapshot support
3
+ * Add API.last_error
4
+
1
5
  == 1.9.2 - 13-Sep-2020
2
6
  * Handle Ruby 3.0 snapshot (formerly known as Ruby 2.8).
3
7
 
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM mcr.microsoft.com/windows/servercore:1903
1
+ FROM mcr.microsoft.com/windows/servercore:20H2
2
2
  LABEL maintainer "Hiroshi Hatake <cosmo0920.wp@gmail.com>"
3
3
  LABEL Description="win32-api building docker image"
4
4
 
@@ -80,6 +80,16 @@ RUN powershell \
80
80
  Invoke-WebRequest -OutFile C:\rubyinstaller-2.7.0-1-x64.exe https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.0-1/rubyinstaller-2.7.0-1-x64.exe
81
81
  RUN cmd /c "C:\rubyinstaller-2.7.0-1-x64.exe" /silent /dir=c:\ruby27-x64
82
82
 
83
+ # Ruby 3.0
84
+ RUN powershell \
85
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \
86
+ Invoke-WebRequest -OutFile C:\rubyinstaller-3.0.0-1-x86.exe https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.0-1/rubyinstaller-3.0.0-1-x86.exe
87
+ RUN cmd /c "C:\rubyinstaller-3.0.0-1-x86.exe" /silent /dir=c:\ruby30
88
+ RUN powershell \
89
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \
90
+ Invoke-WebRequest -OutFile C:\rubyinstaller-3.0.0-1-x64.exe https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.0-1/rubyinstaller-3.0.0-1-x64.exe
91
+ RUN cmd /c "C:\rubyinstaller-3.0.0-1-x64.exe" /silent /dir=c:\ruby30-x64
92
+
83
93
  # DevKit
84
94
  RUN powershell \
85
95
  [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \
@@ -92,8 +102,12 @@ RUN cmd /c C:\DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe -o"c:\DevKit64" -y
92
102
 
93
103
  RUN choco install -y git \
94
104
  && choco install -y msys2 --params "'/NoPath /NoUpdate /InstallDir:C:\msys64'"
105
+ # pacman -Syu --noconfirm is needed for downloading ucrt64 repo.
106
+ # They should be removed after using Ruby 2.5.9, 2.6.7, and 2.7.3 installers.
95
107
  RUN refreshenv \
108
+ && C:\ruby27\bin\ridk exec pacman -Syu --noconfirm \
96
109
  && C:\ruby27\bin\ridk install 2 3 \
110
+ && C:\ruby27-x64\bin\ridk exec pacman -Syu --noconfirm \
97
111
  && C:\ruby27-x64\bin\ridk install 2 3
98
112
 
99
113
  ENTRYPOINT ["cmd"]
data/Dockerfile.trunk CHANGED
@@ -2,15 +2,15 @@ FROM cosmo0920/win32-api:latest
2
2
  LABEL maintainer "Hiroshi Hatake <cosmo0920.wp@gmail.com>"
3
3
  LABEL Description="win32-api building docker image"
4
4
 
5
- # Ruby 3.0
5
+ # Ruby 3.1
6
6
  RUN powershell \
7
7
  [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \
8
- Invoke-WebRequest -OutFile C:\rubyinstaller-head-x86-20200911.exe https://ci.appveyor.com/api/buildjobs/trvw8cisuqismasc/artifacts/packages%2Fri%2Frecipes%2Finstaller-inno%2Frubyinstaller-head-x86.exe
9
- RUN cmd /c "C:\rubyinstaller-head-x86-20200911.exe" /silent /dir=c:\ruby30
8
+ Invoke-WebRequest -OutFile C:\rubyinstaller-head-x86-20210418.exe https://ci.appveyor.com/api/buildjobs/smfh4ojkobb4duif/artifacts/packages%2Fri%2Frecipes%2Finstaller-inno%2Frubyinstaller-head-x86.exe
9
+ RUN cmd /c "C:\rubyinstaller-head-x86-20210418.exe" /silent /dir=c:\ruby31
10
10
  RUN powershell \
11
11
  [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \
12
- Invoke-WebRequest -OutFile C:\rubyinstaller-head-x64-20200911.exe https://ci.appveyor.com/api/buildjobs/ufndgf49pysdvpt9/artifacts/packages%2Fri%2Frecipes%2Finstaller-inno%2Frubyinstaller-head-x64.exe
13
- RUN cmd /c "C:\rubyinstaller-head-x64-20200911.exe" /silent /dir=c:\ruby30-x64
12
+ Invoke-WebRequest -OutFile C:\rubyinstaller-head-x64-20210418.exe https://ci.appveyor.com/api/buildjobs/hsgdg4xl5ny74k94/artifacts/packages%2Fri%2Frecipes%2Finstaller-inno%2Frubyinstaller-head-x64.exe
13
+ RUN cmd /c "C:\rubyinstaller-head-x64-20210418.exe" /silent /dir=c:\ruby31-x64
14
14
 
15
15
  RUN mkdir C:\pkg
16
16
  COPY build-gem.bat C:\\build-gem.bat
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- win32-api (1.9.1)
4
+ win32-api (1.10.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -15,7 +15,6 @@ PLATFORMS
15
15
  x64-mingw32
16
16
 
17
17
  DEPENDENCIES
18
- bundler (>= 2.1.4)
19
18
  rake
20
19
  test-unit (>= 2.5.0)
21
20
  win32-api!
data/Rakefile CHANGED
@@ -59,7 +59,7 @@ namespace 'gem' do
59
59
  end
60
60
 
61
61
  desc 'Build a binary gem'
62
- task :binary, :ruby2_32, :ruby2_64, :ruby21, :ruby21_64, :ruby22, :ruby22_64, :ruby23_32, :ruby23_64, :ruby24_32, :ruby24_64, :ruby25_32, :ruby25_64, :ruby_26_32, :ruby26_64, :ruby27_32, :ruby27_64, :ruby30_32, :ruby30_64 do |task, args|
62
+ task :binary, :ruby2_32, :ruby2_64, :ruby21, :ruby21_64, :ruby22, :ruby22_64, :ruby23_32, :ruby23_64, :ruby24_32, :ruby24_64, :ruby25_32, :ruby25_64, :ruby_26_32, :ruby26_64, :ruby27_32, :ruby27_64, :ruby30_32, :ruby30_64, :ruby31_32, :ruby31_64 do |task, args|
63
63
  # These are just what's on my system at the moment. Adjust as needed.
64
64
  # ri refers to RubyInstaller, ruby 2.3 and prev were built with RubyInstaller (:ri),
65
65
  # 2.4 and later with RubyInstaller2 (:ri2)
@@ -100,6 +100,8 @@ namespace 'gem' do
100
100
  :ruby27_64 => {:path => "#{pre}/ruby27-x64/bin", :ri => :ri2_64, :omit => true},
101
101
  :ruby30_32 => {:path => "#{pre}/ruby30/bin", :ri => :ri2, :omit => true},
102
102
  :ruby30_64 => {:path => "#{pre}/ruby30-x64/bin", :ri => :ri2_64, :omit => true},
103
+ :ruby31_32 => {:path => "#{pre}/ruby31/bin", :ri => :ri2, :omit => true},
104
+ :ruby31_64 => {:path => "#{pre}/ruby31-x64/bin", :ri => :ri2_64, :omit => true},
103
105
  }
104
106
  )
105
107
 
data/appveyor.yml CHANGED
@@ -1,5 +1,7 @@
1
1
  version: '{build}'
2
2
 
3
+ image: Visual Studio 2019
4
+
3
5
  init:
4
6
  # use a minimal path
5
7
  - set PATH=C:\ruby%ruby_version%\bin;C:\Program Files\7-Zip;C:\Program Files\AppVeyor\BuildAgent;C:\Program Files\Git\cmd;C:\Windows\system32
@@ -26,6 +28,10 @@ test_script:
26
28
  environment:
27
29
  matrix:
28
30
  - ruby_version: _trunk
31
+ - ruby_version: 30-x64
32
+ - ruby_version: 30
33
+ - ruby_version: 27-x64
34
+ - ruby_version: 27
29
35
  - ruby_version: 26-x64
30
36
  - ruby_version: 26
31
37
  - ruby_version: 25-x64
@@ -34,12 +40,6 @@ environment:
34
40
  - ruby_version: 24
35
41
  - ruby_version: 23-x64
36
42
  - ruby_version: 23
37
- - ruby_version: 22-x64
38
- - ruby_version: 22
39
- - ruby_version: 21-x64
40
- - ruby_version: 21
41
- - ruby_version: 200-x64
42
- - ruby_version: 200
43
43
 
44
44
  matrix:
45
45
  allow_failures:
data/ext/Makefile ADDED
@@ -0,0 +1,269 @@
1
+
2
+ SHELL = /bin/sh
3
+
4
+ # V=0 quiet, V=1 verbose. other values don't work.
5
+ V = 0
6
+ Q1 = $(V:1=)
7
+ Q = $(Q1:0=@)
8
+ ECHO1 = $(V:1=@ :)
9
+ ECHO = $(ECHO1:0=@ echo)
10
+ NULLCMD = :
11
+
12
+ #### Start of system configuration section. ####
13
+
14
+ srcdir = win32
15
+ topdir = /C/Ruby27-x64/include/ruby-2.7.0
16
+ hdrdir = $(topdir)
17
+ arch_hdrdir = C:/Ruby27-x64/include/ruby-2.7.0/x64-mingw32
18
+ PATH_SEPARATOR = :
19
+ VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
20
+ prefix = $(DESTDIR)/C/Ruby27-x64
21
+ rubysitearchprefix = $(rubylibprefix)/$(sitearch)
22
+ rubyarchprefix = $(rubylibprefix)/$(arch)
23
+ rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
24
+ exec_prefix = $(prefix)
25
+ vendorarchhdrdir = $(vendorhdrdir)/$(sitearch)
26
+ sitearchhdrdir = $(sitehdrdir)/$(sitearch)
27
+ rubyarchhdrdir = $(rubyhdrdir)/$(arch)
28
+ vendorhdrdir = $(rubyhdrdir)/vendor_ruby
29
+ sitehdrdir = $(rubyhdrdir)/site_ruby
30
+ rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME)
31
+ vendorarchdir = $(vendorlibdir)/$(sitearch)
32
+ vendorlibdir = $(vendordir)/$(ruby_version)
33
+ vendordir = $(rubylibprefix)/vendor_ruby
34
+ sitearchdir = $(sitelibdir)/$(sitearch)
35
+ sitelibdir = $(sitedir)/$(ruby_version)
36
+ sitedir = $(rubylibprefix)/site_ruby
37
+ rubyarchdir = $(rubylibdir)/$(arch)
38
+ rubylibdir = $(rubylibprefix)/$(ruby_version)
39
+ sitearchincludedir = $(includedir)/$(sitearch)
40
+ archincludedir = $(includedir)/$(arch)
41
+ sitearchlibdir = $(libdir)/$(sitearch)
42
+ archlibdir = $(libdir)/$(arch)
43
+ ridir = $(datarootdir)/$(RI_BASE_NAME)
44
+ mandir = $(datarootdir)/man
45
+ localedir = $(datarootdir)/locale
46
+ libdir = $(exec_prefix)/lib
47
+ psdir = $(docdir)
48
+ pdfdir = $(docdir)
49
+ dvidir = $(docdir)
50
+ htmldir = $(docdir)
51
+ infodir = $(datarootdir)/info
52
+ docdir = $(datarootdir)/doc/$(PACKAGE)
53
+ oldincludedir = $(DESTDIR)/usr/include
54
+ includedir = $(prefix)/include
55
+ localstatedir = $(prefix)/var
56
+ sharedstatedir = $(prefix)/com
57
+ sysconfdir = $(DESTDIR)
58
+ datadir = $(datarootdir)
59
+ datarootdir = $(prefix)/share
60
+ libexecdir = $(exec_prefix)/libexec
61
+ sbindir = $(exec_prefix)/sbin
62
+ bindir = $(exec_prefix)/bin
63
+ archdir = $(rubyarchdir)
64
+
65
+
66
+ CC_WRAPPER =
67
+ CC = x86_64-w64-mingw32-gcc
68
+ CXX = x86_64-w64-mingw32-g++
69
+ LIBRUBY = lib$(RUBY_SO_NAME).dll.a
70
+ LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
71
+ LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
72
+ LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static $(MAINLIBS)
73
+ empty =
74
+ OUTFLAG = -o $(empty)
75
+ COUTFLAG = -o $(empty)
76
+ CSRCFLAG = $(empty)
77
+
78
+ RUBY_EXTCONF_H =
79
+ cflags = $(optflags) $(debugflags) $(warnflags)
80
+ cxxflags =
81
+ optflags = -O3 -fno-omit-frame-pointer
82
+ debugflags = -ggdb3
83
+ warnflags = -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable
84
+ cppflags =
85
+ CCDLFLAGS =
86
+ CFLAGS = $(CCDLFLAGS) -O3 -fno-fast-math -fstack-protector-strong -fno-omit-frame-pointer $(ARCH_FLAG)
87
+ INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
88
+ DEFS = -D_FILE_OFFSET_BITS=64
89
+ CPPFLAGS = -DHAVE_STRNCPY_S -D__USE_MINGW_ANSI_STDIO=1 -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0600 -D__MINGW_USE_VC2005_COMPAT $(DEFS) $(cppflags)
90
+ CXXFLAGS = $(CCDLFLAGS) -march=x86-64 -mtune=generic -O2 -pipe $(ARCH_FLAG)
91
+ ldflags = -L. -pipe -s -fstack-protector-strong
92
+ dldflags = -pipe -s -fstack-protector-strong -Wl,--enable-auto-image-base,--enable-auto-import $(DEFFILE)
93
+ ARCH_FLAG =
94
+ DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
95
+ LDSHARED = $(CC) -shared
96
+ LDSHAREDXX = $(CXX) -shared
97
+ AR = ar
98
+ EXEEXT = .exe
99
+
100
+ RUBY_INSTALL_NAME = $(RUBY_BASE_NAME)
101
+ RUBY_SO_NAME = x64-msvcrt-ruby270
102
+ RUBYW_INSTALL_NAME = $(RUBYW_BASE_NAME)
103
+ RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version)
104
+ RUBYW_BASE_NAME = rubyw
105
+ RUBY_BASE_NAME = ruby
106
+
107
+ arch = x64-mingw32
108
+ sitearch = x64-msvcrt
109
+ ruby_version = 2.7.0
110
+ ruby = $(bindir)/$(RUBY_BASE_NAME)
111
+ RUBY = $(ruby)
112
+ ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h
113
+
114
+ RM = rm -f
115
+ RM_RF = $(RUBY) -run -e rm -- -rf
116
+ RMDIRS = rmdir --ignore-fail-on-non-empty -p
117
+ MAKEDIRS = /usr/bin/mkdir -p
118
+ INSTALL = /usr/bin/install -c
119
+ INSTALL_PROG = $(INSTALL) -m 0755
120
+ INSTALL_DATA = $(INSTALL) -m 644
121
+ COPY = cp
122
+ TOUCH = exit >
123
+
124
+ #### End of system configuration section. ####
125
+
126
+ preload =
127
+ libpath = . $(libdir)
128
+ LIBPATH = -L. -L$(libdir)
129
+ DEFFILE = $(TARGET)-$(arch).def
130
+
131
+ CLEANFILES = mkmf.log $(DEFFILE)
132
+ DISTCLEANFILES =
133
+ DISTCLEANDIRS =
134
+
135
+ extout =
136
+ extout_prefix =
137
+ target_prefix = /win32
138
+ LOCAL_LIBS =
139
+ LIBS = $(LIBRUBYARG_SHARED) -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi
140
+ ORIG_SRCS = api.c
141
+ SRCS = $(ORIG_SRCS)
142
+ OBJS = api.o
143
+ HDRS =
144
+ LOCAL_HDRS =
145
+ TARGET = api
146
+ TARGET_NAME = api
147
+ TARGET_ENTRY = Init_$(TARGET_NAME)
148
+ DLLIB = $(TARGET).so
149
+ EXTSTATIC =
150
+ STATIC_LIB =
151
+
152
+ TIMESTAMP_DIR = .
153
+ BINDIR = $(bindir)
154
+ RUBYCOMMONDIR = $(sitedir)$(target_prefix)
155
+ RUBYLIBDIR = $(sitelibdir)$(target_prefix)
156
+ RUBYARCHDIR = $(sitearchdir)$(target_prefix)
157
+ HDRDIR = $(rubyhdrdir)/ruby$(target_prefix)
158
+ ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)
159
+ TARGET_SO_DIR =
160
+ TARGET_SO = $(TARGET_SO_DIR)$(DLLIB)
161
+ CLEANLIBS = $(TARGET_SO)
162
+ CLEANOBJS = *.o *.bak
163
+
164
+ all: $(DLLIB)
165
+ static: $(STATIC_LIB)
166
+ .PHONY: all install static install-so install-rb
167
+ .PHONY: clean clean-so clean-static clean-rb
168
+
169
+ clean-static::
170
+ clean-rb-default::
171
+ clean-rb::
172
+ clean-so::
173
+ clean: clean-so clean-static clean-rb-default clean-rb
174
+ -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time
175
+
176
+ distclean-rb-default::
177
+ distclean-rb::
178
+ distclean-so::
179
+ distclean-static::
180
+ distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb
181
+ -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
182
+ -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
183
+ -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true
184
+
185
+ realclean: distclean
186
+ install: install-so install-rb
187
+
188
+ install-so: $(DLLIB) $(TIMESTAMP_DIR)/.sitearchdir.-.win32.time
189
+ $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
190
+ clean-static::
191
+ -$(Q)$(RM) $(STATIC_LIB)
192
+ install-rb: pre-install-rb do-install-rb install-rb-default
193
+ install-rb-default: pre-install-rb-default do-install-rb-default
194
+ pre-install-rb: Makefile
195
+ pre-install-rb-default: Makefile
196
+ do-install-rb:
197
+ do-install-rb-default:
198
+ pre-install-rb-default:
199
+ @$(NULLCMD)
200
+ $(TIMESTAMP_DIR)/.sitearchdir.-.win32.time:
201
+ $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR)
202
+ $(Q) $(TOUCH) $@
203
+
204
+ site-install: site-install-so site-install-rb
205
+ site-install-so: install-so
206
+ site-install-rb: install-rb
207
+
208
+ .SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S
209
+
210
+ .cc.o:
211
+ $(ECHO) compiling $(<)
212
+ $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
213
+
214
+ .cc.S:
215
+ $(ECHO) translating $(<)
216
+ $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
217
+
218
+ .mm.o:
219
+ $(ECHO) compiling $(<)
220
+ $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
221
+
222
+ .mm.S:
223
+ $(ECHO) translating $(<)
224
+ $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
225
+
226
+ .cxx.o:
227
+ $(ECHO) compiling $(<)
228
+ $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
229
+
230
+ .cxx.S:
231
+ $(ECHO) translating $(<)
232
+ $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
233
+
234
+ .cpp.o:
235
+ $(ECHO) compiling $(<)
236
+ $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
237
+
238
+ .cpp.S:
239
+ $(ECHO) translating $(<)
240
+ $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
241
+
242
+ .c.o:
243
+ $(ECHO) compiling $(<)
244
+ $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
245
+
246
+ .c.S:
247
+ $(ECHO) translating $(<)
248
+ $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
249
+
250
+ .m.o:
251
+ $(ECHO) compiling $(<)
252
+ $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
253
+
254
+ .m.S:
255
+ $(ECHO) translating $(<)
256
+ $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
257
+
258
+ $(TARGET_SO): $(DEFFILE) $(OBJS) Makefile
259
+ $(ECHO) linking shared-object win32/$(DLLIB)
260
+ -$(Q)$(RM) $(@)
261
+ $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
262
+
263
+
264
+
265
+ $(DEFFILE):
266
+ $(ECHO) generating $(@)
267
+ $(Q) (echo EXPORTS && echo $(TARGET_ENTRY)) > $@
268
+
269
+ $(OBJS): $(HDRS) $(ruby_headers)
@@ -0,0 +1,2 @@
1
+ EXPORTS
2
+ Init_api
data/ext/api.o ADDED
Binary file
data/ext/api.so ADDED
Binary file
data/ext/mkmf.log ADDED
@@ -0,0 +1,39 @@
1
+ have_func: checking for strncpy_s()... -------------------- yes
2
+
3
+ "x86_64-w64-mingw32-gcc -o conftest.exe -IC:/Ruby27-x64/include/ruby-2.7.0/x64-mingw32 -IC:/Ruby27-x64/include/ruby-2.7.0/ruby/backward -IC:/Ruby27-x64/include/ruby-2.7.0 -I. -D__USE_MINGW_ANSI_STDIO=1 -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0600 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-fast-math -fstack-protector-strong -fno-omit-frame-pointer conftest.c -L. -LC:/Ruby27-x64/lib -L. -pipe -s -fstack-protector-strong -lx64-msvcrt-ruby270 -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi "
4
+ checked program was:
5
+ /* begin */
6
+ 1: #include "ruby.h"
7
+ 2:
8
+ 3: #include <winsock2.h>
9
+ 4: #include <windows.h>
10
+ 5: int main(int argc, char **argv)
11
+ 6: {
12
+ 7: return !!argv[argc];
13
+ 8: }
14
+ /* end */
15
+
16
+ "x86_64-w64-mingw32-gcc -o conftest.exe -IC:/Ruby27-x64/include/ruby-2.7.0/x64-mingw32 -IC:/Ruby27-x64/include/ruby-2.7.0/ruby/backward -IC:/Ruby27-x64/include/ruby-2.7.0 -I. -D__USE_MINGW_ANSI_STDIO=1 -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0600 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-fast-math -fstack-protector-strong -fno-omit-frame-pointer conftest.c -L. -LC:/Ruby27-x64/lib -L. -pipe -s -fstack-protector-strong -lx64-msvcrt-ruby270 -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi "
17
+ checked program was:
18
+ /* begin */
19
+ 1: #include "ruby.h"
20
+ 2:
21
+ 3: #include <winsock2.h>
22
+ 4: #include <windows.h>
23
+ 5:
24
+ 6: /*top*/
25
+ 7: extern int t(void);
26
+ 8: int main(int argc, char **argv)
27
+ 9: {
28
+ 10: if (argc > 1000000) {
29
+ 11: int (* volatile tp)(void)=(int (*)(void))&t;
30
+ 12: printf("%d", (*tp)());
31
+ 13: }
32
+ 14:
33
+ 15: return !!argv[argc];
34
+ 16: }
35
+ 17: int t(void) { void ((*volatile p)()); p = (void ((*)()))strncpy_s; return !p; }
36
+ /* end */
37
+
38
+ --------------------
39
+
data/ext/win32/api.c CHANGED
@@ -43,7 +43,7 @@
43
43
 
44
44
 
45
45
  #define MAX_BUF 1024
46
- #define WINDOWS_API_VERSION "1.9.2"
46
+ #define WINDOWS_API_VERSION "1.10.0"
47
47
 
48
48
  #define _T_VOID 0
49
49
  #define _T_LONG 1
@@ -62,6 +62,35 @@ typedef struct {
62
62
  int prototype[20];
63
63
  } Win32API;
64
64
 
65
+ typedef struct ThreadData {
66
+ DWORD win32api_error;
67
+ } ThreadData;
68
+
69
+ static inline ThreadData* thread_data_get(void);
70
+ static ID id_thread_data;
71
+
72
+ static ThreadData* thread_data_init(void)
73
+ {
74
+ ThreadData* td;
75
+ VALUE obj;
76
+
77
+ obj = Data_Make_Struct(rb_cObject, ThreadData, NULL, -1, td);
78
+ rb_thread_local_aset(rb_thread_current(), id_thread_data, obj);
79
+
80
+ return td;
81
+ }
82
+
83
+ static inline ThreadData* thread_data_get()
84
+ {
85
+ VALUE obj = rb_thread_local_aref(rb_thread_current(), id_thread_data);
86
+
87
+ if(obj != Qnil && TYPE(obj) == T_DATA){
88
+ return (ThreadData*) DATA_PTR(obj);
89
+ }
90
+
91
+ return thread_data_init();
92
+ }
93
+
65
94
  static void api_free(Win32API* ptr){
66
95
  if(ptr->library)
67
96
  FreeLibrary(ptr->library);
@@ -781,6 +810,7 @@ static VALUE api_call(int argc, VALUE* argv, VALUE self){
781
810
  uintptr_t return_value;
782
811
  int i = 0;
783
812
  int len;
813
+ ThreadData* thread_data = thread_data_get();
784
814
 
785
815
  struct{
786
816
  uintptr_t params[20];
@@ -975,6 +1005,8 @@ static VALUE api_call(int argc, VALUE* argv, VALUE self){
975
1005
  }
976
1006
  }
977
1007
 
1008
+ thread_data->win32api_error = GetLastError();
1009
+
978
1010
  /* Return the appropriate type based on the return type specified
979
1011
  * in the constructor.
980
1012
  */
@@ -1029,6 +1061,21 @@ static VALUE api_call(int argc, VALUE* argv, VALUE self){
1029
1061
  return v_return;
1030
1062
  }
1031
1063
 
1064
+ /*
1065
+ * call-seq:
1066
+ * Win32::API.last_error
1067
+ *
1068
+ * Return the last Win32 error code of the current executing thread.
1069
+ *
1070
+ * The error code shouldn't be retrieved by calling GetLastError() manually
1071
+ * because Ruby's internal code may call other Win32 API and reset the error
1072
+ * code before it.
1073
+ */
1074
+ static VALUE get_last_error(VALUE self)
1075
+ {
1076
+ return INT2NUM(thread_data_get()->win32api_error);
1077
+ }
1078
+
1032
1079
  /*
1033
1080
  * Wraps the Windows API functions in a Ruby interface.
1034
1081
  */
@@ -1061,6 +1108,9 @@ void Init_api(){
1061
1108
  /* Miscellaneous */
1062
1109
  rb_define_alloc_func(cAPI, api_allocate);
1063
1110
 
1111
+ /* GetLastError alternative */
1112
+ rb_define_singleton_method(cAPI, "last_error", get_last_error, 0);
1113
+
1064
1114
  /* Win32::API Instance Methods */
1065
1115
  rb_define_method(cAPI, "initialize", api_init, -1);
1066
1116
  rb_define_method(cAPI, "call", api_call, -1);
data/ext/win32/api.so ADDED
Binary file
@@ -18,7 +18,7 @@ class TC_Win32_API < Test::Unit::TestCase
18
18
  end
19
19
 
20
20
  def test_version
21
- assert_equal('1.9.2', API::VERSION)
21
+ assert_equal('1.10.0', API::VERSION)
22
22
  end
23
23
 
24
24
  def test_constructor_basic
@@ -43,6 +43,12 @@ class TC_Win32_API < Test::Unit::TestCase
43
43
  assert_equal(0xFFFFFFFF, @gfa.call('C:/foobarbazblah'))
44
44
  end
45
45
 
46
+ def test_last_error
47
+ @gfa.call('C:/foobarbazblah')
48
+ error_file_not_found = 2
49
+ assert_equal(error_file_not_found, API.last_error)
50
+ end
51
+
46
52
  def test_dll_name
47
53
  assert_respond_to(@gcd, :dll_name)
48
54
  assert_equal('kernel32', @gcd.dll_name)
data/win32-api.gemspec CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'win32-api'
5
- spec.version = '1.9.2'
5
+ spec.version = '1.10.0'
6
6
  spec.authors = ['Daniel J. Berger', 'Park Heesob', 'Hiroshi Hatake']
7
7
  spec.license = 'Artistic-2.0'
8
8
  spec.email = 'djberg96@gmail.com'
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: win32-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.2
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
8
8
  - Park Heesob
9
9
  - Hiroshi Hatake
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-09-13 00:00:00.000000000 Z
13
+ date: 2021-04-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: test-unit
@@ -65,10 +65,14 @@ files:
65
65
  - Rakefile
66
66
  - appveyor.yml
67
67
  - build-gem.bat
68
+ - ext/Makefile
69
+ - ext/api-x64-mingw32.def
70
+ - ext/api.o
71
+ - ext/api.so
68
72
  - ext/extconf.rb
73
+ - ext/mkmf.log
69
74
  - ext/win32/api.c
70
- - pkg/win32-api-1.9.1-universal-mingw32.gem
71
- - pkg/win32-api-1.9.2-universal-mingw32.gem
75
+ - ext/win32/api.so
72
76
  - test.rb
73
77
  - test/test_win32_api.rb
74
78
  - test/test_win32_api_callback.rb
@@ -611,13 +615,12 @@ files:
611
615
  - vendor/bundle/ruby/2.7.0/specifications/power_assert-1.1.7.gemspec
612
616
  - vendor/bundle/ruby/2.7.0/specifications/rake-13.0.1.gemspec
613
617
  - vendor/bundle/ruby/2.7.0/specifications/test-unit-3.3.5.gemspec
614
- - win32-api-1.9.1.gem
615
618
  - win32-api.gemspec
616
619
  homepage: http://github.com/cosmo0920/win32-api
617
620
  licenses:
618
621
  - Artistic-2.0
619
622
  metadata: {}
620
- post_install_message:
623
+ post_install_message:
621
624
  rdoc_options: []
622
625
  require_paths:
623
626
  - lib
@@ -632,9 +635,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
632
635
  - !ruby/object:Gem::Version
633
636
  version: '0'
634
637
  requirements: []
635
- rubyforge_project:
636
- rubygems_version: 2.7.6.2
637
- signing_key:
638
+ rubygems_version: 3.1.4
639
+ signing_key:
638
640
  specification_version: 4
639
641
  summary: A superior replacement for Win32API
640
642
  test_files:
data/win32-api-1.9.1.gem DELETED
Binary file