From 3cd8556c542721f41b63d1978d75ce8891f27908 Mon Sep 17 00:00:00 2001 From: TingPing Date: Wed, 4 Jun 2014 13:56:33 -0400 Subject: [PATCH] Use GDir instead of dirent --- plugins/python/python.c | 44 ++++++++++++++++++++++------------------- src/common/util.c | 21 +++++++++----------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/plugins/python/python.c b/plugins/python/python.c index 06cc7a3b..1904a3e9 100644 --- a/plugins/python/python.c +++ b/plugins/python/python.c @@ -52,14 +52,13 @@ */ #include +#include #include #include #include #ifdef WIN32 #include -#include -#include "../../src/dirent/dirent-win32.h" #else #include #include @@ -459,26 +458,31 @@ Util_BuildEOLList(char *word[]) static void Util_Autoload_from (const char *dir_name) { -#ifndef PATH_MAX -#define PATH_MAX 1024 /* Hurd doesn't define it */ -#endif - char oldcwd[PATH_MAX]; - struct dirent *ent; - DIR *dir; - if (getcwd(oldcwd, PATH_MAX) == NULL) + gchar *oldcwd; + const char *entry_name; + GDir *dir; + + oldcwd = g_get_current_dir (); + if (oldcwd == NULL) return; - if (chdir(dir_name) != 0) + if (g_chdir(dir_name) != 0) + { + g_free (oldcwd); return; - dir = opendir("."); - if (dir == NULL) - return; - while ((ent = readdir(dir))) { - int len = strlen(ent->d_name); - if (len > 3 && strcmp(".py", ent->d_name+len-3) == 0) - Command_PyLoad(ent->d_name); } - closedir(dir); - chdir(oldcwd); + dir = g_dir_open (".", 0, NULL); + if (dir == NULL) + { + g_free (oldcwd); + return; + } + while ((entry_name = g_dir_read_name (dir))) + { + if (g_str_has_suffix (entry_name, ".py")) + Command_PyLoad((char*)entry_name); + } + g_dir_close (dir); + g_chdir (oldcwd); } static void @@ -486,7 +490,7 @@ Util_Autoload() { const char *xdir; char *sub_dir; - /* we need local filesystem encoding for chdir, opendir etc */ + /* we need local filesystem encoding for g_chdir, g_dir_open etc */ xdir = hexchat_get_info(ph, "configdir"); diff --git a/src/common/util.c b/src/common/util.c index 2dc0034b..167f8b81 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -34,13 +34,11 @@ #include #include #include -#include "../dirent/dirent-win32.h" #else #include #include #include #include -#include #endif #include "../../config.h" @@ -934,27 +932,26 @@ break_while: void for_files (char *dirname, char *mask, void callback (char *file)) { - DIR *dir; - struct dirent *ent; + GDir *dir; + const gchar *entry_name; char *buf; - dir = opendir (dirname); + dir = g_dir_open (dirname, 0, NULL); if (dir) { - while ((ent = readdir (dir))) + while ((entry_name = g_dir_read_name (dir))) { - if (strcmp (ent->d_name, ".") && strcmp (ent->d_name, "..")) + if (strcmp (entry_name, ".") && strcmp (entry_name, "..")) { - if (match (mask, ent->d_name)) + if (match (mask, entry_name)) { - buf = malloc (strlen (dirname) + strlen (ent->d_name) + 2); - sprintf (buf, "%s" G_DIR_SEPARATOR_S "%s", dirname, ent->d_name); + buf = g_build_filename (dirname, entry_name, NULL); callback (buf); - free (buf); + g_free (buf); } } } - closedir (dir); + g_dir_close (dir); } }