forked from GitHub/gf-core
functionsByCat now supports strings containing \0
This commit is contained in:
@@ -2866,7 +2866,9 @@ static PyObject*
|
|||||||
PGF_getAbstractName(PGFObject *self, void *closure)
|
PGF_getAbstractName(PGFObject *self, void *closure)
|
||||||
{
|
{
|
||||||
PgfText* txt = pgf_abstract_name(self->pgf);
|
PgfText* txt = pgf_abstract_name(self->pgf);
|
||||||
return PyString_FromStringAndSize(txt->text, txt->size);
|
PyObject *name = PyString_FromStringAndSize(txt->text, txt->size);
|
||||||
|
free(txt);
|
||||||
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
// static void
|
// static void
|
||||||
@@ -2967,16 +2969,13 @@ pgf_collect_cats(PgfItor* fn, PgfText* key, void* value, PgfExn *err)
|
|||||||
py_name = PyString_FromStringAndSize(name->text, name->size);
|
py_name = PyString_FromStringAndSize(name->text, name->size);
|
||||||
if (py_name == NULL) {
|
if (py_name == NULL) {
|
||||||
err->type = PGF_EXN_OTHER_ERROR;
|
err->type = PGF_EXN_OTHER_ERROR;
|
||||||
goto end;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
|
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
|
||||||
err->type = PGF_EXN_OTHER_ERROR;
|
err->type = PGF_EXN_OTHER_ERROR;
|
||||||
goto end;
|
Py_DECREF(py_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
|
||||||
Py_XDECREF(py_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
@@ -3028,16 +3027,12 @@ pgf_collect_funs(PgfItor* fn, PgfText* key, void* value, PgfExn *err)
|
|||||||
py_name = PyString_FromStringAndSize(name->text, name->size);
|
py_name = PyString_FromStringAndSize(name->text, name->size);
|
||||||
if (py_name == NULL) {
|
if (py_name == NULL) {
|
||||||
err->type = PGF_EXN_OTHER_ERROR;
|
err->type = PGF_EXN_OTHER_ERROR;
|
||||||
goto end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
|
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
|
||||||
err->type = PGF_EXN_OTHER_ERROR;
|
err->type = PGF_EXN_OTHER_ERROR;
|
||||||
goto end;
|
Py_DECREF(py_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
|
||||||
Py_XDECREF(py_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
@@ -3061,15 +3056,14 @@ PGF_getFunctions(PGFObject *self, void *closure)
|
|||||||
static PyObject*
|
static PyObject*
|
||||||
PGF_functionsByCat(PGFObject* self, PyObject *args)
|
PGF_functionsByCat(PGFObject* self, PyObject *args)
|
||||||
{
|
{
|
||||||
const char* c;
|
const char* s;
|
||||||
if (!PyArg_ParseTuple(args, "s", &c))
|
Py_ssize_t size;
|
||||||
|
if (!PyArg_ParseTuple(args, "s#", &s, &size))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
const size_t s = strlen(c);
|
PgfText* catname = (PgfText*) alloca(sizeof(PgfText)+size+1);
|
||||||
|
memcpy(catname->text, s, size+1);
|
||||||
PgfText* catname = (PgfText*) alloca(sizeof(PgfText)+s);
|
catname->size = size;
|
||||||
strcpy(catname->text, c);
|
|
||||||
catname->size = s;
|
|
||||||
|
|
||||||
PyObject* functions = PyList_New(0);
|
PyObject* functions = PyList_New(0);
|
||||||
if (functions == NULL) {
|
if (functions == NULL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user