mirror of https://github.com/python/cpython
Merged revisions 54244 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk/Lib/ctypes ........ r54244 | thomas.heller | 2007-03-09 20:21:28 +0100 (Fr, 09 Mär 2007) | 3 lines Fix bug #1646630: ctypes.string_at(buf, 0) and ctypes.wstring_at(buf, 0) returned string up to the first NUL character. ........
This commit is contained in:
parent
e7881559f2
commit
f7eed5e2d1
|
@ -478,7 +478,7 @@ def cast(obj, typ):
|
||||||
return _cast(obj, obj, typ)
|
return _cast(obj, obj, typ)
|
||||||
|
|
||||||
_string_at = CFUNCTYPE(py_object, c_void_p, c_int)(_string_at_addr)
|
_string_at = CFUNCTYPE(py_object, c_void_p, c_int)(_string_at_addr)
|
||||||
def string_at(ptr, size=0):
|
def string_at(ptr, size=-1):
|
||||||
"""string_at(addr[, size]) -> string
|
"""string_at(addr[, size]) -> string
|
||||||
|
|
||||||
Return the string at addr."""
|
Return the string at addr."""
|
||||||
|
@ -490,7 +490,7 @@ except ImportError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
_wstring_at = CFUNCTYPE(py_object, c_void_p, c_int)(_wstring_at_addr)
|
_wstring_at = CFUNCTYPE(py_object, c_void_p, c_int)(_wstring_at_addr)
|
||||||
def wstring_at(ptr, size=0):
|
def wstring_at(ptr, size=-1):
|
||||||
"""wstring_at(addr[, size]) -> string
|
"""wstring_at(addr[, size]) -> string
|
||||||
|
|
||||||
Return the string at addr."""
|
Return the string at addr."""
|
||||||
|
|
|
@ -14,6 +14,7 @@ class MemFunctionsTest(unittest.TestCase):
|
||||||
self.failUnlessEqual(string_at(result), "Hello, World")
|
self.failUnlessEqual(string_at(result), "Hello, World")
|
||||||
self.failUnlessEqual(string_at(result, 5), "Hello")
|
self.failUnlessEqual(string_at(result, 5), "Hello")
|
||||||
self.failUnlessEqual(string_at(result, 16), "Hello, World\0\0\0\0")
|
self.failUnlessEqual(string_at(result, 16), "Hello, World\0\0\0\0")
|
||||||
|
self.failUnlessEqual(string_at(result, 0), "")
|
||||||
|
|
||||||
def test_memset(self):
|
def test_memset(self):
|
||||||
a = create_string_buffer(1000000)
|
a = create_string_buffer(1000000)
|
||||||
|
@ -54,6 +55,7 @@ class MemFunctionsTest(unittest.TestCase):
|
||||||
self.failUnlessEqual(wstring_at(a), "Hello, World")
|
self.failUnlessEqual(wstring_at(a), "Hello, World")
|
||||||
self.failUnlessEqual(wstring_at(a, 5), "Hello")
|
self.failUnlessEqual(wstring_at(a, 5), "Hello")
|
||||||
self.failUnlessEqual(wstring_at(a, 16), "Hello, World\0\0\0\0")
|
self.failUnlessEqual(wstring_at(a, 16), "Hello, World\0\0\0\0")
|
||||||
|
self.failUnlessEqual(wstring_at(a, 0), "")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -197,6 +197,9 @@ Extension Modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Fix bug #1646630: ctypes.string_at(buf, 0) and ctypes.wstring_at(buf, 0)
|
||||||
|
returned string up to the first NUL character.
|
||||||
|
|
||||||
- Bug #1637850: make_table in difflib did not work with unicode
|
- Bug #1637850: make_table in difflib did not work with unicode
|
||||||
|
|
||||||
- Bugs #1676321: the empty() function in sched.py returned the wrong result
|
- Bugs #1676321: the empty() function in sched.py returned the wrong result
|
||||||
|
|
|
@ -4531,9 +4531,9 @@ create_comerror(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_at(const char *ptr, Py_ssize_t size)
|
string_at(const char *ptr, int size)
|
||||||
{
|
{
|
||||||
if (size == 0)
|
if (size == -1)
|
||||||
return PyString_FromString(ptr);
|
return PyString_FromString(ptr);
|
||||||
return PyString_FromStringAndSize(ptr, size);
|
return PyString_FromStringAndSize(ptr, size);
|
||||||
}
|
}
|
||||||
|
@ -4618,7 +4618,7 @@ cast(void *ptr, PyObject *src, PyObject *ctype)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wstring_at(const wchar_t *ptr, int size)
|
wstring_at(const wchar_t *ptr, int size)
|
||||||
{
|
{
|
||||||
if (size == 0)
|
if (size == -1)
|
||||||
size = wcslen(ptr);
|
size = wcslen(ptr);
|
||||||
return PyUnicode_FromWideChar(ptr, size);
|
return PyUnicode_FromWideChar(ptr, size);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue