diff options
Diffstat (limited to 'src/stringlist.c')
-rw-r--r-- | src/stringlist.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/stringlist.c b/src/stringlist.c new file mode 100644 index 0000000..dc2a45d --- /dev/null +++ b/src/stringlist.c @@ -0,0 +1,59 @@ +#include "stringlist.h" + +struct StringList +{ + char **list; + int count; +}; + +StringList* stringListCreate(size_t count) +{ + return NULL; +} + +StringList* listToCList(PyObject* list) +{ + if (!list || !PyList_Check(list)) + return NULL; + + int len = PyList_Size(list); + StringList *ret = malloc(sizeof(StringList)); + ret->count = len; + ret->list = malloc(sizeof(char*) * len); + + for (int i = 0; i < len; i++) + { + PyObject *elem = PyList_GetItem(list, i); + ret->list[i] = malloc(sizeof(char) * (PyBytes_Size(elem) + 1)); + strcpy(ret->list[i], PyBytes_AsString(elem)); + } + + return ret; +} + +PyObject* cListToPyList(StringList* list) +{ + if (!list) + return NULL; + + PyObject *ret = PyList_New(list->count); + for(int i = 0; i < list->count; i++) + { + PyList_Append(ret, PyBytes_FromString(list->list[i])); + } + + return ret; +} + +void stringListFree(StringList* list) +{ + if (!list) + return; + + for(int i = 0; i < list->count; i++) + { + free(list->list[i]); + } + + free(list); +} |