win32-api 1.0.5 → 1.0.6

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.
data/CHANGES CHANGED
@@ -1,3 +1,13 @@
1
+ = 1.0.6 - 18-Apr-2008
2
+ * Added the effective_function_name method. This allows you to see what the
3
+ actual function name is that was defined, e.g. GetUserNameA vs GetUserNameW.
4
+ * Replaced an instance of _tcscmp with strcmp. The case in question was always
5
+ going to be ASCII.
6
+ * Cleaned up some -W3 warnings.
7
+ * Added the build_manifest task to the Rakefile, which is automatically run if
8
+ you're using a version of Ruby built with VC++ 8 or later. This builds a
9
+ ruby.exe.manifest file (if it doesn't already exist).
10
+
1
11
  = 1.0.5 - 20-Nov-2007
2
12
  * The API.new method now defaults to "W" (wide character functions) before "A"
3
13
  (ANSI functions) if the $KCODE global variable is set to 'u' (UTF8).
@@ -0,0 +1,181 @@
1
+
2
+ SHELL = /bin/sh
3
+
4
+ #### Start of system configuration section. ####
5
+
6
+ srcdir = win32
7
+ topdir = C:/ruby/lib/ruby/1.8/i386-mswin32
8
+ hdrdir = $(topdir)
9
+ VPATH = $(srcdir);$(topdir);$(hdrdir)
10
+
11
+ DESTDIR = C:
12
+ prefix = $(DESTDIR)/ruby
13
+ exec_prefix = $(DESTDIR)/ruby
14
+ sitedir = $(prefix)/lib/ruby/site_ruby
15
+ rubylibdir = $(libdir)/ruby/$(ruby_version)
16
+ top_srcdir = $(DESTDIR)/develop/win/ruby/ruby-1.8.5
17
+ archdir = $(rubylibdir)/$(arch)
18
+ sbindir = $(exec_prefix)/sbin
19
+ datadir = $(prefix)/share
20
+ includedir = $(prefix)/include
21
+ infodir = $(prefix)/info
22
+ sysconfdir = $(prefix)/etc
23
+ mandir = $(prefix)/man
24
+ libdir = $(DESTDIR)/ruby/lib
25
+ sharedstatedir = $(DESTDIR)/etc
26
+ oldincludedir = $(DESTDIR)/usr/include
27
+ sitearchdir = $(sitelibdir)/$(sitearch)
28
+ localstatedir = $(DESTDIR)/var
29
+ bindir = $(exec_prefix)/bin
30
+ sitelibdir = $(sitedir)/$(ruby_version)
31
+ libexecdir = $(exec_prefix)/libexec
32
+
33
+ CC = cl -nologo
34
+ LIBRUBY = $(RUBY_SO_NAME).lib
35
+ LIBRUBY_A = msvcrt-ruby18-static.lib
36
+ LIBRUBYARG_SHARED = $(LIBRUBY)
37
+ LIBRUBYARG_STATIC = $(LIBRUBY_A)
38
+
39
+ RUBY_EXTCONF_H =
40
+ CFLAGS = -MD -Zi -O2b2xg- -G6
41
+ INCFLAGS = -I. -I. -IC:/ruby/lib/ruby/1.8/i386-mswin32 -I.
42
+ CPPFLAGS =
43
+ CXXFLAGS = $(CFLAGS)
44
+ DLDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf -dll $(LIBPATH) -def:$(DEFFILE) -implib:$(*F:.so=)-$(arch).lib -pdb:$(*F:.so=)-$(arch).pdb
45
+ LDSHARED = cl -nologo -LD
46
+ AR = lib -nologo
47
+ EXEEXT = .exe
48
+
49
+ RUBY_INSTALL_NAME = ruby
50
+ RUBY_SO_NAME = msvcrt-ruby18
51
+ arch = i386-mswin32
52
+ sitearch = i386-msvcrt
53
+ ruby_version = 1.8
54
+ ruby = C:/ruby/bin/ruby
55
+ RUBY = $(ruby:/=\)
56
+ RM = $(RUBY) -run -e rm -- -f
57
+ MAKEDIRS = @$(RUBY) -run -e mkdir -- -p
58
+ INSTALL = copy > nul
59
+ INSTALL_PROG = $(INSTALL)
60
+ INSTALL_DATA = $(INSTALL)
61
+ COPY = copy > nul
62
+
63
+ #### End of system configuration section. ####
64
+
65
+ preload =
66
+
67
+ libpath = $(libdir)
68
+ LIBPATH = -libpath:"$(libdir)"
69
+ DEFFILE = $(TARGET)-$(arch).def
70
+
71
+ CLEANFILES =
72
+ DISTCLEANFILES = vc*.pdb $(DEFFILE)
73
+
74
+ extout =
75
+ extout_prefix =
76
+ target_prefix = /win32
77
+ LOCAL_LIBS =
78
+ LIBS = $(LIBRUBYARG_SHARED) oldnames.lib user32.lib advapi32.lib wsock32.lib
79
+ SRCS = api.c
80
+ OBJS = api.obj
81
+ TARGET = api
82
+ DLLIB = $(TARGET).so
83
+ EXTSTATIC =
84
+ STATIC_LIB =
85
+
86
+ RUBYCOMMONDIR = $(sitedir)$(target_prefix)
87
+ RUBYLIBDIR = $(sitelibdir)$(target_prefix)
88
+ RUBYARCHDIR = $(sitearchdir)$(target_prefix)
89
+
90
+ TARGET_SO = $(DLLIB)
91
+ CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
92
+ CLEANOBJS = *.obj *.lib *.s[ol] *.pdb *.exp *.bak
93
+
94
+ all: $(DLLIB)
95
+ static: $(STATIC_LIB)
96
+
97
+ clean:
98
+ @-$(RM) $(CLEANLIBS:/=\) $(CLEANOBJS:/=\) $(CLEANFILES:/=\)
99
+
100
+ distclean: clean
101
+ @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
102
+ @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES:/=\)
103
+
104
+ realclean: distclean
105
+ install: install-so install-rb
106
+
107
+ install-so: $(RUBYARCHDIR)
108
+ install-so: $(RUBYARCHDIR)/$(DLLIB)
109
+ $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
110
+ $(INSTALL_PROG) $(DLLIB:/=\) $(RUBYARCHDIR:/=\)
111
+ install-rb: pre-install-rb install-rb-default
112
+ install-rb-default: pre-install-rb-default
113
+ pre-install-rb: Makefile
114
+ pre-install-rb-default: Makefile
115
+ $(RUBYARCHDIR):
116
+ $(MAKEDIRS) $@
117
+
118
+ site-install: site-install-so site-install-rb
119
+ site-install-so: install-so
120
+ site-install-rb: install-rb
121
+
122
+ .SUFFIXES: .c .m .cc .cxx .cpp .obj
123
+
124
+ {$(srcdir)}.cc{}.obj:
125
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
126
+
127
+ {$(topdir)}.cc{}.obj:
128
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
129
+
130
+ {$(hdrdir)}.cc{}.obj:
131
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
132
+
133
+ .cc.obj:
134
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
135
+
136
+ {$(srcdir)}.cxx{}.obj:
137
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
138
+
139
+ {$(topdir)}.cxx{}.obj:
140
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
141
+
142
+ {$(hdrdir)}.cxx{}.obj:
143
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
144
+
145
+ .cxx.obj:
146
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
147
+
148
+ {$(srcdir)}.cpp{}.obj:
149
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
150
+
151
+ {$(topdir)}.cpp{}.obj:
152
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
153
+
154
+ {$(hdrdir)}.cpp{}.obj:
155
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
156
+
157
+ .cpp.obj:
158
+ $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/)
159
+
160
+ {$(srcdir)}.c{}.obj:
161
+ $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/)
162
+
163
+ {$(topdir)}.c{}.obj:
164
+ $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/)
165
+
166
+ {$(hdrdir)}.c{}.obj:
167
+ $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/)
168
+
169
+ .c.obj:
170
+ $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/)
171
+
172
+ $(DLLIB): $(DEFFILE) $(OBJS)
173
+ @-$(RM) $@
174
+ $(LDSHARED) -Fe$(@) $(OBJS) $(LIBS) $(LOCAL_LIBS) $(DLDFLAGS)
175
+
176
+
177
+
178
+ $(DEFFILE):
179
+ $(RUBY) -e "puts 'EXPORTS', 'Init_$(TARGET)'" > $@
180
+
181
+ $(OBJS): {.;$(srcdir);$(topdir);$(hdrdir)}ruby.h {.;$(srcdir);$(topdir);$(hdrdir)}defines.h
@@ -0,0 +1,2 @@
1
+ EXPORTS
2
+ Init_api
Binary file
Binary file
Binary file
Binary file
@@ -7,4 +7,5 @@
7
7
  require 'mkmf'
8
8
 
9
9
  have_func('strncpy_s')
10
- create_makefile('win32/api', 'win32')
10
+
11
+ create_makefile('win32/api', 'win32')
@@ -0,0 +1,28 @@
1
+ have_func: checking for strncpy_s()... -------------------- no
2
+
3
+ "cl -nologo -Feconftest -I. -IC:/ruby/lib/ruby/1.8/i386-mswin32 -I. -IC:/ruby/lib/ruby/1.8/i386-mswin32 -MD -Zi -O2b2xg- -G6 conftest.c msvcrt-ruby18-static.lib oldnames.lib user32.lib advapi32.lib wsock32.lib -link -libpath:"C:/ruby/lib" -stack:0x2000000"
4
+ conftest.c
5
+ conftest.obj : error LNK2001: unresolved external symbol _strncpy_s
6
+ conftest.exe : fatal error LNK1120: 1 unresolved externals
7
+ checked program was:
8
+ /* begin */
9
+ 1: /*top*/
10
+ 2: int main() { return 0; }
11
+ 3: int t() { strncpy_s(); return 0; }
12
+ /* end */
13
+
14
+ "cl -nologo -Feconftest -I. -IC:/ruby/lib/ruby/1.8/i386-mswin32 -I. -IC:/ruby/lib/ruby/1.8/i386-mswin32 -MD -Zi -O2b2xg- -G6 conftest.c msvcrt-ruby18-static.lib oldnames.lib user32.lib advapi32.lib wsock32.lib -link -libpath:"C:/ruby/lib" -stack:0x2000000"
15
+ conftest.c
16
+ conftest.c(6) : error C2065: 'strncpy_s' : undeclared identifier
17
+ checked program was:
18
+ /* begin */
19
+ 1: #include <windows.h>
20
+ 2: #include <winsock.h>
21
+ 3:
22
+ 4: /*top*/
23
+ 5: int main() { return 0; }
24
+ 6: int t() { void ((*volatile p)()); p = (void ((*)()))strncpy_s; return 0; }
25
+ /* end */
26
+
27
+ --------------------
28
+
Binary file
@@ -2,7 +2,7 @@
2
2
  #include <windows.h>
3
3
 
4
4
  #define MAX_BUF 1024
5
- #define WINDOWS_API_VERSION "1.0.5"
5
+ #define WINDOWS_API_VERSION "1.0.6"
6
6
 
7
7
  #define _T_VOID 0
8
8
  #define _T_LONG 1
@@ -71,7 +71,7 @@ static VALUE callback_init(int argc, VALUE* argv, VALUE self)
71
71
  VALUE v_proto, v_return, v_proc;
72
72
  int i;
73
73
 
74
- rb_scan_args(argc, argv, "11", &v_proto, &v_return);
74
+ rb_scan_args(argc, argv, "11&", &v_proto, &v_return, &v_proc);
75
75
 
76
76
  /* Validate prototype characters */
77
77
  for(i = 0; i < RSTRING(v_proto)->len; i++){
@@ -87,14 +87,9 @@ static VALUE callback_init(int argc, VALUE* argv, VALUE self)
87
87
  if(NIL_P(v_return) || RARRAY(v_return)->len == 0)
88
88
  v_return = rb_str_new2("L");
89
89
 
90
- if(rb_block_given_p())
91
- v_proc = rb_block_proc();
92
- else
93
- v_proc = Qnil;
94
-
95
- rb_iv_set(self, "@function", v_proc);
96
- rb_iv_set(self, "@prototype", v_proto);
97
- rb_iv_set(self, "@return_type", v_return);
90
+ rb_iv_set(self, "@function", v_proc);
91
+ rb_iv_set(self, "@prototype", v_proto);
92
+ rb_iv_set(self, "@return_type", v_return);
98
93
 
99
94
  return self;
100
95
  }
@@ -148,7 +143,7 @@ static VALUE api_init(int argc, VALUE* argv, VALUE self)
148
143
  int i;
149
144
  char* first = "A";
150
145
  char* second = "W";
151
- VALUE v_proc, v_proto, v_return, v_dll, v_bool, v_name;
146
+ VALUE v_proc, v_proto, v_return, v_dll;
152
147
 
153
148
  rb_scan_args(argc, argv, "13", &v_proc, &v_proto, &v_return, &v_dll);
154
149
 
@@ -198,7 +193,7 @@ static VALUE api_init(int argc, VALUE* argv, VALUE self)
198
193
  fProc = GetProcAddress(hLibrary, TEXT(RSTRING(v_proc)->ptr));
199
194
 
200
195
  /* The order of 'A' and 'W' is reversed if $KCODE is set to 'UTF8'. */
201
- if(!_tcscmp(rb_get_kcode(), "UTF8")){
196
+ if(!strcmp(rb_get_kcode(), "UTF8")){
202
197
  first = "W";
203
198
  second = "A";
204
199
  }
@@ -223,8 +218,17 @@ static VALUE api_init(int argc, VALUE* argv, VALUE self)
223
218
  StringError(GetLastError())
224
219
  );
225
220
  }
221
+ else{
222
+ rb_iv_set(self, "@effective_function_name", v_unicode);
223
+ }
224
+ }
225
+ else{
226
+ rb_iv_set(self, "@effective_function_name", v_ascii);
226
227
  }
227
228
  }
229
+ else{
230
+ rb_iv_set(self, "@effective_function_name", v_proc);
231
+ }
228
232
 
229
233
  ptr->function = fProc;
230
234
 
@@ -508,9 +512,15 @@ void Init_api(){
508
512
  /* The name of the DLL that exports the API function */
509
513
  rb_define_attr(cAPI, "dll_name", 1, 0);
510
514
 
511
- /* The name of the function */
515
+ /* The name of the function passed to the constructor */
512
516
  rb_define_attr(cAPI, "function_name", 1, 0);
513
517
 
518
+ /* The name of the actual function that is returned by the constructor.
519
+ * For example, if you passed 'GetUserName' to the constructor, then the
520
+ * effective function name would be either 'GetUserNameA' or 'GetUserNameW'.
521
+ */
522
+ rb_define_attr(cAPI, "effective_function_name", 1, 0);
523
+
514
524
  /* The prototype, returned as an array of characters */
515
525
  rb_define_attr(cAPI, "prototype", 1, 0);
516
526
 
Binary file
@@ -16,7 +16,7 @@ class TC_Win32_API < Test::Unit::TestCase
16
16
  end
17
17
 
18
18
  def test_version
19
- assert_equal('1.0.5', API::VERSION)
19
+ assert_equal('1.0.6', API::VERSION)
20
20
  end
21
21
 
22
22
  def test_call
@@ -40,6 +40,11 @@ class TC_Win32_API < Test::Unit::TestCase
40
40
  assert_equal('GetCurrentDirectory', @api.function_name)
41
41
  end
42
42
 
43
+ def test_effective_function_name
44
+ assert_respond_to(@api, :effective_function_name)
45
+ assert_equal('GetCurrentDirectoryA', @api.effective_function_name)
46
+ end
47
+
43
48
  def test_prototype
44
49
  assert_respond_to(@api, :prototype)
45
50
  assert_equal(['L', 'P'], @api.prototype)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: win32-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2007-11-20 00:00:00 -07:00
12
+ date: 2008-04-18 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -25,9 +25,18 @@ extra_rdoc_files:
25
25
  - MANIFEST
26
26
  - ext/win32/api.c
27
27
  files:
28
+ - ext/api-i386-mswin32.def
29
+ - ext/api-i386-mswin32.exp
30
+ - ext/api-i386-mswin32.lib
31
+ - ext/api-i386-mswin32.pdb
32
+ - ext/api.obj
28
33
  - ext/extconf.rb
34
+ - ext/Makefile
35
+ - ext/mkmf.log
36
+ - ext/vc60.pdb
29
37
  - ext/win32
30
38
  - ext/win32/api.c
39
+ - ext/win32/api.so
31
40
  - test/tc_win32_api.rb
32
41
  - test/tc_win32_api_callback.rb
33
42
  - README
@@ -55,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
64
  requirements: []
56
65
 
57
66
  rubyforge_project: win32utils
58
- rubygems_version: 0.9.5
67
+ rubygems_version: 1.1.1
59
68
  signing_key:
60
69
  specification_version: 2
61
70
  summary: A superior replacement for Win32API