Author: guido.van.rossum
Date: Wed Oct 31 17:41:08 2007
New Revision: 58730

Modified:
   python/branches/py3k-pep3137/Lib/test/test_bytes.py
   python/branches/py3k-pep3137/Objects/stringobject.c
Log:
Patch 1365 by Christian Heimes.
Implement str8(N) -> s'\0'*N, and a unit test for bytes(N) behavior.


Modified: python/branches/py3k-pep3137/Lib/test/test_bytes.py
==============================================================================
--- python/branches/py3k-pep3137/Lib/test/test_bytes.py (original)
+++ python/branches/py3k-pep3137/Lib/test/test_bytes.py Wed Oct 31 17:41:08 2007
@@ -50,6 +50,15 @@
         self.assertRaises(ValueError, bytes, [C(-1)])
         self.assertRaises(ValueError, bytes, [C(256)])
 
+    def test_from_ssize(self):
+        self.assertEqual(bytes(0), b'')
+        self.assertEqual(bytes(1), b'\x00')
+        self.assertEqual(bytes(5), b'\x00\x00\x00\x00\x00')
+        self.assertRaises(ValueError, bytes, -1)
+
+        self.assertEqual(bytes('0', 'ascii'), b'0')
+        self.assertEqual(bytes(b'0'), b'0')
+
     def test_constructor_type_errors(self):
         self.assertRaises(TypeError, bytes, 0.0)
         class C:

Modified: python/branches/py3k-pep3137/Objects/stringobject.c
==============================================================================
--- python/branches/py3k-pep3137/Objects/stringobject.c (original)
+++ python/branches/py3k-pep3137/Objects/stringobject.c Wed Oct 31 17:41:08 2007
@@ -2909,6 +2909,26 @@
                return NULL;
        }
 
+       /* Is it an int? */
+       size = PyNumber_AsSsize_t(x, PyExc_ValueError);
+       if (size == -1 && PyErr_Occurred()) {
+               PyErr_Clear();
+       }
+       else {
+               if (size < 0) {
+                       PyErr_SetString(PyExc_ValueError, "negative count");
+                       return NULL;
+               }
+               new = PyString_FromStringAndSize(NULL, size);
+               if (new == NULL) {
+                       return NULL;
+               }
+               if (size > 0) {
+                       memset(((PyStringObject*)new)->ob_sval, 0, size);
+               }
+               return new;
+       }
+
        /* Use the modern buffer interface */
        if (PyObject_CheckBuffer(x)) {
                Py_buffer view;
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to