diff options
author | eban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-06-03 16:04:37 +0000 |
---|---|---|
committer | eban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-06-03 16:04:37 +0000 |
commit | 99a9c703c631f3e3d5b43eb83bb82842125cb0ac (patch) | |
tree | fbc07ad6739b5d7eb827ebd8cc807eef4774a234 | |
parent | 30efd6b3a62975cb4094f4e414d6b7ee9849cf3f (diff) |
see ChangeLog
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@726 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ext/Win32API/Win32API.c | 24 |
2 files changed, 26 insertions, 3 deletions
@@ -1,3 +1,8 @@ +Sun Jun 4 01:02:00 2000 WATANABE Hirofumi <eban@os.rim.or.jp> + + * ext/Win32API/Win32API.c: directly "call" in asm statement for + gcc 2.95.x or newer. + Sat Jun 3 16:42:27 2000 WATANABE Hirofumi <eban@os.rim.or.jp> * cygwin/GNUmakefile: remove unused import.h diff --git a/ext/Win32API/Win32API.c b/ext/Win32API/Win32API.c index 433d13abeb..3f0ceae9e1 100644 --- a/ext/Win32API/Win32API.c +++ b/ext/Win32API/Win32API.c @@ -2,7 +2,7 @@ Win32API - Ruby Win32 API Import Facility */ -#ifndef _MSC_VER +#if !defined _MSC_VER && !defined NT #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <stdio.h> @@ -132,6 +132,7 @@ Win32API_Call(argc, argv, obj) VALUE import_type; int nimport, timport, texport, i; int items; + int ret; items = rb_scan_args(argc, argv, "0*", &args); @@ -162,7 +163,7 @@ Win32API_Call(argc, argv, obj) mov eax, lParam push eax } -#elif defined(__CYGWIN__) || defined(__MINGW32__) +#elif defined __GNUC__ asm volatile ("pushl %0" :: "g" (lParam)); #else #error @@ -184,7 +185,7 @@ Win32API_Call(argc, argv, obj) mov eax, pParam push eax } -#elif defined(__CYGWIN__) || defined(__MINGW32__) +#elif defined __GNUC__ asm volatile ("pushl %0" :: "g" (pParam)); #else #error @@ -194,6 +195,22 @@ Win32API_Call(argc, argv, obj) } } +#if defined __GNUC__ + asm volatile ("call *%1" : "=r" (ret) : "g" (ApiFunction)); + switch (texport) { + case _T_NUMBER: + case _T_INTEGER: + Return = INT2NUM(ret); + break; + case _T_POINTER: + Return = rb_str_new2((char *)ret); + break; + case _T_VOID: + default: + Return = INT2NUM(0); + break; + } +#else switch (texport) { case _T_NUMBER: ApiFunctionNumber = (ApiNumber *) ApiFunction; @@ -214,6 +231,7 @@ Win32API_Call(argc, argv, obj) Return = INT2NUM(0); break; } +#endif return Return; } |