]> granicus.if.org Git - python/commitdiff
struct.unpack() allows a bytes string too (if it has the right size).
authorGuido van Rossum <guido@python.org>
Fri, 13 Apr 2007 03:33:53 +0000 (03:33 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 13 Apr 2007 03:33:53 +0000 (03:33 +0000)
Modules/_struct.c

index 3418c307be89f41f040dba8244d7679e044a61b9..5fc9991f9b9616123e8a325640e36820da4e254c 100644 (file)
@@ -1523,10 +1523,10 @@ fail:
 
 
 PyDoc_STRVAR(s_unpack__doc__,
-"S.unpack(str) -> (v1, v2, ...)\n\
+"S.unpack(buffer) -> (v1, v2, ...)\n\
 \n\
 Return tuple containing values unpacked according to this Struct's format.\n\
-Requires len(str) == self.size. See struct.__doc__ for more on format\n\
+Requires len(buffer) == self.size. See struct.__doc__ for more on format\n\
 strings.");
 
 static PyObject *
@@ -1535,6 +1535,10 @@ s_unpack(PyObject *self, PyObject *inputstr)
        PyStructObject *soself = (PyStructObject *)self;
        assert(PyStruct_Check(self));
        assert(soself->s_codes != NULL);
+       if (inputstr != NULL && PyBytes_Check(inputstr) &&
+           PyBytes_GET_SIZE(inputstr) == soself->s_size) {
+               return s_unpack_internal(soself, PyBytes_AS_STRING(inputstr));
+       }
        if (inputstr == NULL || !PyString_Check(inputstr) ||
                PyString_GET_SIZE(inputstr) != soself->s_size) {
                PyErr_Format(StructError,