From 81a4be1d7f2621a899c23db6243ce5aefddbbe93 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Fri, 28 Jul 2017 11:57:35 +0200 Subject: Replaced the deprecated readdir_r() function by readdir() calls. --- ChangeLog | 8 ++++++++ plugins/pychrysa/pychrysa.c | 30 ++++++++++++++++++++---------- src/common/xdg.c | 16 +++++++++++++++- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index d11ea68..e11a601 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +17-07-28 Cyrille Bagard + + * plugins/pychrysa/pychrysa.c: + Replace the deprecated readdir_r() function by readdir() calls. + + * src/common/xdg.c: + Set and check errno when using readdir(). + 17-07-27 Cyrille Bagard * plugins/pychrysa/arch/instruction.c: diff --git a/plugins/pychrysa/pychrysa.c b/plugins/pychrysa/pychrysa.c index f09c234..f959671 100644 --- a/plugins/pychrysa/pychrysa.c +++ b/plugins/pychrysa/pychrysa.c @@ -24,6 +24,7 @@ #include "pychrysa.h" +#include #include #include #include @@ -485,9 +486,7 @@ static bool load_python_plugins(GPluginModule *plugin, GObject *ref) char *save; /* Sauvegarde pour ré-entrance */ char *path; /* Chemin à fouiller */ DIR *dir; /* Répertoire à parcourir */ - struct dirent entry; /* Elément trouvé */ - struct dirent *next; /* Prochain élément fourni */ - int ret; /* Bilan d'un appel système */ + struct dirent *entry; /* Elément trouvé */ char *modname; /* Nom du module pour Python */ char *filename; /* Chemin d'accès reconstruit */ GPluginModule *pyplugin; /* Lien vers un grffon Python */ @@ -511,20 +510,31 @@ static bool load_python_plugins(GPluginModule *plugin, GObject *ref) _("Looking for Python plugins in '%s'..."), path); - for (ret = readdir_r(dir, &entry, &next); - ret == 0 && next != NULL; - ret = readdir_r(dir, &entry, &next)) + while (1) { - if (entry.d_type != DT_DIR) continue; - if (entry.d_name[0] == '.') continue; + errno = 0; - modname = strdup(entry.d_name); + entry = readdir(dir); + + if (entry == NULL) + { + if (errno != 0) + perror("readdir"); + + break; + + } + + if (entry->d_type != DT_DIR) continue; + if (entry->d_name[0] == '.') continue; + + modname = strdup(entry->d_name); modname = stradd(modname, "."); modname = stradd(modname, "__init__"); filename = strdup(path); filename = stradd(filename, G_DIR_SEPARATOR_S); - filename = stradd(filename, entry.d_name); + filename = stradd(filename, entry->d_name); pyplugin = g_python_plugin_new(modname, filename, ref); diff --git a/src/common/xdg.c b/src/common/xdg.c index 5430743..8b7ff5d 100644 --- a/src/common/xdg.c +++ b/src/common/xdg.c @@ -25,6 +25,7 @@ #include +#include #include #include #include @@ -60,8 +61,21 @@ char *get_xdg_config_dir(const char *suffix) directory = opendir(env); if (directory == NULL) goto default_cfg_dir; - for (entry = readdir(directory); entry != NULL && result == NULL; entry = readdir(directory)) + while (1) { + errno = 0; + + entry = readdir(directory); + + if (entry == NULL) + { + if (errno != 0) + perror("readdir"); + + break; + + } + if (strcmp(entry->d_name, ".") == 0) continue; if (strcmp(entry->d_name, "..") == 0) continue; -- cgit v0.11.2-87-g4458