diff options
Diffstat (limited to 'plugins/pyoida/quirks.c')
| -rw-r--r-- | plugins/pyoida/quirks.c | 148 | 
1 files changed, 0 insertions, 148 deletions
| diff --git a/plugins/pyoida/quirks.c b/plugins/pyoida/quirks.c deleted file mode 100644 index 4dcae2c..0000000 --- a/plugins/pyoida/quirks.c +++ /dev/null @@ -1,148 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * quirks.c - transmission du type Python exact aux instances de PyObject - * - * Copyright (C) 2012 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 "quirks.h" - - - -#include <pyglib.h> -#include <pygobject.h> - - - - - - -/* Coordonnées insérées manuellement */ -typedef struct _PyGObjectData_fake -{ -    PyTypeObject *type;                     /* Type précis pour Python     */ -    GSList *closures;                       /* Supports d'appel            */ - -} PyGObjectData_fake; - - -/* Clef d'accès réservée */ -static GQuark pygobject_instance_data_key_fake = 0; - - - - - -static void pygobject_data_free_fake(PyGObjectData_fake *data) -{ -    PyGILState_STATE state;                 /* Etat interne de Python      */ -    GSList *iter;                           /* Boucle de parcours          */ - -    state = pyglib_gil_state_ensure(); - -    Py_DECREF(data->type); - -    pyg_begin_allow_threads; - -    for (iter = data->closures; iter; ) -    { -        /** -         * On obtient le lien avant la libération via -         * pygobject_unwatch_closure()... -         */ -        iter = iter->next; - -        g_closure_invalidate((GClosure *)iter->data); - -    } - -    pyg_end_allow_threads; - -    g_free(data); - -    pyglib_gil_state_release(state); - -} - - - -static PyGObjectData_fake *pygobject_data_new_fake(void) -{ -    PyGObjectData_fake *result;             /* Instance à retourner        */ - -    result = g_new0(PyGObjectData_fake, 1); - -    return result; - -} - - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : -                                                            * -*                                                                             * -*  Description : Définit les éléments immuables pour toute association.       * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -void pychrysalide_init_quirks(void) -{ -    pygobject_instance_data_key_fake = g_quark_from_static_string("PyGObject::instance-data"); - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : obj  = instance GLib crée en C.                              * -*                type = type de l'objet Python correspond.                    * -*                                                                             * -*  Description : Crée l'association précise attendue par Python-GObject.      * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -void pychrysalide_set_instance_data(GObject *obj, PyTypeObject *type) -{ -    PyGObjectData_fake *data; - -    data = g_object_get_qdata(obj, pygobject_instance_data_key_fake); - -    if (data == NULL) -    { -        data = pygobject_data_new_fake(); - -        data->type = type; -        Py_INCREF(type); - -        g_object_set_qdata_full(obj, pygobject_instance_data_key_fake, -                                data, (GDestroyNotify)pygobject_data_free_fake); - -    } - -} | 
