From 21211edf95dc667b22a66a595f9fe96e7fa0a56a Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Thu, 3 Jul 2008 10:50:08 +0000 Subject: [PATCH] Tweak python some more git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/branches/Branch-2.4@7297 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/src/dird/pythondir.c | 74 +++++++++++++-------------- bacula/src/filed/pythonfd.c | 97 ++++++++---------------------------- bacula/src/stored/pythonsd.c | 30 +++++------ 3 files changed, 72 insertions(+), 129 deletions(-) diff --git a/bacula/src/dird/pythondir.c b/bacula/src/dird/pythondir.c index c17606e2f4..241e79a3d3 100644 --- a/bacula/src/dird/pythondir.c +++ b/bacula/src/dird/pythondir.c @@ -1,16 +1,7 @@ -/* - * - * Bacula interface to Python for the Director - * - * Kern Sibbald, November MMIV - * - * Version $Id$ - * - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2006 Free Software Foundation Europe e.V. + Copyright (C) 2004-2008 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -34,6 +25,15 @@ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ +/* + * + * Bacula interface to Python for the Director + * + * Kern Sibbald, November MMIV + * + * Version $Id$ + * + */ #include "bacula.h" #include "dird.h" @@ -67,7 +67,7 @@ PyMethodDef JobMethods[] = { struct s_vars { const char *name; - char *fmt; + const char *fmt; }; /* Read-only variables */ @@ -138,78 +138,78 @@ PyObject *job_getattr(PyObject *self, char *attrname) } switch (i) { case 0: /* Job */ - return Py_BuildValue(getvars[i].fmt, jcr->job->hdr.name); + return Py_BuildValue((char *)getvars[i].fmt, jcr->job->hdr.name); case 1: /* level */ - return Py_BuildValue(getvars[i].fmt, job_level_to_str(jcr->JobLevel)); + return Py_BuildValue((char *)getvars[i].fmt, job_level_to_str(jcr->JobLevel)); case 2: /* type */ - return Py_BuildValue(getvars[i].fmt, job_type_to_str(jcr->JobType)); + return Py_BuildValue((char *)getvars[i].fmt, job_type_to_str(jcr->JobType)); case 3: /* JobId */ - return Py_BuildValue(getvars[i].fmt, jcr->JobId); + return Py_BuildValue((char *)getvars[i].fmt, jcr->JobId); case 4: /* Client */ - return Py_BuildValue(getvars[i].fmt, jcr->client->hdr.name); + return Py_BuildValue((char *)getvars[i].fmt, jcr->client->hdr.name); case 5: /* NumVols */ POOL_DBR pr; memset(&pr, 0, sizeof(pr)); bstrncpy(pr.Name, jcr->pool->hdr.name, sizeof(pr.Name)); if (db_get_pool_record(jcr, jcr->db, &pr)) { jcr->NumVols = pr.NumVols; - return Py_BuildValue(getvars[i].fmt, jcr->NumVols); + return Py_BuildValue((char *)getvars[i].fmt, jcr->NumVols); } else { bsnprintf(errmsg, sizeof(errmsg), _("Pool record not found.")); goto bail_out; } case 6: /* Pool */ - return Py_BuildValue(getvars[i].fmt, jcr->pool->name()); + return Py_BuildValue((char *)getvars[i].fmt, jcr->pool->name()); case 7: /* Storage */ if (jcr->wstore) { - return Py_BuildValue(getvars[i].fmt, jcr->wstore->name()); + return Py_BuildValue((char *)getvars[i].fmt, jcr->wstore->name()); } else if (jcr->rstore) { - return Py_BuildValue(getvars[i].fmt, jcr->rstore->name()); + return Py_BuildValue((char *)getvars[i].fmt, jcr->rstore->name()); } else { goto bail_out; } case 8: - return Py_BuildValue(getvars[i].fmt, jcr->catalog->name()); + return Py_BuildValue((char *)getvars[i].fmt, jcr->catalog->name()); case 9: /* MediaType */ if (jcr->wstore) { - return Py_BuildValue(getvars[i].fmt, jcr->wstore->media_type); + return Py_BuildValue((char *)getvars[i].fmt, jcr->wstore->media_type); } else if (jcr->rstore) { - return Py_BuildValue(getvars[i].fmt, jcr->rstore->media_type); + return Py_BuildValue((char *)getvars[i].fmt, jcr->rstore->media_type); } else { goto bail_out; } case 10: /* JobName */ - return Py_BuildValue(getvars[i].fmt, jcr->Job); + return Py_BuildValue((char *)getvars[i].fmt, jcr->Job); case 11: /* JobStatus */ buf[1] = 0; buf[0] = jcr->JobStatus; - return Py_BuildValue(getvars[i].fmt, buf); + return Py_BuildValue((char *)getvars[i].fmt, buf); case 12: /* Priority */ - return Py_BuildValue(getvars[i].fmt, jcr->JobPriority); + return Py_BuildValue((char *)getvars[i].fmt, jcr->JobPriority); case 13: - return Py_BuildValue(getvars[i].fmt, jcr->VolumeName); + return Py_BuildValue((char *)getvars[i].fmt, jcr->VolumeName); case 14: /* CatalogRes */ - return Py_BuildValue(getvars[i].fmt, + return Py_BuildValue((char *)getvars[i].fmt, jcr->catalog->db_name, jcr->catalog->db_address, jcr->catalog->db_user, jcr->catalog->db_password, jcr->catalog->db_socket, jcr->catalog->db_port, db_get_type()); case 15: /* JobErrors */ - return Py_BuildValue(getvars[i].fmt, jcr->JobErrors); + return Py_BuildValue((char *)getvars[i].fmt, jcr->JobErrors); case 16: /* JobFiles */ - return Py_BuildValue(getvars[i].fmt, jcr->JobFiles); + return Py_BuildValue((char *)getvars[i].fmt, jcr->JobFiles); case 17: /* SDJobFiles */ - return Py_BuildValue(getvars[i].fmt, jcr->SDJobFiles); + return Py_BuildValue((char *)getvars[i].fmt, jcr->SDJobFiles); case 18: /* SDErrors */ - return Py_BuildValue(getvars[i].fmt, jcr->SDErrors); + return Py_BuildValue((char *)getvars[i].fmt, jcr->SDErrors); case 19: /* FDJobStatus */ buf[1] = 0; buf[0] = jcr->FDJobStatus; - return Py_BuildValue(getvars[i].fmt, buf); + return Py_BuildValue((char *)getvars[i].fmt, buf); case 29: /* SDJobStatus */ buf[1] = 0; buf[0] = jcr->SDJobStatus; - return Py_BuildValue(getvars[i].fmt, buf); + return Py_BuildValue((char *)getvars[i].fmt, buf); } bsnprintf(errmsg, sizeof(errmsg), _("Attribute %s not found."), attrname); bail_out: @@ -253,13 +253,13 @@ int job_setattr(PyObject *self, char *attrname, PyObject *value) if (setvars[i].fmt != NULL) { switch (setvars[i].fmt[0]) { case 's': - if (!PyArg_Parse(value, setvars[i].fmt, &strval)) { + if (!PyArg_Parse(value, (char *)setvars[i].fmt, &strval)) { PyErr_SetString(PyExc_TypeError, _("Read-only attribute")); return -1; } break; case 'i': - if (!PyArg_Parse(value, setvars[i].fmt, &intval)) { + if (!PyArg_Parse(value, (char *)setvars[i].fmt, &intval)) { PyErr_SetString(PyExc_TypeError, _("Read-only attribute")); return -1; } @@ -459,7 +459,7 @@ int generate_job_event(JCR *jcr, const char *event) } bstrncpy(jcr->event, event, sizeof(jcr->event)); - result = PyObject_CallFunction(method, "O", Job); + result = PyObject_CallFunction(method, (char *)"O", Job); jcr->event[0] = 0; /* no event in progress */ if (result == NULL) { if (PyErr_Occurred()) { diff --git a/bacula/src/filed/pythonfd.c b/bacula/src/filed/pythonfd.c index 130f494e11..42f9ce26b7 100644 --- a/bacula/src/filed/pythonfd.c +++ b/bacula/src/filed/pythonfd.c @@ -1,16 +1,7 @@ -/* - * - * Bacula interface to Python for the File Daemon - * - * Kern Sibbald, March MMV - * - * Version $Id$ - * - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2006 Free Software Foundation Europe e.V. + Copyright (C) 2005-2008 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -34,6 +25,15 @@ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ +/* + * + * Bacula interface to Python for the File Daemon + * + * Kern Sibbald, March MMV + * + * Version $Id$ + * + */ #include "bacula.h" #include "filed.h" @@ -42,12 +42,6 @@ #undef _POSIX_C_SOURCE #include -/* External function pointers to be set */ -extern bool (*python_set_prog)(JCR *jcr, const char *prog); -extern int (*python_open)(BFILE *bfd, const char *fname, int flags, mode_t mode); -extern int (*python_close)(BFILE *bfd); -extern ssize_t (*python_read)(BFILE *bfd, void *buf, size_t count); - extern JCR *get_jcr_from_PyObject(PyObject *self); extern PyObject *find_method(PyObject *eventsObject, PyObject *method, @@ -64,15 +58,9 @@ PyMethodDef JobMethods[] = { }; -bool my_python_set_prog(JCR *jcr, const char *prog); -int my_python_open(BFILE *bfd, const char *fname, int flags, mode_t mode); -int my_python_close(BFILE *bfd); -ssize_t my_python_read(BFILE *bfd, void *buf, size_t count); - - struct s_vars { const char *name; - char *fmt; + const char *fmt; }; /* Read-only variables */ @@ -121,21 +109,21 @@ PyObject *job_getattr(PyObject *self, char *attrname) } switch (i) { case 0: /* FD's name */ - return Py_BuildValue(getvars[i].fmt, my_name); + return Py_BuildValue((char *)getvars[i].fmt, my_name); case 1: /* level */ - return Py_BuildValue(getvars[i].fmt, job_level_to_str(jcr->JobLevel)); + return Py_BuildValue((char *)getvars[i].fmt, job_level_to_str(jcr->JobLevel)); case 2: /* type */ - return Py_BuildValue(getvars[i].fmt, job_type_to_str(jcr->JobType)); + return Py_BuildValue((char *)getvars[i].fmt, job_type_to_str(jcr->JobType)); case 3: /* JobId */ - return Py_BuildValue(getvars[i].fmt, jcr->JobId); + return Py_BuildValue((char *)getvars[i].fmt, jcr->JobId); case 4: /* Client */ - return Py_BuildValue(getvars[i].fmt, jcr->client_name); + return Py_BuildValue((char *)getvars[i].fmt, jcr->client_name); case 5: /* JobName */ - return Py_BuildValue(getvars[i].fmt, jcr->Job); + return Py_BuildValue((char *)getvars[i].fmt, jcr->Job); case 6: /* JobStatus */ buf[1] = 0; buf[0] = jcr->JobStatus; - return Py_BuildValue(getvars[i].fmt, buf); + return Py_BuildValue((char *)getvars[i].fmt, buf); } bsnprintf(errmsg, sizeof(errmsg), _("Attribute %s not found."), attrname); bail_out: @@ -178,7 +166,7 @@ int job_setattr(PyObject *self, char *attrname, PyObject *value) } /* Get argument value ***FIXME*** handle other formats */ if (setvars[i].fmt != NULL) { - if (!PyArg_Parse(value, setvars[i].fmt, &strval)) { + if (!PyArg_Parse(value, (char *)setvars[i].fmt, &strval)) { PyErr_SetString(PyExc_TypeError, _("Read-only attribute")); return -1; } @@ -231,12 +219,6 @@ static PyObject *set_job_events(PyObject *self, PyObject *arg) Py_INCREF(eObject); jcr->Python_events = (void *)eObject; /* set new events */ - /* Set function pointers to call here */ - python_set_prog = my_python_set_prog; - python_open = my_python_open; - python_close = my_python_close; - python_read = my_python_read; - Py_INCREF(Py_None); return Py_None; } @@ -263,7 +245,7 @@ int generate_job_event(JCR *jcr, const char *event) } bstrncpy(jcr->event, event, sizeof(jcr->event)); - result = PyObject_CallFunction(method, "O", Job); + result = PyObject_CallFunction(method, (char *)"O", Job); jcr->event[0] = 0; /* no event in progress */ if (result == NULL) { if (PyErr_Occurred()) { @@ -282,45 +264,6 @@ bail_out: } -bool my_python_set_prog(JCR *jcr, const char *prog) -{ - PyObject *events = (PyObject *)jcr->Python_events; - BFILE *bfd = &jcr->ff->bfd; - char method[MAX_NAME_LENGTH]; - - if (!events) { - return false; - } - bstrncpy(method, prog, sizeof(method)); - bstrncat(method, "_", sizeof(method)); - bstrncat(method, "open", sizeof(method)); - bfd->pio.fo = find_method(events, bfd->pio.fo, method); - bstrncpy(method, prog, sizeof(method)); - bstrncat(method, "_", sizeof(method)); - bstrncat(method, "read", sizeof(method)); - bfd->pio.fr = find_method(events, bfd->pio.fr, method); - bstrncpy(method, prog, sizeof(method)); - bstrncat(method, "_", sizeof(method)); - bstrncat(method, "close", sizeof(method)); - bfd->pio.fc = find_method(events, bfd->pio.fc, method); - return bfd->pio.fo && bfd->pio.fr && bfd->pio.fc; -} - -int my_python_open(BFILE *bfd, const char *fname, int flags, mode_t mode) -{ - return -1; -} - -int my_python_close(BFILE *bfd) -{ - return 0; -} - -ssize_t my_python_read(BFILE *bfd, void *buf, size_t count) -{ - return -1; -} - #else /* Dummy if Python not configured */ diff --git a/bacula/src/stored/pythonsd.c b/bacula/src/stored/pythonsd.c index 52568c2222..e52693d823 100644 --- a/bacula/src/stored/pythonsd.c +++ b/bacula/src/stored/pythonsd.c @@ -59,7 +59,7 @@ PyMethodDef JobMethods[] = { struct s_vars { const char *name; - char *fmt; + const char *fmt; }; static struct s_vars getvars[] = { @@ -116,31 +116,31 @@ PyObject *job_getattr(PyObject *self, char *attrname) } switch (i) { case 0: /* Job */ - return Py_BuildValue(getvars[i].fmt, jcr->job_name); /* Non-unique name */ + return Py_BuildValue((char *)getvars[i].fmt, jcr->job_name); /* Non-unique name */ case 1: /* SD's name */ - return Py_BuildValue(getvars[i].fmt, my_name); + return Py_BuildValue((char *)getvars[i].fmt, my_name); case 2: /* level */ - return Py_BuildValue(getvars[i].fmt, job_level_to_str(jcr->JobLevel)); + return Py_BuildValue((char *)getvars[i].fmt, job_level_to_str(jcr->JobLevel)); case 3: /* type */ - return Py_BuildValue(getvars[i].fmt, job_type_to_str(jcr->JobType)); + return Py_BuildValue((char *)getvars[i].fmt, job_type_to_str(jcr->JobType)); case 4: /* JobId */ - return Py_BuildValue(getvars[i].fmt, jcr->JobId); + return Py_BuildValue((char *)getvars[i].fmt, jcr->JobId); case 5: /* Client */ - return Py_BuildValue(getvars[i].fmt, jcr->client_name); + return Py_BuildValue((char *)getvars[i].fmt, jcr->client_name); case 6: /* Pool */ - return Py_BuildValue(getvars[i].fmt, jcr->dcr->pool_name); + return Py_BuildValue((char *)getvars[i].fmt, jcr->dcr->pool_name); case 7: /* MediaType */ - return Py_BuildValue(getvars[i].fmt, jcr->dcr->media_type); + return Py_BuildValue((char *)getvars[i].fmt, jcr->dcr->media_type); case 8: /* JobName */ - return Py_BuildValue(getvars[i].fmt, jcr->Job); + return Py_BuildValue((char *)getvars[i].fmt, jcr->Job); case 9: /* JobStatus */ buf[1] = 0; buf[0] = jcr->JobStatus; - return Py_BuildValue(getvars[i].fmt, buf); + return Py_BuildValue((char *)getvars[i].fmt, buf); case 10: - return Py_BuildValue(getvars[i].fmt, jcr->dcr->VolumeName); + return Py_BuildValue((char *)getvars[i].fmt, jcr->dcr->VolumeName); case 11: - return Py_BuildValue(getvars[i].fmt, jcr->dcr->dev_name); + return Py_BuildValue((char *)getvars[i].fmt, jcr->dcr->dev_name); } bsnprintf(errmsg, sizeof(errmsg), _("Attribute %s not found."), attrname); bail_out: @@ -181,7 +181,7 @@ int job_setattr(PyObject *self, char *attrname, PyObject *value) } /* Get argument value ***FIXME*** handle other formats */ if (setvars[i].fmt != NULL) { - if (!PyArg_Parse(value, setvars[i].fmt, &strval)) { + if (!PyArg_Parse(value, (char *)setvars[i].fmt, &strval)) { PyErr_SetString(PyExc_TypeError, _("Read-only attribute")); return -1; } @@ -255,7 +255,7 @@ int generate_job_event(JCR *jcr, const char *event) } bstrncpy(jcr->event, event, sizeof(jcr->event)); - result = PyObject_CallFunction(method, "O", Job); + result = PyObject_CallFunction(method, (char *)"O", Job); jcr->event[0] = 0; /* no event in progress */ if (result == NULL) { if (PyErr_Occurred()) { -- 2.39.2