From 10faf1410582cd7aec208a63fd0a65638f6a9de3 Mon Sep 17 00:00:00 2001 From: hiro Date: Mon, 8 Aug 2005 08:38:28 +0000 Subject: use GDir instead of directly using opendir(). git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@479 ee746299-78ed-0310-b773-934348b2243d --- ChangeLog | 9 +++++ ChangeLog.ja | 9 +++++ src/addrbook.c | 21 ++++++----- src/codeconv.c | 21 +++++------ src/main.c | 20 +++++------ src/mh.c | 48 +++++++++++++++++++------ src/template.c | 19 +++++----- src/utils.c | 109 ++++++++++++++++++++++++++------------------------------- 8 files changed, 140 insertions(+), 116 deletions(-) diff --git a/ChangeLog b/ChangeLog index a6c5caed..5449984d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +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 diff --git a/ChangeLog.ja b/ChangeLog.ja index 10d969e0..553b5cd3 100644 --- a/ChangeLog.ja +++ b/ChangeLog.ja @@ -1,3 +1,12 @@ +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 ライブラリ関数のラッパーを 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 #include #include -#include #include #include #include @@ -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 #endif -#include #if HAVE_LOCALE_H # include @@ -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 #include #include -#include #include #include @@ -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; } -- cgit v1.2.3