/* * READER */ static int parse_save_field(ReaderObj *self) { PyObject *field; field = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, (void *) self->field, self->field_len); if (field == NULL) return -1; self->field_len = 0; if (self->numeric_field) { PyObject *tmp; self->numeric_field = 0; tmp = PyNumber_Float(field); Py_DECREF(field); if (tmp == NULL) return -1; field = tmp; } if (PyList_Append(self->fields, field) < 0) { Py_DECREF(field); return -1; } Py_DECREF(field); return 0; }
/* Given a (sub)modulename, write the potential file path in the archive (without extension) to the path buffer. Return the length of the resulting string. return self.prefix + name.replace('.', os.sep) */ static PyObject* make_filename(PyObject *prefix, PyObject *name) { PyObject *pathobj; Py_UCS4 *p, *buf; Py_ssize_t len; len = PyUnicode_GET_LENGTH(prefix) + PyUnicode_GET_LENGTH(name) + 1; p = buf = PyMem_New(Py_UCS4, len); if (buf == NULL) { PyErr_NoMemory(); return NULL; } if (!PyUnicode_AsUCS4(prefix, p, len, 0)) { PyMem_Free(buf); return NULL; } p += PyUnicode_GET_LENGTH(prefix); len -= PyUnicode_GET_LENGTH(prefix); if (!PyUnicode_AsUCS4(name, p, len, 1)) { PyMem_Free(buf); return NULL; } for (; *p; p++) { if (*p == '.') *p = SEP; } pathobj = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, p-buf); PyMem_Free(buf); return pathobj; }
/* Given a path to a .pyc file in the archive, return the modification time of the matching .py file, or 0 if no source is available. */ static time_t get_mtime_of_source(ZipImporter *self, PyObject *path) { PyObject *toc_entry, *stripped; time_t mtime; /* strip 'c' or 'o' from *.py[co] */ if (PyUnicode_READY(path) == -1) return (time_t)-1; stripped = PyUnicode_FromKindAndData(PyUnicode_KIND(path), PyUnicode_DATA(path), PyUnicode_GET_LENGTH(path) - 1); if (stripped == NULL) return (time_t)-1; toc_entry = PyDict_GetItem(self->files, stripped); Py_DECREF(stripped); if (toc_entry != NULL && PyTuple_Check(toc_entry) && PyTuple_Size(toc_entry) == 8) { /* fetch the time stamp of the .py file for comparison with an embedded pyc time stamp */ int time, date; time = PyLong_AsLong(PyTuple_GetItem(toc_entry, 5)); date = PyLong_AsLong(PyTuple_GetItem(toc_entry, 6)); mtime = parse_dostime(time, date); } else mtime = 0; return mtime; }
// Convert a QString to a Python Unicode object. PyObject *qpycore_PyObject_FromQString(const QString &qstr) { PyObject *obj; #if defined(PYQT_PEP_393) obj = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, qstr.constData(), qstr.length()); #elif defined(Py_UNICODE_WIDE) #if QT_VERSION >= 0x040200 QVector<uint> ucs4 = qstr.toUcs4(); if ((obj = PyUnicode_FromUnicode(NULL, ucs4.size())) == NULL) return NULL; memcpy(PyUnicode_AS_UNICODE(obj), ucs4.constData(), ucs4.size() * sizeof (Py_UNICODE)); #else // Note that this code doesn't handle code points greater than 0xffff very // well. if ((obj = PyUnicode_FromUnicode(NULL, qstr.length())) == NULL) return NULL; Py_UNICODE *pyu = PyUnicode_AS_UNICODE(obj); for (int i = 0; i < qstr.length(); ++i) *pyu++ = (qstr.at(i)).unicode(); #endif #else if ((obj = PyUnicode_FromUnicode(NULL, qstr.length())) == NULL) return NULL; memcpy(PyUnicode_AS_UNICODE(obj), qstr.utf16(), qstr.length() * sizeof (Py_UNICODE)); #endif return obj; }
static PyObject * csv_writerow(WriterObj *self, PyObject *seq) { DialectObj *dialect = self->dialect; Py_ssize_t len, i; PyObject *line, *result; if (!PySequence_Check(seq)) return PyErr_Format(error_obj, "sequence expected"); len = PySequence_Length(seq); if (len < 0) return NULL; /* Join all fields in internal buffer. */ join_reset(self); for (i = 0; i < len; i++) { PyObject *field; int append_ok; int quoted; field = PySequence_GetItem(seq, i); if (field == NULL) return NULL; switch (dialect->quoting) { case QUOTE_NONNUMERIC: quoted = !PyNumber_Check(field); break; case QUOTE_ALL: quoted = 1; break; default: quoted = 0; break; } if (PyUnicode_Check(field)) { append_ok = join_append(self, field, "ed, len == 1); Py_DECREF(field); } else if (field == Py_None) { append_ok = join_append(self, NULL, "ed, len == 1); Py_DECREF(field); } else { PyObject *str; str = PyObject_Str(field); Py_DECREF(field); if (str == NULL) return NULL; append_ok = join_append(self, str, "ed, len == 1); Py_DECREF(str); } if (!append_ok) return NULL; } /* Add line terminator. */ if (!join_append_lineterminator(self)) return 0; line = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, (void *) self->rec, self->rec_len); if (line == NULL) return NULL; result = PyObject_CallFunctionObjArgs(self->writeline, line, NULL); Py_DECREF(line); return result; }
static PyObject * csv_writerow(WriterObj *self, PyObject *seq) { DialectObj *dialect = self->dialect; PyObject *iter, *field, *line, *result; iter = PyObject_GetIter(seq); if (iter == NULL) return PyErr_Format(_csvstate_global->error_obj, "iterable expected, not %.200s", seq->ob_type->tp_name); /* Join all fields in internal buffer. */ join_reset(self); while ((field = PyIter_Next(iter))) { int append_ok; int quoted; switch (dialect->quoting) { case QUOTE_NONNUMERIC: quoted = !PyNumber_Check(field); break; case QUOTE_ALL: quoted = 1; break; default: quoted = 0; break; } if (PyUnicode_Check(field)) { append_ok = join_append(self, field, quoted); Py_DECREF(field); } else if (field == Py_None) { append_ok = join_append(self, NULL, quoted); Py_DECREF(field); } else { PyObject *str; str = PyObject_Str(field); Py_DECREF(field); if (str == NULL) { Py_DECREF(iter); return NULL; } append_ok = join_append(self, str, quoted); Py_DECREF(str); } if (!append_ok) { Py_DECREF(iter); return NULL; } } Py_DECREF(iter); if (PyErr_Occurred()) return NULL; if (self->num_fields > 0 && self->rec_len == 0) { if (dialect->quoting == QUOTE_NONE) { PyErr_Format(_csvstate_global->error_obj, "single empty field record must be quoted"); return NULL; } self->num_fields--; if (!join_append(self, NULL, 1)) return NULL; } /* Add line terminator. */ if (!join_append_lineterminator(self)) return NULL; line = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, (void *) self->rec, self->rec_len); if (line == NULL) return NULL; result = PyObject_CallFunctionObjArgs(self->writeline, line, NULL); Py_DECREF(line); return result; }
static PyObject * _new_str_object(_PyCrossInterpreterData *data) { struct _shared_str_data *shared = (struct _shared_str_data *)(data->data); return PyUnicode_FromKindAndData(shared->kind, shared->buffer, shared->len); }