diff options
Diffstat (limited to 'plugins/pyoida/analysis/exporter.c')
-rw-r--r-- | plugins/pyoida/analysis/exporter.c | 284 |
1 files changed, 0 insertions, 284 deletions
diff --git a/plugins/pyoida/analysis/exporter.c b/plugins/pyoida/analysis/exporter.c deleted file mode 100644 index 8c49542..0000000 --- a/plugins/pyoida/analysis/exporter.c +++ /dev/null @@ -1,284 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * exporter.c - équivalent Python du fichier "analysis/exporter.h" - * - * Copyright (C) 2010 Cyrille Bagard - * - * This file is part of OpenIDA. - * - * OpenIDA is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * OpenIDA is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - - -#include "exporter.h" - - -#include <fcntl.h> -#include <stdio.h> -#include <unistd.h> - - -#include "exporter-int.h" -#include "../analysis/roptions.h" - - - - -#define PY_EXPORT_TEXT_BUFLEN 64 - - -/* Crée un nouvel objet Python de type 'py_exporter'. */ -static PyObject *py_exporter_new(PyTypeObject *, PyObject *, PyObject *); - - - - -/* Fournit le texte correspondant à un contenu rendu. */ -static PyObject *py_exporter_get_text(py_exporter *, PyObject *); - - - - - -/****************************************************************************** -* * -* Paramètres : type = type de l'objet à instancier. * -* args = arguments fournis à l'appel. * -* kwds = arguments de type key=val fournis. * -* * -* Description : Crée un nouvel objet Python de type 'py_exporter'. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_exporter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ - py_exporter *result; /* Instance à retourner */ - - result = (py_exporter *)type->tp_alloc(type, 0); - - return (PyObject *)result; - -} - - -/****************************************************************************** -* * -* Paramètres : exporter = objet GLib existant à transposer. * -* * -* Description : Crée un nouvel objet Python de type 'py_exporter'. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -PyObject *py_exporter_new_from_existing(GContentExporter *exporter) -{ - py_exporter *result; /* Instance à retourner */ - PyTypeObject *type; /* Type Python à instancier */ - - result = (py_exporter *)g_object_get_data(G_OBJECT(exporter), "python_object"); - - if (result == NULL) - { - type = get_analysis_exporter_type(); - - result = (py_exporter *)type->tp_alloc(type, 0); - - result->glib = exporter; - g_object_ref(exporter); - - g_object_set_data(G_OBJECT(exporter), "python_object", result); - - } - else Py_INCREF((PyObject *)result); - - return (PyObject *)result; - -} - - - - - -/****************************************************************************** -* * -* Paramètres : self = instance manipulée à traiter. * -* args = arguments fournis à l'appel. * -* * -* Description : Fournit le texte correspondant à un contenu rendu. * -* * -* Retour : Chaîne de caractères Python. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_exporter_get_text(py_exporter *self, PyObject *args) -{ - PyObject *result; /* Liste à retourner */ - PyObject *roptions; /* Options de rendu jointes */ - int ret; /* Bilan de lecture des args. */ - GRenderingOptions *_roptions; /* Version GLib des options */ - int fd[2]; /* Tube pour récupérer le code */ - FILE *stream; /* Flux (ré)ouvert en écriture */ - char buffer[PY_EXPORT_TEXT_BUFLEN]; /* Tampon pour la lecture */ - ssize_t len; /* Nombre de caractères lus */ - PyObject *src; /* Source ajoutée au résultat */ - - ret = PyArg_ParseTuple(args, "O", &roptions); - if (!ret) return Py_None; - - _roptions = py_rendering_options_get_glib_instance(roptions); - - result = Py_None; - - ret = pipe2(fd, O_NONBLOCK); - //if (ret ... perror("pipe"); goto pegt_pipe_error; - - - stream = fdopen(fd[1], "w"); - if (stream == NULL) - { - perror("stream"); - goto pegt_stream_error; - } - - g_content_exporter_add_text(self->glib, _roptions, MRD_BLOCK/* FIXME*/, stream); - fflush(stream); - - do - { - memset(buffer, 0, PY_EXPORT_TEXT_BUFLEN); - len = read(fd[0], buffer, PY_EXPORT_TEXT_BUFLEN); - - src = PyString_FromString(buffer); - - if (result == Py_None) result = src; - else PyString_ConcatAndDel(&result, src); - - } - while (len > 0); - - fclose(stream); - - pegt_stream_error: - - close(fd[0]); - //close(fd[1]); - - pegt_pipe_error: - - return result; - -} - - - - - - - - - - - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Fournit le type d'objet 'analysis.exporter' pour Python. * -* * -* Retour : Adresse du type vivant à manipuler. * -* * -* Remarques : - * -* * -******************************************************************************/ - -PyTypeObject *get_analysis_exporter_type(void) -{ - static PyTypeObject *result = NULL; /* Type pour objet à retourner */ - - static PyMethodDef py_exporter_methods[] = { - { - "get_text", (PyCFunction)py_exporter_get_text, - METH_VARARGS, - "Provide the text version of the rendered content." - }, - { NULL } - }; - - static PyGetSetDef py_exporter_getset[] = { - { NULL } - }; - - static PyTypeObject py_exporter_type = { - - PyObject_HEAD_INIT(NULL) - - .tp_name = "pyoida.analysis.Exporter", - .tp_basicsize = sizeof(py_exporter), - - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - - .tp_doc = "PyOIDA exporter interface", - - .tp_methods = py_exporter_methods, - .tp_getset = py_exporter_getset, - .tp_new = (newfunc)py_exporter_new - - }; - - if (result == NULL) result = &py_exporter_type; - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : module = module dont la définition est à compléter. * -* * -* Description : Ajoute l'objet 'analysis.exporter' au module Python. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool add_analysis_exporter_to_python_module(PyObject *module) -{ - PyTypeObject *py_exporter_type; /* Type défini pour Python */ - int ret; /* Bilan d'un appel */ - - py_exporter_type = get_analysis_exporter_type(); - - if (PyType_Ready(py_exporter_type) < 0) - return false; - - Py_INCREF(py_exporter_type); - ret = PyModule_AddObject(module, "Exporter", (PyObject *)py_exporter_type); - - return (ret == 0); - -} |