aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-08-08 08:38:28 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-08-08 08:38:28 +0000
commit10faf1410582cd7aec208a63fd0a65638f6a9de3 (patch)
tree564d1418cf5fb73fdc814fb5ffad9451570f8cec
parente5c03181ba3cd06f27e10677960575e44e7900a6 (diff)
use GDir instead of directly using opendir().
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@479 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r--ChangeLog9
-rw-r--r--ChangeLog.ja9
-rw-r--r--src/addrbook.c21
-rw-r--r--src/codeconv.c21
-rw-r--r--src/main.c20
-rw-r--r--src/mh.c48
-rw-r--r--src/template.c19
-rw-r--r--src/utils.c109
8 files changed, 140 insertions, 116 deletions
diff --git a/ChangeLog b/ChangeLog
index a6c5caed..5449984d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2005-08-08
+ * src/mh.c
+ src/template.c
+ src/codeconv.c
+ src/main.c
+ src/utils.c
+ src/addrbook.c: use GDir instead of directly using opendir().
+
+2005-08-08
+
* src/utils.[ch]: added wrappers for C library function that take
pathname arguments.
* src/*.c: use wrapper functions.
diff --git a/ChangeLog.ja b/ChangeLog.ja
index 10d969e0..553b5cd3 100644
--- a/ChangeLog.ja
+++ b/ChangeLog.ja
@@ -1,5 +1,14 @@
2005-08-08
+ * src/mh.c
+ src/template.c
+ src/codeconv.c
+ src/main.c
+ src/utils.c
+ src/addrbook.c: 直接 opendir() を使わずに GDir を使用するようにした。
+
+2005-08-08
+
* src/utils.[ch]: 引数にパス名をとる C ライブラリ関数のラッパーを
追加。
* src/*.c: ラッパー関数を使用。
diff --git a/src/addrbook.c b/src/addrbook.c
index 62995580..6c80142b 100644
--- a/src/addrbook.c
+++ b/src/addrbook.c
@@ -24,7 +24,6 @@
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
-#include <dirent.h>
#include <sys/stat.h>
#include <math.h>
#include <setjmp.h>
@@ -1627,8 +1626,8 @@ ItemFolder *addrbook_remove_folder_delete( AddressBookFile *book, ItemFolder *fo
*/
GList *addrbook_get_bookfile_list( AddressBookFile *book ) {
gchar *adbookdir;
- DIR *dp;
- struct dirent *entry;
+ GDir *dir;
+ const gchar *dir_name;
struct stat statbuf;
gchar buf[ WORK_BUFLEN ];
gchar numbuf[ WORK_BUFLEN ];
@@ -1655,7 +1654,7 @@ GList *addrbook_get_bookfile_list( AddressBookFile *book ) {
adbookdir = g_strdup( buf );
strcat( buf, ADDRBOOK_PREFIX );
- if( ( dp = opendir( adbookdir ) ) == NULL ) {
+ if( ( dir = g_dir_open( adbookdir, 0, NULL ) ) == NULL ) {
book->retVal = MGU_OPEN_DIRECTORY;
g_free( adbookdir );
return NULL;
@@ -1666,18 +1665,18 @@ GList *addrbook_get_bookfile_list( AddressBookFile *book ) {
lennum = FILE_NUMDIGITS + lenpre;
maxval = -1;
- while( ( entry = readdir( dp ) ) != NULL ) {
+ while( ( dir_name = g_dir_read_name( dir ) ) != NULL ) {
gchar *endptr = NULL;
gint i;
gboolean flg;
strcpy( buf, adbookdir );
- strcat( buf, entry->d_name );
+ strcat( buf, dir_name );
g_stat( buf, &statbuf );
if( S_IFREG & statbuf.st_mode ) {
- if( strncmp( entry->d_name, ADDRBOOK_PREFIX, lenpre ) == 0 ) {
- if( strncmp( (entry->d_name) + lennum, ADDRBOOK_SUFFIX, lensuf ) == 0 ) {
- strncpy( numbuf, (entry->d_name) + lenpre, FILE_NUMDIGITS );
+ if( strncmp( dir_name, ADDRBOOK_PREFIX, lenpre ) == 0 ) {
+ if( strncmp( (dir_name) + lennum, ADDRBOOK_SUFFIX, lensuf ) == 0 ) {
+ strncpy( numbuf, (dir_name) + lenpre, FILE_NUMDIGITS );
numbuf[ FILE_NUMDIGITS ] = '\0';
flg = TRUE;
for( i = 0; i < FILE_NUMDIGITS; i++ ) {
@@ -1691,14 +1690,14 @@ GList *addrbook_get_bookfile_list( AddressBookFile *book ) {
val = strtol( numbuf, &endptr, 10 );
if( endptr && val > -1 ) {
if( val > maxval ) maxval = val;
- fileList = g_list_append( fileList, g_strdup( entry->d_name ) );
+ fileList = g_list_append( fileList, g_strdup( dir_name ) );
}
}
}
}
}
}
- closedir( dp );
+ g_dir_close( dir );
g_free( adbookdir );
book->maxValue = maxval;
diff --git a/src/codeconv.c b/src/codeconv.c
index b2d3e2b6..4eb68b78 100644
--- a/src/codeconv.c
+++ b/src/codeconv.c
@@ -1917,27 +1917,24 @@ gint conv_copy_file(const gchar *src, const gchar *dest, const gchar *encoding)
gint conv_copy_dir(const gchar *src, const gchar *dest, const gchar *encoding)
{
- DIR *dp;
- struct dirent *d;
+ GDir *dir;
+ const gchar *dir_name;
gchar *src_file;
gchar *dest_file;
- if ((dp = opendir(src)) == NULL) {
- FILE_OP_ERROR(src, "opendir");
+ if ((dir = g_dir_open(src, 0, NULL)) == NULL) {
+ g_warning("failed to open directory: %s\n", src);
return -1;
}
if (make_dir_hier(dest) < 0) {
- closedir(dp);
+ g_dir_close(dir);
return -1;
}
- while ((d = readdir(dp)) != NULL) {
- if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
- continue;
-
- src_file = g_strconcat(src, G_DIR_SEPARATOR_S, d->d_name, NULL);
- dest_file = g_strconcat(dest, G_DIR_SEPARATOR_S, d->d_name,
+ while ((dir_name = g_dir_read_name(dir)) != NULL) {
+ src_file = g_strconcat(src, G_DIR_SEPARATOR_S, dir_name, NULL);
+ dest_file = g_strconcat(dest, G_DIR_SEPARATOR_S, dir_name,
NULL);
if (is_file_exist(src_file))
conv_copy_file(src_file, dest_file, encoding);
@@ -1945,7 +1942,7 @@ gint conv_copy_dir(const gchar *src, const gchar *dest, const gchar *encoding)
g_free(src_file);
}
- closedir(dp);
+ g_dir_close(dir);
return 0;
}
diff --git a/src/main.c b/src/main.c
index 61f116f6..1cae8f53 100644
--- a/src/main.c
+++ b/src/main.c
@@ -41,7 +41,6 @@
#ifdef G_OS_UNIX
# include <signal.h>
#endif
-#include <dirent.h>
#if HAVE_LOCALE_H
# include <locale.h>
@@ -762,8 +761,8 @@ static void lock_socket_input_cb(gpointer data,
static void migrate_old_config(void)
{
- DIR *dp;
- struct dirent *d;
+ GDir *dir;
+ const gchar *dir_name;
GPatternSpec *pspec;
if (alertpanel(_("Migration of configuration"),
@@ -812,22 +811,22 @@ static void migrate_old_config(void)
if (!is_file_exist(OLD_RC_DIR G_DIR_SEPARATOR_S ADDRESSBOOK_INDEX_FILE))
return;
- if ((dp = opendir(OLD_RC_DIR)) == NULL) {
- FILE_OP_ERROR(OLD_RC_DIR, "opendir");
+ if ((dir = g_dir_open(OLD_RC_DIR, 0, NULL)) == NULL) {
+ g_warning("failed to open directory: %s\n", OLD_RC_DIR);
return;
}
pspec = g_pattern_spec_new("addrbook-*.xml");
- while ((d = readdir(dp)) != NULL) {
- if (g_pattern_match_string(pspec, d->d_name)) {
+ while ((dir_name = g_dir_read_name(dir)) != NULL) {
+ if (g_pattern_match_string(pspec, dir_name)) {
gchar *old_file;
gchar *new_file;
old_file = g_strconcat(OLD_RC_DIR G_DIR_SEPARATOR_S,
- d->d_name, NULL);
+ dir_name, NULL);
new_file = g_strconcat(RC_DIR G_DIR_SEPARATOR_S,
- d->d_name, NULL);
+ dir_name, NULL);
copy_file(old_file, new_file, FALSE);
g_free(new_file);
g_free(old_file);
@@ -835,8 +834,7 @@ static void migrate_old_config(void)
}
g_pattern_spec_free(pspec);
-
- closedir(dp);
+ g_dir_close(dir);
}
static void open_compose_new(const gchar *address, GPtrArray *attach_files)
diff --git a/src/mh.c b/src/mh.c
index 21c772ba..6483e131 100644
--- a/src/mh.c
+++ b/src/mh.c
@@ -1226,8 +1226,13 @@ static void mh_remove_missing_folder_items(Folder *folder)
static void mh_scan_tree_recursive(FolderItem *item)
{
Folder *folder;
+#ifdef G_OS_WIN32
+ GDir *dir;
+#else
DIR *dp;
struct dirent *d;
+#endif
+ const gchar *dir_name;
struct stat s;
gchar *fs_path;
gchar *entry;
@@ -1245,12 +1250,21 @@ static void mh_scan_tree_recursive(FolderItem *item)
: g_strdup(".");
if (!fs_path)
fs_path = g_strdup(item->path);
+#ifdef G_OS_WIN32
+ dir = g_dir_open(fs_path, 0, NULL);
+ if (!dir) {
+ g_warning("failed to open directory: %s\n", fs_path);
+ g_free(fs_path);
+ return;
+ }
+#else
dp = opendir(fs_path);
if (!dp) {
FILE_OP_ERROR(fs_path, "opendir");
g_free(fs_path);
return;
}
+#endif
g_free(fs_path);
debug_print("scanning %s ...\n",
@@ -1259,12 +1273,17 @@ static void mh_scan_tree_recursive(FolderItem *item)
if (folder->ui_func)
folder->ui_func(folder, item, folder->ui_func_data);
+#ifdef G_OS_WIN32
+ while ((dir_name = g_dir_read_name(dir)) != NULL) {
+#else
while ((d = readdir(dp)) != NULL) {
- if (d->d_name[0] == '.') continue;
+ dir_name = d->d_name;
+#endif
+ if (dir_name[0] == '.') continue;
- utf8name = g_filename_to_utf8(d->d_name, -1, NULL, NULL, NULL);
+ utf8name = g_filename_to_utf8(dir_name, -1, NULL, NULL, NULL);
if (!utf8name)
- utf8name = g_strdup(d->d_name);
+ utf8name = g_strdup(dir_name);
if (item->path)
utf8entry = g_strconcat(item->path, G_DIR_SEPARATOR_S,
@@ -1276,12 +1295,12 @@ static void mh_scan_tree_recursive(FolderItem *item)
entry = g_strdup(utf8entry);
if (
-#ifdef HAVE_DIRENT_D_TYPE
+#if !defined(G_OS_WIN32) && defined(HAVE_DIRENT_D_TYPE)
d->d_type == DT_DIR ||
(d->d_type == DT_UNKNOWN &&
#endif
g_stat(entry, &s) == 0 && S_ISDIR(s.st_mode)
-#ifdef HAVE_DIRENT_D_TYPE
+#if !defined(G_OS_WIN32) && defined(HAVE_DIRENT_D_TYPE)
)
#endif
) {
@@ -1296,6 +1315,8 @@ static void mh_scan_tree_recursive(FolderItem *item)
continue;
}
#endif
+
+#ifndef G_OS_WIN32
if (g_utf8_validate(utf8name, -1, NULL) == FALSE) {
g_warning(_("Directory name\n"
"'%s' is not a valid UTF-8 string.\n"
@@ -1310,6 +1331,7 @@ static void mh_scan_tree_recursive(FolderItem *item)
g_free(utf8name);
continue;
}
+#endif /* G_OS_WIN32 */
node = item->node;
for (node = node->children; node != NULL; node = node->next) {
@@ -1327,37 +1349,41 @@ static void mh_scan_tree_recursive(FolderItem *item)
if (!item->path) {
if (!folder->inbox &&
- !strcmp(d->d_name, INBOX_DIR)) {
+ !strcmp(dir_name, INBOX_DIR)) {
new_item->stype = F_INBOX;
folder->inbox = new_item;
} else if (!folder->outbox &&
- !strcmp(d->d_name, OUTBOX_DIR)) {
+ !strcmp(dir_name, OUTBOX_DIR)) {
new_item->stype = F_OUTBOX;
folder->outbox = new_item;
} else if (!folder->draft &&
- !strcmp(d->d_name, DRAFT_DIR)) {
+ !strcmp(dir_name, DRAFT_DIR)) {
new_item->stype = F_DRAFT;
folder->draft = new_item;
} else if (!folder->queue &&
- !strcmp(d->d_name, QUEUE_DIR)) {
+ !strcmp(dir_name, QUEUE_DIR)) {
new_item->stype = F_QUEUE;
folder->queue = new_item;
} else if (!folder->trash &&
- !strcmp(d->d_name, TRASH_DIR)) {
+ !strcmp(dir_name, TRASH_DIR)) {
new_item->stype = F_TRASH;
folder->trash = new_item;
}
}
mh_scan_tree_recursive(new_item);
- } else if (to_number(d->d_name) > 0) n_msg++;
+ } else if (to_number(dir_name) > 0) n_msg++;
g_free(entry);
g_free(utf8entry);
g_free(utf8name);
}
+#ifdef G_OS_WIN32
+ g_dir_close(dir);
+#else
closedir(dp);
+#endif
if (item->path) {
gint new, unread, total, min, max;
diff --git a/src/template.c b/src/template.c
index c2dc9b2e..6a1494f8 100644
--- a/src/template.c
+++ b/src/template.c
@@ -1,7 +1,7 @@
/*
* Sylpheed templates subsystem
* Copyright (C) 2001 Alexander Barinov
- * Copyright (C) 2001-2004 Hiroyuki Yamamoto
+ * Copyright (C) 2001-2005 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,7 +23,6 @@
#include <glib.h>
#include <glib/gi18n.h>
#include <stdio.h>
-#include <dirent.h>
#include <sys/stat.h>
#include <ctype.h>
@@ -110,8 +109,8 @@ GSList *template_read_config(void)
{
const gchar *path;
gchar *filename;
- DIR *dp;
- struct dirent *de;
+ GDir *dir;
+ const gchar *dir_name;
struct stat s;
Template *tmpl;
GSList *tmpl_list = NULL;
@@ -125,16 +124,14 @@ GSList *template_read_config(void)
return NULL;
}
- if ((dp = opendir(path)) == NULL) {
- FILE_OP_ERROR(path, "opendir");
+ if ((dir = g_dir_open(path, 0, NULL)) == NULL) {
+ g_warning("failed to open directory: %s\n", path);
return NULL;
}
- while ((de = readdir(dp)) != NULL) {
- if (*de->d_name == '.') continue;
-
+ while ((dir_name = g_dir_read_name(dir)) != NULL) {
filename = g_strconcat(path, G_DIR_SEPARATOR_S,
- de->d_name, NULL);
+ dir_name, NULL);
if (g_stat(filename, &s) != 0 || !S_ISREG(s.st_mode) ) {
debug_print("%s:%d %s is not an ordinary file\n",
@@ -149,7 +146,7 @@ GSList *template_read_config(void)
g_free(filename);
}
- closedir(dp);
+ g_dir_close(dir);
return tmpl_list;
}
diff --git a/src/utils.c b/src/utils.c
index 0d4c08c8..ca0ec177 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -2061,8 +2061,8 @@ gint make_dir_hier(const gchar *dir)
gint remove_all_files(const gchar *dir)
{
- DIR *dp;
- struct dirent *d;
+ GDir *dp;
+ const gchar *dir_name;
gchar *prev_dir;
prev_dir = g_get_current_dir();
@@ -2073,22 +2073,18 @@ gint remove_all_files(const gchar *dir)
return -1;
}
- if ((dp = opendir(".")) == NULL) {
- FILE_OP_ERROR(dir, "opendir");
+ if ((dp = g_dir_open(".", 0, NULL)) == NULL) {
+ g_warning("failed to open directory: %s\n", dir);
g_free(prev_dir);
return -1;
}
- while ((d = readdir(dp)) != NULL) {
- if (!strcmp(d->d_name, ".") ||
- !strcmp(d->d_name, ".."))
- continue;
-
- if (g_unlink(d->d_name) < 0)
- FILE_OP_ERROR(d->d_name, "unlink");
+ while ((dir_name = g_dir_read_name(dp)) != NULL) {
+ if (g_unlink(dir_name) < 0)
+ FILE_OP_ERROR(dir_name, "unlink");
}
- closedir(dp);
+ g_dir_close(dp);
if (g_chdir(prev_dir) < 0) {
FILE_OP_ERROR(prev_dir, "chdir");
@@ -2103,8 +2099,8 @@ gint remove_all_files(const gchar *dir)
gint remove_numbered_files(const gchar *dir, guint first, guint last)
{
- DIR *dp;
- struct dirent *d;
+ GDir *dp;
+ const gchar *dir_name;
gchar *prev_dir;
gint file_no;
@@ -2116,23 +2112,23 @@ gint remove_numbered_files(const gchar *dir, guint first, guint last)
return -1;
}
- if ((dp = opendir(".")) == NULL) {
- FILE_OP_ERROR(dir, "opendir");
+ if ((dp = g_dir_open(".", 0, NULL)) == NULL) {
+ g_warning("failed to open directory: %s\n", dir);
g_free(prev_dir);
return -1;
}
- while ((d = readdir(dp)) != NULL) {
- file_no = to_number(d->d_name);
+ while ((dir_name = g_dir_read_name(dp)) != NULL) {
+ file_no = to_number(dir_name);
if (file_no > 0 && first <= file_no && file_no <= last) {
- if (is_dir_exist(d->d_name))
+ if (is_dir_exist(dir_name))
continue;
- if (g_unlink(d->d_name) < 0)
- FILE_OP_ERROR(d->d_name, "unlink");
+ if (g_unlink(dir_name) < 0)
+ FILE_OP_ERROR(dir_name, "unlink");
}
}
- closedir(dp);
+ g_dir_close(dp);
if (g_chdir(prev_dir) < 0) {
FILE_OP_ERROR(prev_dir, "chdir");
@@ -2152,8 +2148,8 @@ gint remove_all_numbered_files(const gchar *dir)
gint remove_expired_files(const gchar *dir, guint hours)
{
- DIR *dp;
- struct dirent *d;
+ GDir *dp;
+ const gchar *dir_name;
struct stat s;
gchar *prev_dir;
gint file_no;
@@ -2167,8 +2163,8 @@ gint remove_expired_files(const gchar *dir, guint hours)
return -1;
}
- if ((dp = opendir(".")) == NULL) {
- FILE_OP_ERROR(dir, "opendir");
+ if ((dp = g_dir_open(".", 0, NULL)) == NULL) {
+ g_warning("failed to open directory: %s\n", dir);
g_free(prev_dir);
return -1;
}
@@ -2176,24 +2172,24 @@ gint remove_expired_files(const gchar *dir, guint hours)
now = time(NULL);
expire_time = hours * 60 * 60;
- while ((d = readdir(dp)) != NULL) {
- file_no = to_number(d->d_name);
+ while ((dir_name = g_dir_read_name(dp)) != NULL) {
+ file_no = to_number(dir_name);
if (file_no > 0) {
- if (g_stat(d->d_name, &s) < 0) {
- FILE_OP_ERROR(d->d_name, "stat");
+ if (g_stat(dir_name, &s) < 0) {
+ FILE_OP_ERROR(dir_name, "stat");
continue;
}
if (S_ISDIR(s.st_mode))
continue;
mtime = MAX(s.st_mtime, s.st_atime);
if (now - mtime > expire_time) {
- if (g_unlink(d->d_name) < 0)
- FILE_OP_ERROR(d->d_name, "unlink");
+ if (g_unlink(dir_name) < 0)
+ FILE_OP_ERROR(dir_name, "unlink");
}
}
}
- closedir(dp);
+ g_dir_close(dp);
if (g_chdir(prev_dir) < 0) {
FILE_OP_ERROR(prev_dir, "chdir");
@@ -2209,8 +2205,8 @@ gint remove_expired_files(const gchar *dir, guint hours)
static gint remove_dir_recursive_real(const gchar *dir)
{
struct stat s;
- DIR *dp;
- struct dirent *d;
+ GDir *dp;
+ const gchar *dir_name;
gchar *prev_dir;
if (g_stat(dir, &s) < 0) {
@@ -2237,33 +2233,29 @@ static gint remove_dir_recursive_real(const gchar *dir)
return -1;
}
- if ((dp = opendir(".")) == NULL) {
- FILE_OP_ERROR(dir, "opendir");
+ if ((dp = g_dir_open(".", 0, NULL)) == NULL) {
+ g_warning("failed to open directory: %s\n", dir);
g_chdir(prev_dir);
g_free(prev_dir);
return -1;
}
/* remove all files in the directory */
- while ((d = readdir(dp)) != NULL) {
- if (!strcmp(d->d_name, ".") ||
- !strcmp(d->d_name, ".."))
- continue;
-
- /* g_print("removing %s\n", d->d_name); */
+ while ((dir_name = g_dir_read_name(dp)) != NULL) {
+ /* g_print("removing %s\n", dir_name); */
- if (dirent_is_directory(d)) {
- if (remove_dir_recursive_real(d->d_name) < 0) {
+ if (is_dir_exist(dir_name)) {
+ if (remove_dir_recursive_real(dir_name) < 0) {
g_warning("can't remove directory\n");
return -1;
}
} else {
- if (g_unlink(d->d_name) < 0)
- FILE_OP_ERROR(d->d_name, "unlink");
+ if (g_unlink(dir_name) < 0)
+ FILE_OP_ERROR(dir_name, "unlink");
}
}
- closedir(dp);
+ g_dir_close(dp);
if (g_chdir(prev_dir) < 0) {
FILE_OP_ERROR(prev_dir, "chdir");
@@ -2413,27 +2405,24 @@ gint copy_file(const gchar *src, const gchar *dest, gboolean keep_backup)
gint copy_dir(const gchar *src, const gchar *dest)
{
- DIR *dp;
- struct dirent *d;
+ GDir *dir;
+ const gchar *dir_name;
gchar *src_file;
gchar *dest_file;
- if ((dp = opendir(src)) == NULL) {
- FILE_OP_ERROR(src, "opendir");
+ if ((dir = g_dir_open(src, 0, NULL)) == NULL) {
+ g_warning("failed to open directory: %s\n", src);
return -1;
}
if (make_dir_hier(dest) < 0) {
- closedir(dp);
+ g_dir_close(dir);
return -1;
}
- while ((d = readdir(dp)) != NULL) {
- if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
- continue;
-
- src_file = g_strconcat(src, G_DIR_SEPARATOR_S, d->d_name, NULL);
- dest_file = g_strconcat(dest, G_DIR_SEPARATOR_S, d->d_name,
+ while ((dir_name = g_dir_read_name(dir)) != NULL) {
+ src_file = g_strconcat(src, G_DIR_SEPARATOR_S, dir_name, NULL);
+ dest_file = g_strconcat(dest, G_DIR_SEPARATOR_S, dir_name,
NULL);
if (is_file_exist(src_file))
copy_file(src_file, dest_file, FALSE);
@@ -2441,7 +2430,7 @@ gint copy_dir(const gchar *src, const gchar *dest)
g_free(src_file);
}
- closedir(dp);
+ g_dir_close(dir);
return 0;
}