aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--e-util/ChangeLog6
-rw-r--r--e-util/e-folder-map.c59
2 files changed, 35 insertions, 30 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog
index a9455307ee..504c9562b8 100644
--- a/e-util/ChangeLog
+++ b/e-util/ChangeLog
@@ -1,3 +1,9 @@
+2004-01-24 Chris Toshok <toshok@ximian.com>
+
+ * e-folder-map.c (e_folder_map_dir): use GDir/g_build_filename,
+ and g_file_test.
+ (e_folder_map_local_folders): same.
+
2004-01-23 JP Rosevear <jpr@ximian.com>
* Makefile.am: build new sources
diff --git a/e-util/e-folder-map.c b/e-util/e-folder-map.c
index e2297cefdc..3e91506600 100644
--- a/e-util/e-folder-map.c
+++ b/e-util/e-folder-map.c
@@ -28,11 +28,9 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
-#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <errno.h>
#include <libxml/tree.h>
#include <libxml/parser.h>
@@ -93,13 +91,14 @@ is_type_folder (const char *metadata, const char *search_type)
static void
e_folder_map_dir (const char *dirname, const char *type, GSList **dir_list)
{
- struct dirent *dent;
- char *path, *name;
+ char *path;
+ const char *name;
struct stat st;
- DIR *dir;
-
- path = g_strdup_printf ("%s/folder-metadata.xml", dirname);
- if (stat (path, &st) == -1 || !S_ISREG (st.st_mode)) {
+ GDir *dir;
+ GError *error = NULL;
+
+ path = g_build_filename (dirname, "folder-metadata.xml", NULL);
+ if (!g_file_test (path, G_FILE_TEST_IS_REGULAR)) {
g_free (path);
return;
}
@@ -115,38 +114,37 @@ e_folder_map_dir (const char *dirname, const char *type, GSList **dir_list)
g_free (path);
try_subdirs:
-
- path = g_strdup_printf ("%s/subfolders", dirname);
+
+ path = g_build_filename (dirname, "subfolders", NULL);
if (stat (path, &st) == -1 || !S_ISDIR (st.st_mode)) {
g_free (path);
return;
}
- if (!(dir = opendir (path))) {
- g_warning ("cannot open `%s': %s", path, strerror (errno));
+ if (!(dir = g_dir_open (path, 0, &error))) {
+ g_warning ("cannot open `%s': %s", path, error->message);
+ g_error_free (error);
g_free (path);
return;
}
- while ((dent = readdir (dir))) {
+ while ((name = g_dir_read_name (dir))) {
char *full_path;
- if (dent->d_name[0] == '.')
+ if (*name == '.')
continue;
- full_path = g_strdup_printf ("%s/%s", path, dent->d_name);
- if (stat (full_path, &st) == -1 || !S_ISDIR (st.st_mode)) {
+ full_path = g_build_filename (path, name, NULL);
+ if (!g_file_test (full_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
g_free (full_path);
continue;
}
- name = g_strdup_printf ("%s/%s", full_path, dent->d_name);
- e_folder_map_dir (full_path, name, dir_list);
+ e_folder_map_dir (full_path, full_path, dir_list);
g_free (full_path);
- g_free (name);
}
- closedir (dir);
+ g_dir_close (dir);
g_free (path);
}
@@ -154,25 +152,26 @@ e_folder_map_dir (const char *dirname, const char *type, GSList **dir_list)
GSList *
e_folder_map_local_folders (char *local_dir, char *type)
{
- struct dirent *dent;
- struct stat st;
- DIR *dir;
+ const char *name;
+ GDir *dir;
GSList *dir_list = NULL;
+ GError *error = NULL;
- if (!(dir = opendir (local_dir))) {
- g_warning ("cannot open `%s': %s", local_dir, strerror (errno));
+ if (!(dir = g_dir_open (local_dir, 0, &error))) {
+ g_warning ("cannot open `%s': %s", local_dir, error->message);
+ g_error_free (error);
return NULL;
}
- while ((dent = readdir (dir))) {
+ while ((name = g_dir_read_name (dir))) {
char *full_path;
- if (dent->d_name[0] == '.')
+ if (*name == '.')
continue;
- full_path = g_build_filename (local_dir, dent->d_name, NULL);
+ full_path = g_build_filename (local_dir, name, NULL);
d(g_message ("Looking in %s", full_path));
- if (stat (full_path, &st) == -1 || !S_ISDIR (st.st_mode)) {
+ if (!g_file_test (full_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
g_free (full_path);
continue;
}
@@ -182,7 +181,7 @@ e_folder_map_local_folders (char *local_dir, char *type)
g_free (full_path);
}
- closedir (dir);
+ g_dir_close (dir);
return dir_list;
}