# 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
|