Author: Ronan Lamy <ronan.l...@gmail.com> Branch: py3k Changeset: r87607:a6f5e346aab3 Date: 2016-10-06 04:14 +0100 http://bitbucket.org/pypy/pypy/changeset/a6f5e346aab3/
Log: Partial fix for Py_GetProgramName() not returning wchar_t* diff --git a/pypy/module/cpyext/pythonrun.py b/pypy/module/cpyext/pythonrun.py --- a/pypy/module/cpyext/pythonrun.py +++ b/pypy/module/cpyext/pythonrun.py @@ -8,7 +8,7 @@ def Py_IsInitialized(space): return 1 -@cpython_api([], rffi.CCHARP, error=CANNOT_FAIL) +@cpython_api([], rffi.CWCHARP, error=CANNOT_FAIL) def Py_GetProgramName(space): """ Return the program name set with Py_SetProgramName(), or the default. @@ -52,4 +52,3 @@ @cpython_api([], PyObject, error=CANNOT_FAIL) def PyThread_exit_thread(space): PyErr_SetNone(space, space.w_SystemExit) - diff --git a/pypy/module/cpyext/state.py b/pypy/module/cpyext/state.py --- a/pypy/module/cpyext/state.py +++ b/pypy/module/cpyext/state.py @@ -103,7 +103,8 @@ progname = space.str_w(argv0) else: progname = "pypy" - self.programname = rffi.str2charp(progname) + progname = progname.decode('ascii') # XXX: which encoding?? + self.programname = rffi.unicode2wcharp(progname) lltype.render_immortal(self.programname) return self.programname diff --git a/pypy/module/cpyext/test/test_cpyext.py b/pypy/module/cpyext/test/test_cpyext.py --- a/pypy/module/cpyext/test/test_cpyext.py +++ b/pypy/module/cpyext/test/test_cpyext.py @@ -801,14 +801,14 @@ mod = self.import_extension('foo', [ ('get_programname', 'METH_NOARGS', ''' - char* name1 = Py_GetProgramName(); - char* name2 = Py_GetProgramName(); + wchar_t* name1 = Py_GetProgramName(); + wchar_t* name2 = Py_GetProgramName(); if (name1 != name2) Py_RETURN_FALSE; - return PyUnicode_FromString(name1); + return PyUnicode_FromWideChar(name1, wcslen(name1)); ''' - ), - ]) + )], + prologue='#include <wchar.h>') p = mod.get_programname() print(p) assert 'py' in p _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit