From 4e75e7f79601122313e83c4e8d22492492e970e2 Mon Sep 17 00:00:00 2001 From: Detlev Casanova Date: Fri, 9 Jul 2010 12:41:42 +0200 Subject: Add some methods to Overlay, fix some warnings --- src/interpreter.c | 4 ++++ src/overlay.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/overlay.h | 6 +++++- src/tester.c | 4 ++++ 4 files changed, 64 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/interpreter.c b/src/interpreter.c index e68f1a2..619a157 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -69,7 +69,9 @@ void freeList(PyObjectList *list, int deref) PyObjectListElem *tmp = node; node = node->next; if (deref) + { Py_DECREF(tmp->object); + } free(tmp); } @@ -173,7 +175,9 @@ PyObject *executeFunction(const char *module, const char *funcName, const char* PyObject *val = PyObject_CallObject(func, args); if (args != NULL) + { Py_DECREF(args); + } return val; } diff --git a/src/overlay.c b/src/overlay.c index 79fee08..74910f9 100644 --- a/src/overlay.c +++ b/src/overlay.c @@ -93,10 +93,61 @@ int overlayIsOfficial(Overlay *o) return (int) PyLong_AsLong(iso); } +int overlayIsSupported(Overlay *o) +{ + if (!o || !o->object) + return -1; + + PyObject *iss = PyObject_CallMethod(o->object, "is_supported", NULL); + + //TODO:Py_DECREF me ! + + return (int) PyLong_AsLong(iss); +} + +const char *overlayShortList(Overlay *o) +{ + if (!o || !o->object) + return NULL; + + PyObject *sl = PyObject_CallMethod(o->object, "short_list", NULL); + + //TODO:Py_DECREF me ! + + return PyBytes_AsString(sl); +} + +const char *overlayStr(Overlay *o) +{ + if (!o || !o->object) + return NULL; + + PyObject *str = PyObject_CallMethod(o->object, "str", NULL); + + //TODO:Py_DECREF me ! + + return PyBytes_AsString(str); +} + +const char *overlayToXml(Overlay *o) +{ + if (!o || !o->object) + return NULL; + + PyObject *element = PyObject_CallMethod(o->object, "to_xml", NULL); + PyObject *str = executeFunction("xml.etree.ElementTree", "tostring", "(O)", element); + + Py_DECREF(element); + + return PyBytes_AsString(str); +} + void overlayFree(Overlay *o) { if (o && o->object) + { Py_DECREF(o->object); + } if (o) free(o); } diff --git a/src/overlay.h b/src/overlay.h index 9125de0..2f64bde 100644 --- a/src/overlay.h +++ b/src/overlay.h @@ -6,9 +6,13 @@ typedef struct Overlay Overlay; Overlay* createOverlay(const char*, const char*, int, int); const char* overlayName(Overlay*); const char* overlayOwnerEmail(Overlay*); -int overlayPriority(Overlay*); const char* overlayDescription(Overlay*); +const char* overlayShortList(Overlay *o); +const char* overlayStr(Overlay *o); +const char* overlayToXml(Overlay *o); +int overlayPriority(Overlay*); int overlayIsOfficial(Overlay*); +int overlayIsSupported(Overlay *o); void overlayFree(Overlay*); #endif diff --git a/src/tester.c b/src/tester.c index 53e4776..40be2ff 100644 --- a/src/tester.c +++ b/src/tester.c @@ -3,6 +3,8 @@ int main(int argc, char *argv[]) { + argc = argc; + argv = argv; interpreterInit(); Overlay *o = createOverlay("Test", "", 1, 0); @@ -15,6 +17,8 @@ int main(int argc, char *argv[]) printf("Overlay name = %s, owner email : %s, description : %s, priority : %d, it is %sofficial.\n", overlayName(o), overlayOwnerEmail(o), overlayDescription(o), overlayPriority(o), overlayIsOfficial(o) ? "" : "not "); + printf("xml is %s\n", overlayToXml(o)); + interpreterFinalize(); return 0; -- cgit v1.2.3-1-g7c22