From bb323895ac2d8655d5f6c85d16eefea364017298 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Wed, 16 Apr 2025 14:15:00 +0200 Subject: Handle optional settings for secure storage properly. --- plugins/pychrysalide/convert.c | 31 +++++++++++++++++++++++++++++++ plugins/pychrysalide/convert.h | 3 +++ plugins/pychrysalide/glibext/secstorage.c | 9 +++++---- src/glibext/secstorage.c | 4 ++-- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/plugins/pychrysalide/convert.c b/plugins/pychrysalide/convert.c index c67c8ba..08866cb 100644 --- a/plugins/pychrysalide/convert.c +++ b/plugins/pychrysalide/convert.c @@ -87,3 +87,34 @@ int convert_to_gsettings(PyObject *arg, void *dst) return result; } + + +/****************************************************************************** +* * +* Paramètres : arg = argument quelconque à tenter de convertir. * +* dst = destination des valeurs récupérées en cas de succès. * +* * +* Description : Tente de convertir en instance GSettings ou NULL. * +* * +* Retour : Bilan de l'opération, voire indications supplémentaires. * +* * +* Remarques : - * +* * +******************************************************************************/ + +int convert_to_gsettings_or_none(PyObject *arg, void *dst) +{ + int result; /* Bilan à retourner */ + + if (arg == Py_None) + { + *((GSettings **)dst) = NULL; + result = 1; + } + + else + result = convert_to_gsettings(arg, dst); + + return result; + +} diff --git a/plugins/pychrysalide/convert.h b/plugins/pychrysalide/convert.h index 7bdf7da..86d7528 100644 --- a/plugins/pychrysalide/convert.h +++ b/plugins/pychrysalide/convert.h @@ -33,6 +33,9 @@ /* Tente de convertir en instance GSettings. */ int convert_to_gsettings(PyObject *, void *); +/* Tente de convertir en instance GSettings ou NULL. */ +int convert_to_gsettings_or_none(PyObject *, void *); + #endif /* _PLUGINS_PYCHRYSALIDE_CONVERT_H */ diff --git a/plugins/pychrysalide/glibext/secstorage.c b/plugins/pychrysalide/glibext/secstorage.c index b5adb7c..5935d29 100644 --- a/plugins/pychrysalide/glibext/secstorage.c +++ b/plugins/pychrysalide/glibext/secstorage.c @@ -106,14 +106,15 @@ static int py_secret_storage_init(PyObject *self, PyObject *args, PyObject *kwds "\n" \ "Instances can be created using the following constructor:\n" \ "\n" \ - " SecretStorage(settings)" \ + " SecretStorage(settings=None)" \ "\n" \ - "The *settings* arguement must point to a GSettings intance;" \ - " the main configuration settings are used by default." \ + "The *settings* arguement may point to a GSettings instance." \ + " This optional argument is mainly used for testing purpose;" \ + " the main configuration settings are used by default." settings = NULL; - ret = PyArg_ParseTuple(args, "|O&", convert_to_gsettings, &settings); + ret = PyArg_ParseTuple(args, "|O&", convert_to_gsettings_or_none, &settings); if (!ret) return -1; /* Initialisation d'un objet GLib */ diff --git a/src/glibext/secstorage.c b/src/glibext/secstorage.c index b118aa6..161214c 100644 --- a/src/glibext/secstorage.c +++ b/src/glibext/secstorage.c @@ -160,7 +160,7 @@ static void g_secret_storage_init(GSecretStorage *storage) static void g_secret_storage_dispose(GObject *object) { - GSecretStorage *storage; /* Gestion de stockage sécurisé*/ + GSecretStorage *storage; /* Version spécialisée */ storage = G_SECRET_STORAGE(object); @@ -185,7 +185,7 @@ static void g_secret_storage_dispose(GObject *object) static void g_secret_storage_finalize(GObject *object) { - GSecretStorage *storage; /* Gestion de stockage sécurisé*/ + GSecretStorage *storage; /* Version spécialisée */ storage = G_SECRET_STORAGE(object); -- cgit v0.11.2-87-g4458