<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=text/html;charset=gb2312 http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.7600.16466"></HEAD>
<BODY style="PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 15px" 
id=MailContainerBody leftMargin=0 topMargin=0 CanvasTabStop="true" 
name="Compose message area">
<DIV><FONT face=Calibri>keywords: _PyVerify_fd __pioinfo _msize</FONT></DIV>
<DIV><FONT face=Calibri></FONT>&nbsp;</DIV>
<DIV><FONT face=Calibri>PyPy can not pass this test:<BR>&nbsp;pytest.py 
--cc=mingw32-gcc 
pypy\rlib\test\test_rposix.py::TestPosixUnicode::()::test_is_valid_fd<BR>After 2 
days of hard work, I finally realise why. Patch file attached.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Calibri>The problem is in _PyVerify_fd:<BR>&nbsp; FILE* f = 
fopen("d:\\55.txt","w");<BR>&nbsp; int no = fileno(f);<BR>&nbsp; int flg1 = 
_PyVerify_fd(no);<BR>&nbsp; fclose(f);<BR>&nbsp; int flg2 = 
_PyVerify_fd(no);<BR>&nbsp; printf("flg1 %d should be 1, flg2 %d should be 0", 
flg1, flg2)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Calibri>in file rposix.py, source of function _PyVerify_fd is 
write to a c file, and will be compile to a Windows<BR>DLL file. In this 
function, it use <BR>&nbsp;extern __declspec(dllimport) char * 
__pioinfo[];<BR>__pioinfo as a global variable.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Calibri>I find use __pioinfo in a DLL file is not safe. the 
__pioinfo and _msize may export from many 
DLL:<BR>&nbsp;msvcrt.dll<BR>&nbsp;msvcr90.dll<BR>&nbsp;msvcr90d.dll<BR>&nbsp;or 
maybe msvcr70.dll ...<BR>If we fopen and fileno in a EXE file, and call 
_PyVerify_fd in a DLL file, its very danger. The EXE<BR>and DLL may reference 
different __pioinfo and get error.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Calibri>So I think 
test_rposix.py::TestPosixUnicode::()::test_is_valid_fd can pass in MSVC is only 
a coincidence.<BR>_PyVerify_fd in a DLL and use dllimport __pioinfo is not 
safe.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Calibri>In my fix, I do not assume any DLL we should use. I try 
to find the current DLL which export __pioinfo already<BR>loaded. Sure this is 
not very good. But I think if we must place _PyVerify_fd in a DLL, no good 
solution.</FONT></DIV>
<DIV><FONT face=Calibri></FONT>&nbsp;</DIV>
<DIV><FONT face=Calibri>After this path, this tests are pass:</FONT></DIV>
<DIV><FONT face=Calibri>&nbsp;pytest.py --cc=mingw32-gcc 
pypy\rlib\test\test_rposix.py</FONT></DIV>
<DIV>
<DIV><FONT 
face=Calibri>&nbsp;pytest.py&nbsp;pypy\rlib\test\test_rposix.py</FONT></DIV>
<DIV><FONT face=Calibri></FONT>&nbsp;</DIV>
<DIV><FONT face=Calibri>-----------</FONT></DIV>
<DIV><FONT face=Calibri></FONT>&nbsp;</DIV>
<DIV><FONT face=Calibri>diff -crN pypy-pypy-4a38b43757e3/_pytest/config.py 
pypy-pypy-4a38b43757e3.bookaa/_pytest/config.py<BR>*** 
pypy-pypy-4a38b43757e3/_pytest/config.py&nbsp;Tue May 22 14:03:20 2012<BR>--- 
pypy-pypy-4a38b43757e3.bookaa/_pytest/config.py&nbsp;Sat May 26 20:47:43 
2012<BR>***************<BR>*** 157,162 ****<BR>--- 157,164 
----<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for arg in args + 
[current]:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if hasattr(arg, 'startswith') and 
arg.startswith("--"):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
continue<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if arg.find('::') != 
-1:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
arg = 
arg[:arg.find('::')]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
anchor = current.join(arg, 
abs=1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if anchor.check(): # we found some file 
object<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
self._path2confmods[None] = self.getconftestmodules(anchor)<BR>diff -crN 
pypy-pypy-4a38b43757e3/pypy/conftest.py 
pypy-pypy-4a38b43757e3.bookaa/pypy/conftest.py<BR>*** 
pypy-pypy-4a38b43757e3/pypy/conftest.py&nbsp;Tue May 22 14:03:20 2012<BR>--- 
pypy-pypy-4a38b43757e3.bookaa/pypy/conftest.py&nbsp;Sat May 26 20:59:51 
2012<BR>***************<BR>*** 33,38 ****<BR>--- 33,42 
----<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise 
ValueError("%s not in %s" % (value, 
PLATFORMS))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set_platform(value, 
None)<BR>&nbsp; <BR>+ def _set_compiler(opt, opt_str, value, parser):&nbsp;#add 
by bookaa<BR>+&nbsp;&nbsp;&nbsp;&nbsp; from pypy.translator.platform import 
set_platform<BR>+&nbsp;&nbsp;&nbsp;&nbsp; set_platform('host', value)<BR>+ 
<BR>&nbsp; def pytest_addoption(parser):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; group 
= parser.getgroup("pypy options")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
group.addoption('--view', action="store_true", dest="view", 
default=False,<BR>***************<BR>*** 46,51 ****<BR>--- 50,58 
----<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; group.addoption('-P', '--platform', 
action="callback", 
type="string",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
default="host", 
callback=_set_platform,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
help="set up tests to use specified platform as compile/run 
target")<BR>+&nbsp;&nbsp;&nbsp;&nbsp; group.addoption('--cc', action="callback", 
type="string", #add by 
bookaa<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
default="host", 
callback=_set_compiler,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
help="set up tests to use specified compiler")&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; group = parser.getgroup("JIT 
options")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; group.addoption('--viewloops', 
action="store_true",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
default=False, dest="viewloops",<BR>diff -crN 
pypy-pypy-4a38b43757e3/pypy/rlib/rposix.py 
pypy-pypy-4a38b43757e3.bookaa/pypy/rlib/rposix.py<BR>*** 
pypy-pypy-4a38b43757e3/pypy/rlib/rposix.py&nbsp;Tue May 22 14:03:20 2012<BR>--- 
pypy-pypy-4a38b43757e3.bookaa/pypy/rlib/rposix.py&nbsp;Sat May 26 20:51:13 
2012<BR>***************<BR>*** 24,34 ****<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
separate_module_sources 
=['''<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Lifted 
completely from CPython 3.3 Modules/posix_module.c 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include 
&lt;malloc.h&gt; /* for _msize 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef struct 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
intptr_t 
osfhnd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
char osfile;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
my_ioinfo;<BR>!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extern 
__declspec(dllimport) char * 
__pioinfo[];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define 
IOINFO_L2E 5<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define 
IOINFO_ARRAY_ELTS&nbsp;&nbsp; (1 &lt;&lt; 
IOINFO_L2E)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define 
IOINFO_ARRAYS 64<BR>--- 24,35 ----<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
separate_module_sources 
=['''<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Lifted 
completely from CPython 3.3 Modules/posix_module.c 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include 
&lt;malloc.h&gt; /* for _msize 
*/<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include 
&lt;windows.h&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
typedef struct 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
intptr_t 
osfhnd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
char osfile;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
my_ioinfo;<BR>!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //extern 
__declspec(dllimport) char * 
__pioinfo[];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define 
IOINFO_L2E 5<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define 
IOINFO_ARRAY_ELTS&nbsp;&nbsp; (1 &lt;&lt; 
IOINFO_L2E)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define 
IOINFO_ARRAYS 64<BR>***************<BR>*** 36,41 ****<BR>--- 37,58 
----<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define FOPEN 
0x01<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define 
_NO_CONSOLE_FILENO (intptr_t)-2<BR>&nbsp; 
<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char** Get_pioinfo(void** 
pp)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HMODULE 
hm;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hm = 
GetModuleHandleA("msvcr90.dll");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (hm == 
0)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
hm = 
GetModuleHandleA("msvcr90d.dll");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (hm == 
0)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
hm = 
GetModuleHandleA("msvcrt.dll");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (hm)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
void * p = GetProcAddress(hm, 
"__pioinfo");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*pp = GetProcAddress(hm, 
"_msize");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return 
(char**)p;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
0;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* This function 
emulates what the windows 
CRT<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
does to validate file handles 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
int<BR>***************<BR>*** 45,56 
****<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
const int i2 = fd &amp; ((1 &lt;&lt; IOINFO_L2E) - 1);<BR>&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
static size_t sizeof_ioinfo = 0;<BR>&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
/* Determine the actual size of the ioinfo 
structure,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
* as used by the CRT loaded in 
memory<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (sizeof_ioinfo == 0 &amp;&amp; __pioinfo[0] != NULL) 
{<BR>!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
sizeof_ioinfo = _msize(__pioinfo[0]) / 
IOINFO_ARRAY_ELTS;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (sizeof_ioinfo == 0) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
/* This should not happen... */<BR>--- 62,77 
----<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
const int i2 = fd &amp; ((1 &lt;&lt; IOINFO_L2E) - 1);<BR>&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
static size_t sizeof_ioinfo = 
0;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
int (*my_msize)(char*) = 
0;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
char** __pioinfo = 
Get_pioinfo((void**)&amp;my_msize);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (__pioinfo == 
0)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return 0;<BR>&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
/* Determine the actual size of the ioinfo 
structure,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
* as used by the CRT loaded in 
memory<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (sizeof_ioinfo == 0 &amp;&amp; __pioinfo[0] != NULL) 
{<BR>!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
sizeof_ioinfo = my_msize(__pioinfo[0]) / 
IOINFO_ARRAY_ELTS;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (sizeof_ioinfo == 0) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
/* This should not happen... */<BR>***************<BR>*** 75,80 ****<BR>--- 
96,105 
----<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ''',]<BR>+&nbsp;&nbsp;&nbsp;&nbsp; from 
pypy.translator.platform import platform<BR>+&nbsp;&nbsp;&nbsp;&nbsp; if 
platform.name == 'mingw32':<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
separate_module_sources[0] = '''#include &lt;stdint.h&gt; /* for intptr_t 
*/<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ''' + 
separate_module_sources[0]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export_symbols = 
['_PyVerify_fd']<BR>&nbsp; else:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
separate_module_sources = []<BR>diff -crN 
pypy-pypy-4a38b43757e3/pypy/rpython/tool/rfficache.py 
pypy-pypy-4a38b43757e3.bookaa/pypy/rpython/tool/rfficache.py<BR>*** 
pypy-pypy-4a38b43757e3/pypy/rpython/tool/rfficache.py&nbsp;Tue May 22 14:03:20 
2012<BR>--- 
pypy-pypy-4a38b43757e3.bookaa/pypy/rpython/tool/rfficache.py&nbsp;Sat May 26 
20:47:42 2012<BR>***************<BR>*** 13,19 ****<BR>&nbsp; from 
pypy.tool.gcc_cache import build_executable_cache<BR>&nbsp; <BR>&nbsp; def 
ask_gcc(question, add_source=""):<BR>!&nbsp;&nbsp;&nbsp;&nbsp; includes = 
['stdlib.h', 'stdio.h', 'sys/types.h']<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
os.name != 'nt':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
includes += ['inttypes.h']<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include_string = 
"\n".join(["#include &lt;%s&gt;" % i for i in includes])<BR>--- 13,23 
----<BR>&nbsp; from pypy.tool.gcc_cache import build_executable_cache<BR>&nbsp; 
<BR>&nbsp; def ask_gcc(question, add_source=""):<BR>!&nbsp;&nbsp;&nbsp;&nbsp; 
from pypy.translator.platform import platform<BR>!&nbsp;&nbsp;&nbsp;&nbsp; if 
platform.name == 'mingw32':<BR>!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
includes = ['stdlib.h', 'stdio.h', 'sys/types.h', 
'stdint.h']<BR>!&nbsp;&nbsp;&nbsp;&nbsp; 
else:<BR>!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includes = 
['stdlib.h', 'stdio.h', 'sys/types.h']<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
os.name != 'nt':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
includes += ['inttypes.h']<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include_string = 
"\n".join(["#include &lt;%s&gt;" % i for i in includes])<BR>diff -crN 
pypy-pypy-4a38b43757e3/pypy/translator/platform/posix.py 
pypy-pypy-4a38b43757e3.bookaa/pypy/translator/platform/posix.py<BR>*** 
pypy-pypy-4a38b43757e3/pypy/translator/platform/posix.py&nbsp;Tue May 22 
14:03:20 2012<BR>--- 
pypy-pypy-4a38b43757e3.bookaa/pypy/translator/platform/posix.py&nbsp;Sat May 26 
20:47:42 2012<BR>***************<BR>*** 55,60 ****<BR>--- 55,62 ----<BR>&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
relto:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
response_file = 
relto.bestrelpath(response_file)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if self.name == 
'mingw32':<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return ["-Wl,--export-all-symbols,--version-script=%s" % 
(response_file,)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return ["-Wl,--export-dynamic,--version-script=%s" % (response_file,)]<BR>&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def _link(self, cc, ofiles, link_args, 
standalone, exe_name):<BR></FONT></DIV>
<DIV><FONT face=Calibri></FONT>&nbsp;</DIV></DIV></BODY></HTML>