diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2024-11-02 22:03:25 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2024-11-02 22:03:25 (GMT) |
commit | 1bef27ee10a820ceabdcfc6389e61b7fab934eea (patch) | |
tree | 2194de32593137d3bfda7256c1e65cb1743e70db | |
parent | 699e2811a9305f871fe9adcb4797461e947cc863 (diff) |
Load UI plugins only in case of graphical support.
-rw-r--r-- | plugins/pychrysalide/core.c | 6 | ||||
-rw-r--r-- | plugins/pychrysalide/core/Makefile.am | 3 | ||||
-rw-r--r-- | plugins/pychrysalide/core/module.c | 2 | ||||
-rw-r--r-- | plugins/pychrysalide/core/nox.c | 110 | ||||
-rw-r--r-- | plugins/pychrysalide/core/nox.h | 39 | ||||
-rw-r--r-- | src/core/Makefile.am | 1 | ||||
-rw-r--r-- | src/core/core.c | 1 | ||||
-rw-r--r-- | src/core/nox.c | 62 | ||||
-rw-r--r-- | src/core/nox.h | 37 | ||||
-rw-r--r-- | src/gui/core/Makefile.am | 1 | ||||
-rw-r--r-- | src/gui/core/core.c | 1 | ||||
-rw-r--r-- | src/gui/core/nox.c | 48 | ||||
-rw-r--r-- | src/gui/core/nox.h | 37 | ||||
-rw-r--r-- | src/plugins/pglist.c | 21 |
14 files changed, 365 insertions, 4 deletions
diff --git a/plugins/pychrysalide/core.c b/plugins/pychrysalide/core.c index 8510d78..a4de749 100644 --- a/plugins/pychrysalide/core.c +++ b/plugins/pychrysalide/core.c @@ -61,8 +61,8 @@ #include "analysis/module.h" #include "arch/module.h" #include "common/module.h" +#include "core/module.h" #include "glibext/module.h" -/* #include "core/module.h" */ /* #include "debug/module.h" */ /* #include "format/module.h" */ /* #ifdef INCLUDE_GTK_SUPPORT */ @@ -647,8 +647,8 @@ PyMODINIT_FUNC PyInit_pychrysalide(void) if (status) status = add_arch_module(result); if (status) status = add_common_module(result); if (status) status = add_glibext_module(result); - /* if (status) status = add_core_module(result); + /* if (status) status = add_debug_module(result); if (status) status = add_format_module(result); #ifdef INCLUDE_GTK_SUPPORT @@ -670,8 +670,8 @@ PyMODINIT_FUNC PyInit_pychrysalide(void) if (status) status = populate_arch_module(); if (status) status = populate_glibext_module(); if (status) status = populate_common_module(); - /* if (status) status = populate_core_module(); + /* if (status) status = populate_debug_module(); if (status) status = populate_format_module(); #ifdef INCLUDE_GTK_SUPPORT diff --git a/plugins/pychrysalide/core/Makefile.am b/plugins/pychrysalide/core/Makefile.am index a50324a..5588c9f 100644 --- a/plugins/pychrysalide/core/Makefile.am +++ b/plugins/pychrysalide/core/Makefile.am @@ -14,7 +14,8 @@ noinst_LTLIBRARIES = libpychrysacore.la libpychrysacore_la_SOURCES = \ constants.h constants.c \ logs.h logs.c \ - module.h module.c + module.h module.c \ + nox.h nox.c libpychrysacore_la_CFLAGS = $(TOOLKIT_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_INTERPRETER_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \ -I$(top_srcdir)/src -DNO_IMPORT_PYGOBJECT diff --git a/plugins/pychrysalide/core/module.c b/plugins/pychrysalide/core/module.c index b588057..4af0403 100644 --- a/plugins/pychrysalide/core/module.c +++ b/plugins/pychrysalide/core/module.c @@ -31,6 +31,7 @@ //#include "demanglers.h" //#include "global.h" #include "logs.h" +#include "nox.h" //#include "params.h" //#include "processors.h" //#include "queue.h" @@ -105,6 +106,7 @@ bool populate_core_module(void) //if (result) result = populate_core_module_with_demanglers(); //if (result) result = populate_core_module_with_global(); if (result) result = populate_core_module_with_logs(); + if (result) result = populate_core_module_with_nox(); //if (result) result = populate_core_module_with_params(); //if (result) result = populate_core_module_with_processors(); //if (result) result = populate_core_module_with_queue(); diff --git a/plugins/pychrysalide/core/nox.c b/plugins/pychrysalide/core/nox.c new file mode 100644 index 0000000..46a4847 --- /dev/null +++ b/plugins/pychrysalide/core/nox.c @@ -0,0 +1,110 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * nox.c - équivalent Python du fichier "core/nox.c" + * + * Copyright (C) 2024 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide 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. + * + * Chrysalide 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 "nox.h" + + +#include <pygobject.h> + + +#include <core/nox.h> +#include <plugins/self.h> + + +#include "../access.h" +#include "../helpers.h" + + + +/* Indique la présence ou l'absence d'un affichage graphique. */ +static PyObject *py_nox_run_in_nox_mode(PyObject *, PyObject *); + + + +/****************************************************************************** +* * +* Paramètres : self = objet Python concerné par l'appel. * +* args = arguments fournis à l'appel. * +* * +* Description : Indique la présence ou l'absence d'un affichage graphique. * +* * +* Retour : Statut à transmettre. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_nox_run_in_nox_mode(PyObject *self, PyObject *args) +{ + PyObject *result; /* Conversion à retourner */ + bool status; /* Statut à retransmettre */ + +#define NOX_RUN_IN_NOX_MODE_METHOD PYTHON_METHOD_DEF \ +( \ + run_in_nox_mode, "", \ + METH_NOARGS, py_nox, \ + "Tell if Chrysalide runs with a graphical support or not." \ + "\n" \ + "The result is a boolean status: *True* in case of terminal only mode." \ +) + + status = run_in_nox_mode(); + + result = status ? Py_True : Py_False; + Py_INCREF(result); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Définit une extension du module 'core' à compléter. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool populate_core_module_with_nox(void) +{ + bool result; /* Bilan à retourner */ + PyObject *module; /* Module à recompléter */ + + static PyMethodDef py_nox_methods[] = { + NOX_RUN_IN_NOX_MODE_METHOD, + { NULL } + }; + + module = get_access_to_python_module("pychrysalide.core"); + + result = register_python_module_methods(module, py_nox_methods); + + return result; + +} diff --git a/plugins/pychrysalide/core/nox.h b/plugins/pychrysalide/core/nox.h new file mode 100644 index 0000000..042f5a8 --- /dev/null +++ b/plugins/pychrysalide/core/nox.h @@ -0,0 +1,39 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * nox.h - prototypes pour l'équivalent Python du fichier "core/nox.h" + * + * Copyright (C) 2024 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide 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. + * + * Chrysalide 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 + */ + + +#ifndef _PLUGINS_PYCHRYSALIDE_CORE_NOX_H +#define _PLUGINS_PYCHRYSALIDE_CORE_NOX_H + + +#include <Python.h> +#include <stdbool.h> + + + +/* Définit une extension du module 'core' à compléter. */ +bool populate_core_module_with_nox(void); + + + +#endif /* _PLUGINS_PYCHRYSALIDE_CORE_NOX_H */ diff --git a/src/core/Makefile.am b/src/core/Makefile.am index de34d03..e1e3c4e 100644 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -18,6 +18,7 @@ libcore4_la_SOURCES = \ core.h core.c \ global.h global.c \ logs.h logs.c \ + nox.h nox.c \ nproc.h nproc.c \ paths.h paths.c diff --git a/src/core/core.c b/src/core/core.c index 1f40cb3..9514ee1 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -32,6 +32,7 @@ static AvailableCoreComponent __loaded = ACC_NONE; + /****************************************************************************** * * * Paramètres : flags = liste d'éléments à charger. * diff --git a/src/core/nox.c b/src/core/nox.c new file mode 100644 index 0000000..ccf9de2 --- /dev/null +++ b/src/core/nox.c @@ -0,0 +1,62 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * nox.c - indication de présence ou d'absence de support graphique + * + * Copyright (C) 2024 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide 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. + * + * Chrysalide 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 Chrysalide. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "nox.h" + + +#include <stddef.h> + + +#include "../common/compiler.h" + + + +/* Indique la présence ou l'absence d'un affichage graphique. */ +__weak bool _run_in_nox_mode(void); + + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Indique la présence ou l'absence d'un affichage graphique. * +* * +* Retour : Statut à transmettre. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool run_in_nox_mode(void) +{ + bool result; /* Statut à retournr */ + + if (_run_in_nox_mode == NULL) + result = true; + else + result = _run_in_nox_mode(); + + return result; + +} diff --git a/src/core/nox.h b/src/core/nox.h new file mode 100644 index 0000000..c2c225d --- /dev/null +++ b/src/core/nox.h @@ -0,0 +1,37 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * nox.h - prototypes pour l'indication de présence ou d'absence de support graphique + * + * Copyright (C) 2024 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide 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. + * + * Chrysalide 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 Chrysalide. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef _CORE_NOX_H +#define _CORE_NOX_H + + +#include <stdbool.h> + + + +/* Indique la présence ou l'absence d'un affichage graphique. */ +bool run_in_nox_mode(void); + + + +#endif /* _CORE_NOX_H */ diff --git a/src/gui/core/Makefile.am b/src/gui/core/Makefile.am index 3c4cbc7..a854977 100644 --- a/src/gui/core/Makefile.am +++ b/src/gui/core/Makefile.am @@ -24,6 +24,7 @@ libguicore_la_CFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) libguicore4_la_SOURCES = \ core.h core.c \ logs.h logs.c \ + nox.h nox.c \ panels.h panels.c libguicore4_la_CFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) diff --git a/src/gui/core/core.c b/src/gui/core/core.c index d02d54c..4a6809c 100644 --- a/src/gui/core/core.c +++ b/src/gui/core/core.c @@ -33,6 +33,7 @@ static AvailableGuiComponent __loaded = AGC_NONE; + /****************************************************************************** * * * Paramètres : flags = liste d'éléments à charger. * diff --git a/src/gui/core/nox.c b/src/gui/core/nox.c new file mode 100644 index 0000000..7f3ae1f --- /dev/null +++ b/src/gui/core/nox.c @@ -0,0 +1,48 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * nox.c - indication de présence ou d'absence de support graphique + * + * Copyright (C) 2024 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide 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. + * + * Chrysalide 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 Chrysalide. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "nox.h" + + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Indique la présence ou l'absence d'un affichage graphique. * +* * +* Retour : Statut à transmettre. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool _run_in_nox_mode(void) +{ + bool result; /* Statut à retournr */ + + result = false; + + return result; + +} diff --git a/src/gui/core/nox.h b/src/gui/core/nox.h new file mode 100644 index 0000000..e03b365 --- /dev/null +++ b/src/gui/core/nox.h @@ -0,0 +1,37 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * nox.h - prototypes pour l'indication de présence ou d'absence de support graphique + * + * Copyright (C) 2024 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide 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. + * + * Chrysalide 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 Chrysalide. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef _GUI_CORE_NOX_H +#define _GUI_CORE_NOX_H + + +#include <stdbool.h> + + + +/* Indique la présence ou l'absence d'un affichage graphique. */ +bool _run_in_nox_mode(void); + + + +#endif /* _GUI_CORE_NOX_H */ diff --git a/src/plugins/pglist.c b/src/plugins/pglist.c index 6b36d2f..e4cb825 100644 --- a/src/plugins/pglist.c +++ b/src/plugins/pglist.c @@ -39,6 +39,7 @@ #include "plugin-int.h" #include "../common/extstr.h" #include "../core/logs.h" +#include "../core/nox.h" #include "../core/paths.h" @@ -255,6 +256,7 @@ static void browse_directory_for_plugins(const char *dir) { struct dirent **namelist; /* Eléments trouvés */ int ret; /* Bilan du parcours */ + bool nox; /* Absence de support graphique*/ char *filename; /* Elément à ausculter */ GPluginModule *plugin; /* Greffon à intégrer ou pas */ @@ -265,8 +267,27 @@ static void browse_directory_for_plugins(const char *dir) return; } + nox = run_in_nox_mode(); + while (ret--) { + + if (nox) + { +#ifdef _WIN32 +# define UI_SHARED_SUFFIX "-ui.dll" +#else +# define UI_SHARED_SUFFIX "-ui.so" +#endif + + if (strstr(namelist[ret]->d_name, UI_SHARED_SUFFIX) != NULL) + { + log_variadic_message(LMT_ERROR, _("Skipping unsuitable file: %s"), namelist[ret]->d_name); + continue; + } + + } + filename = (char *)calloc(strlen(dir) + 1 + strlen(namelist[ret]->d_name) + 1, sizeof(char)); strcpy(filename, dir); |