Do not use chdir() in remove_all_files().
[claws.git] / src / common / utils.c
index b3038ee8d5b431781c65d88da8f24667c1947efc..f16c00b959fe1b48c37054fb055d9b666963de0e 100644 (file)
@@ -2195,38 +2195,23 @@ gint make_dir_hier(const gchar *dir)
 gint remove_all_files(const gchar *dir)
 {
        GDir *dp;
-       const gchar *dir_name;
-       gchar *prev_dir;
-
-       prev_dir = g_get_current_dir();
-
-       if (g_chdir(dir) < 0) {
-               FILE_OP_ERROR(dir, "chdir");
-               g_free(prev_dir);
-               return -1;
-       }
+       const gchar *file_name;
+       gchar *tmp;
 
-       if ((dp = g_dir_open(".", 0, NULL)) == NULL) {
+       if ((dp = g_dir_open(dir, 0, NULL)) == NULL) {
                g_warning("failed to open directory: %s", dir);
-               g_free(prev_dir);
                return -1;
        }
 
-       while ((dir_name = g_dir_read_name(dp)) != NULL) {
-               if (claws_unlink(dir_name) < 0)
-                       FILE_OP_ERROR(dir_name, "unlink");
+       while ((file_name = g_dir_read_name(dp)) != NULL) {
+               tmp = g_strconcat(dir, G_DIR_SEPARATOR_S, file_name, NULL);
+               if (claws_unlink(tmp) < 0)
+                       FILE_OP_ERROR(tmp, "unlink");
+               g_free(tmp);
        }
 
        g_dir_close(dp);
 
-       if (g_chdir(prev_dir) < 0) {
-               FILE_OP_ERROR(prev_dir, "chdir");
-               g_free(prev_dir);
-               return -1;
-       }
-
-       g_free(prev_dir);
-
        return 0;
 }