static PyObject *_internal_stream_load(PyObject *args, unsigned int blocking) { PyObject *decoder = NULL; PyObject *stream = NULL; PyObject *buffer = NULL; PyObject *result = NULL; #ifdef IS_PYTHON3 PyObject *bufferstring = NULL; #endif if (!PyArg_ParseTuple(args, "O", &stream)) { goto bad_type; } if (__read == NULL) { __read = PyUnicode_FromString("read"); } if (!PyObject_HasAttr(stream, __read)) { goto bad_type; } buffer = PyObject_CallMethodObjArgs(stream, __read, NULL); if (!buffer) return NULL; #ifdef IS_PYTHON3 bufferstring = PyUnicode_AsUTF8String(buffer); if (!bufferstring) return NULL; #endif decoder = PyObject_Call((PyObject *)(&YajlDecoderType), NULL, NULL); if (decoder == NULL) { return NULL; } #ifdef IS_PYTHON3 result = _internal_decode((_YajlDecoder *)decoder, PyBytes_AsString(bufferstring), PyBytes_Size(bufferstring)); Py_XDECREF(bufferstring); #else result = _internal_decode((_YajlDecoder *)decoder, PyString_AsString(buffer), PyString_Size(buffer)); #endif Py_XDECREF(decoder); Py_XDECREF(buffer); return result; bad_type: PyErr_SetObject(PyExc_TypeError, PyUnicode_FromString("Must pass a single stream object")); return NULL; }
PyObject *py_yajldecoder_decode(PYARGS) { _YajlDecoder *decoder = (_YajlDecoder *)(self); char *buffer = NULL; unsigned int buflen = 0; if (!PyArg_ParseTuple(args, "z#", &buffer, &buflen)) return NULL; if (!buflen) { PyErr_SetObject(PyExc_ValueError, PyUnicode_FromString("Cannot parse an empty buffer")); return NULL; } return _internal_decode(decoder, buffer, buflen); }
PyObject *py_yajldecoder_decode(PYARGS) { _YajlDecoder *decoder = (_YajlDecoder *)(self); char *buffer = NULL; PyObject *pybuffer = NULL; PyObject *result = NULL; Py_ssize_t buflen = 0; if (!PyArg_ParseTuple(args, "O", &pybuffer)) return NULL; Py_INCREF(pybuffer); if (PyUnicode_Check(pybuffer)) { if (!(result = PyUnicode_AsUTF8String(pybuffer))) { Py_DECREF(pybuffer); return NULL; } Py_DECREF(pybuffer); pybuffer = result; result = NULL; } if (PyString_Check(pybuffer)) { if (PyString_AsStringAndSize(pybuffer, &buffer, &buflen)) { Py_DECREF(pybuffer); return NULL; } } else { /* really seems like this should be a TypeError, but tests/unit.py:ErrorCasesTests.test_None disagrees */ Py_DECREF(pybuffer); PyErr_SetString(PyExc_ValueError, "string or unicode expected"); return NULL; } if (!buflen) { PyErr_SetObject(PyExc_ValueError, PyUnicode_FromString("Cannot parse an empty buffer")); return NULL; } result = _internal_decode(decoder, buffer, (unsigned int)buflen); Py_DECREF(pybuffer); return result; }
static PyObject *py_loads(PYARGS) { PyObject *decoder = NULL; PyObject *result = NULL; char *buffer = NULL; unsigned int buflen = 0; if (!PyArg_ParseTuple(args, "z#", &buffer, &buflen)) { return NULL; } decoder = PyObject_Call((PyObject *)(&YajlDecoderType), NULL, NULL); if (decoder == NULL) { return NULL; } result = _internal_decode((_YajlDecoder *)decoder, buffer, buflen); Py_XDECREF(decoder); return result; }