[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.0.4-testing] Fix the error handling in acm.policy.
# HG changeset patch # User Ewan Mellor <ewan@xxxxxxxxxxxxx> # Date 1167744755 0 # Node ID c309f86fde0e3a4dfd5fda745a02e592e6c85560 # Parent d474fa3a08110fba65dc1401927601ee53627207 Fix the error handling in acm.policy. Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx> Based on xen-unstable changeset 13202:abcd545e7f4c0097c91f3b8f6fd046df6680bb93 --- tools/python/xen/lowlevel/acm/acm.c | 33 ++++++++++++++++++--------------- 1 files changed, 18 insertions(+), 15 deletions(-) diff -r d474fa3a0811 -r c309f86fde0e tools/python/xen/lowlevel/acm/acm.c --- a/tools/python/xen/lowlevel/acm/acm.c Tue Jan 02 10:57:50 2007 +0000 +++ b/tools/python/xen/lowlevel/acm/acm.c Tue Jan 02 13:32:35 2007 +0000 @@ -35,6 +35,8 @@ fprintf(stderr, "ERROR: " _m " (%d = %s) fprintf(stderr, "ERROR: " _m " (%d = %s)\n" , ## _a , \ errno, strerror(errno)) +static PyObject *acm_error_obj; + /* generic shared function */ void * __getssid(int domid, uint32_t *buflen) { @@ -80,28 +82,26 @@ static PyObject *policy(PyObject * self, { /* out */ char *policyreference; - PyObject *ret = NULL; + PyObject *ret; void *ssid_buffer; uint32_t buf_len; if (!PyArg_ParseTuple(args, "", NULL)) { - goto out1; + return NULL; } ssid_buffer = __getssid(0, &buf_len); - if (ssid_buffer == NULL) { - goto out1; - } else if (buf_len < sizeof(struct acm_ssid_buffer)) { - goto out2; - } else { + if (ssid_buffer == NULL || buf_len < sizeof(struct acm_ssid_buffer)) { + free(ssid_buffer); + return PyErr_SetFromErrno(acm_error_obj); + } + else { struct acm_ssid_buffer *ssid = (struct acm_ssid_buffer *)ssid_buffer; policyreference = (char *)(ssid_buffer + ssid->policy_reference_offset + sizeof (struct acm_policy_reference_buffer)); - } - ret = Py_BuildValue("s", policyreference); - out2: - free(ssid_buffer); - out1: - return ret; + ret = Py_BuildValue("s", policyreference); + free(ssid_buffer); + return ret; + } } @@ -213,5 +213,8 @@ static PyMethodDef acmMethods[] = { /* inits */ PyMODINIT_FUNC initacm(void) { - Py_InitModule("acm", acmMethods); -} + PyObject *m = Py_InitModule("acm", acmMethods); + acm_error_obj = PyErr_NewException("acm.Error", PyExc_RuntimeError, NULL); + Py_INCREF(acm_error_obj); + PyModule_AddObject(m, "Error", acm_error_obj); +} _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |