Browse Source

* treestore.c (tree_store_start_check_cwd): Eliminate.
(tree_store_start_check): Make globally visible.
* dir.c (do_load_dir): Use path supplied as argument. Call
tree_store_start_check() after the directory is opened.
(do_reload_dir): Likewise.

Pavel Roskin 21 years ago
parent
commit
f6214df52b
4 changed files with 46 additions and 50 deletions
  1. 8 0
      src/ChangeLog
  2. 4 7
      src/dir.c
  3. 1 10
      src/treestore.c
  4. 33 33
      src/treestore.h

+ 8 - 0
src/ChangeLog

@@ -1,3 +1,11 @@
+2003-10-23  Pavel Roskin  <proski@gnu.org>
+
+	* treestore.c (tree_store_start_check_cwd): Eliminate.
+	(tree_store_start_check): Make globally visible.
+	* dir.c (do_load_dir): Use path supplied as argument.  Call
+	tree_store_start_check() after the directory is opened.
+	(do_reload_dir): Likewise.
+
 2003-10-23  Andrew V. Samoilov  <sav@bcs.zp.ua>
 
 	* dir.c (do_reload_dir): Fix memory leaks.

+ 4 - 7
src/dir.c

@@ -471,14 +471,12 @@ do_load_dir (char *path, dir_list *list, sortfn *sort, int reverse,
     int next_free = 0;
     struct stat st;
 
-    tree_store_start_check_cwd ();
-
-    dirp = mc_opendir (".");
+    dirp = mc_opendir (path);
     if (!dirp) {
 	message (1, MSG_ERROR, _("Cannot read directory contents"));
-	tree_store_end_check ();
 	return set_zero_dir (list);
     }
+    tree_store_start_check (path);
     for (dp = mc_readdir (dirp); dp; dp = mc_readdir (dirp)) {
 	status =
 	    handle_dirent (list, filter, dp, &st, next_free, &link_to_dir,
@@ -578,15 +576,14 @@ do_reload_dir (char *path, dir_list *list, sortfn *sort, int count,
     int marked_cnt;
     GHashTable *marked_files;
 
-    tree_store_start_check_cwd ();
-    dirp = mc_opendir (".");
+    dirp = mc_opendir (path);
     if (!dirp) {
 	message (1, MSG_ERROR, _("Cannot read directory contents"));
 	clean_dir (list, count);
-	tree_store_end_check ();
 	return set_zero_dir (list);
     }
 
+    tree_store_start_check (path);
     marked_files = g_hash_table_new (g_str_hash, g_str_equal);
     alloc_dir_copy (list->size);
     for (marked_cnt = i = 0; i < count; i++) {

+ 1 - 10
src/treestore.c

@@ -633,7 +633,7 @@ tree_store_mark_checked(const char *subname)
 }
 
 /* Mark the subdirectories of the current directory for delete */
-static tree_entry *
+tree_entry *
 tree_store_start_check(char *path)
 {
     tree_entry *current, *retval;
@@ -682,15 +682,6 @@ tree_store_start_check(char *path)
     return retval;
 }
 
-tree_entry *
-tree_store_start_check_cwd(void)
-{
-    char buffer[MC_MAXPATHLEN];
-
-    mc_get_current_wd(buffer, MC_MAXPATHLEN);
-    return tree_store_start_check(buffer);
-}
-
 /* Delete subdirectories which still have the deletion mark */
 void
 tree_store_end_check(void)

+ 33 - 33
src/treestore.h

@@ -7,49 +7,49 @@
 #define MC_TREE_TMP ".mc/Tree.tmp"
 
 typedef struct tree_entry {
-	char *name;			/* The full path of directory */
-	int sublevel;			/* Number of parent directories (slashes) */
-	long submask;			/* Bitmask of existing sublevels after this entry */
-	char *subname;			/* The last part of name (the actual name) */
-	unsigned int mark:1;		/* Flag: Is this entry marked (e. g. for delete)? */
-	unsigned int scanned:1;		/* Flag: childs scanned or not */
-	struct tree_entry *next;	/* Next item in the list */
-	struct tree_entry *prev;	/* Previous item in the list */
+    char *name;			/* The full path of directory */
+    int sublevel;		/* Number of parent directories (slashes) */
+    long submask;		/* Bitmask of existing sublevels after this entry */
+    char *subname;		/* The last part of name (the actual name) */
+    unsigned int mark:1;	/* Flag: Is this entry marked (e. g. for delete)? */
+    unsigned int scanned:1;	/* Flag: childs scanned or not */
+    struct tree_entry *next;	/* Next item in the list */
+    struct tree_entry *prev;	/* Previous item in the list */
 } tree_entry;
 
 typedef struct {
-	struct tree_entry *base;
-	struct tree_entry *current;
-	int base_dir_len;
-	int sublevel;
+    struct tree_entry *base;
+    struct tree_entry *current;
+    int base_dir_len;
+    int sublevel;
 } tree_scan;
 
 typedef struct {
-	tree_entry *tree_first;     	/* First entry in the list */
-	tree_entry *tree_last;          /* Last entry in the list */
-	tree_entry *check_start;	/* Start of checked subdirectories */
-	char       *check_name;
-	GList      *add_queue;		/* List of strings of added directories */
-	unsigned int loaded : 1;
-	unsigned int dirty : 1;
+    tree_entry *tree_first;	/* First entry in the list */
+    tree_entry *tree_last;	/* Last entry in the list */
+    tree_entry *check_start;	/* Start of checked subdirectories */
+    char *check_name;
+    GList *add_queue;		/* List of strings of added directories */
+    unsigned int loaded:1;
+    unsigned int dirty:1;
 } TreeStore;
 
-TreeStore  *tree_store_get             (void);
-int         tree_store_load            (void);
-int         tree_store_save            (void);
-void        tree_store_remove_entry    (char *name);
-tree_entry *tree_store_start_check_cwd (void);
-void        tree_store_mark_checked    (const char *subname);
-void        tree_store_end_check       (void);
-tree_entry *tree_store_whereis         (char *name);
-tree_entry *tree_store_rescan          (char *dir);
+TreeStore *tree_store_get (void);
+int tree_store_load (void);
+int tree_store_save (void);
+void tree_store_remove_entry (char *name);
+tree_entry *tree_store_start_check (char *path);
+void tree_store_mark_checked (const char *subname);
+void tree_store_end_check (void);
+tree_entry *tree_store_whereis (char *name);
+tree_entry *tree_store_rescan (char *dir);
 
 /*
  * Register/unregister notification functions for "entry_remove"
  */
-typedef void (*tree_store_remove_fn)(tree_entry *tree, void *data);
-void        tree_store_add_entry_remove_hook    (tree_store_remove_fn callback, void *data);
-void        tree_store_remove_entry_remove_hook (tree_store_remove_fn callback);
-
-#endif /* !__TREE_STORE_H */
+typedef void (*tree_store_remove_fn) (tree_entry *tree, void *data);
+void tree_store_add_entry_remove_hook (tree_store_remove_fn callback,
+				       void *data);
+void tree_store_remove_entry_remove_hook (tree_store_remove_fn callback);
 
+#endif				/* !__TREE_STORE_H */