mirror of https://github.com/MidnightCommander/mc
* 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.
This commit is contained in:
parent
ad84a71c64
commit
f6214df52b
|
@ -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.
|
||||
|
|
11
src/dir.c
11
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++) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue