* treestore.c: Remove unused code, reformat.
* treestore.h: Remove unused declarations.
Этот коммит содержится в:
родитель
b1dbe77c5b
Коммит
cafbb72684
@ -1,5 +1,8 @@
|
||||
2002-08-15 Pavel Roskin <proski@gnu.org>
|
||||
|
||||
* treestore.c: Remove unused code, reformat.
|
||||
* treestore.h: Remove unused declarations.
|
||||
|
||||
* fs.h (compute_namelen): New inline function to take care of
|
||||
the d_namlen field if and only if it's needed.
|
||||
|
||||
|
204
src/treestore.c
204
src/treestore.c
@ -28,8 +28,8 @@
|
||||
The program load and saves the tree each time the tree widget is
|
||||
created and destroyed. This is required for the future vfs layer,
|
||||
it will be possible to have tree views over virtual file systems.
|
||||
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_UNISTD_H
|
||||
@ -51,19 +51,15 @@
|
||||
|
||||
static TreeStore ts;
|
||||
|
||||
void (*tree_store_dirty_notify)(int state) = NULL;
|
||||
|
||||
static void
|
||||
tree_store_dirty(int state)
|
||||
{
|
||||
ts.dirty = state;
|
||||
|
||||
if (tree_store_dirty_notify)
|
||||
(*tree_store_dirty_notify)(state);
|
||||
}
|
||||
|
||||
/* Returns number of common characters */
|
||||
static int str_common (char *s1, char *s2)
|
||||
static int
|
||||
str_common(char *s1, char *s2)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
@ -220,8 +216,7 @@ tree_store_load_from (char *name)
|
||||
/* .ado: Drives for NT and OS/2 */
|
||||
if ((len > 2) &&
|
||||
isalpha(name[0]) &&
|
||||
(name[1] == ':') &&
|
||||
(name[2] == '\\')) {
|
||||
(name[1] == ':') && (name[2] == '\\')) {
|
||||
tree_store_add_entry(name);
|
||||
strcpy(oldname, name);
|
||||
} else
|
||||
@ -340,10 +335,12 @@ tree_store_save_to (char *name)
|
||||
if (vfs_file_is_local(current->name)) {
|
||||
/* Clear-text compression */
|
||||
if (current->prev
|
||||
&& (common = str_common (current->prev->name, current->name)) > 2){
|
||||
&& (common =
|
||||
str_common(current->prev->name, current->name)) > 2) {
|
||||
char *encoded = encode(current->name + common);
|
||||
|
||||
i = fprintf (file, "%d:%d %s\n", current->scanned, common, encoded);
|
||||
i = fprintf(file, "%d:%d %s\n", current->scanned, common,
|
||||
encoded);
|
||||
g_free(encoded);
|
||||
} else {
|
||||
char *encoded = encode(current->name);
|
||||
@ -353,8 +350,8 @@ tree_store_save_to (char *name)
|
||||
}
|
||||
|
||||
if (i == EOF) {
|
||||
fprintf (stderr, _("Cannot write to the %s file:\n%s\n"), name,
|
||||
unix_error_string (errno));
|
||||
fprintf(stderr, _("Cannot write to the %s file:\n%s\n"),
|
||||
name, unix_error_string(errno));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -498,6 +495,33 @@ tree_store_add_entry (char *name)
|
||||
return new;
|
||||
}
|
||||
|
||||
static Hook *remove_entry_hooks;
|
||||
|
||||
void
|
||||
tree_store_add_entry_remove_hook(tree_store_remove_fn callback, void *data)
|
||||
{
|
||||
add_hook(&remove_entry_hooks, (void (*)(void *)) callback, data);
|
||||
}
|
||||
|
||||
void
|
||||
tree_store_remove_entry_remove_hook(tree_store_remove_fn callback)
|
||||
{
|
||||
delete_hook(&remove_entry_hooks, (void (*)(void *)) callback);
|
||||
}
|
||||
|
||||
static void
|
||||
tree_store_notify_remove(tree_entry * entry)
|
||||
{
|
||||
Hook *p = remove_entry_hooks;
|
||||
tree_store_remove_fn r;
|
||||
|
||||
while (p) {
|
||||
r = (tree_store_remove_fn) p->hook_fn;
|
||||
r(entry, p->hook_data);
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
|
||||
static tree_entry *
|
||||
remove_entry(tree_entry * entry)
|
||||
{
|
||||
@ -562,7 +586,8 @@ tree_store_remove_entry (char *name)
|
||||
current = base->next;
|
||||
while (current
|
||||
&& strncmp(current->name, base->name, len) == 0
|
||||
&& (current->name[len] == '\0' || current->name[len] == PATH_SEP)) {
|
||||
&& (current->name[len] == '\0'
|
||||
|| current->name[len] == PATH_SEP)) {
|
||||
old = current;
|
||||
current = current->next;
|
||||
remove_entry(old);
|
||||
@ -615,7 +640,8 @@ tree_store_mark_checked (const char *subname)
|
||||
current = base->next;
|
||||
while (current
|
||||
&& strncmp(current->name, base->name, len) == 0
|
||||
&& (current->name[len] == '\0' || current->name[len] == PATH_SEP || len == 1)){
|
||||
&& (current->name[len] == '\0'
|
||||
|| current->name[len] == PATH_SEP || len == 1)) {
|
||||
current->mark = 0;
|
||||
current = current->next;
|
||||
}
|
||||
@ -635,8 +661,6 @@ tree_store_start_check (char *path)
|
||||
g_return_val_if_fail(ts.check_name == NULL, NULL);
|
||||
ts.check_start = NULL;
|
||||
|
||||
tree_store_set_freeze (TRUE);
|
||||
|
||||
/* Search for the start of subdirectories */
|
||||
current = tree_store_whereis(path);
|
||||
if (!current) {
|
||||
@ -665,7 +689,8 @@ tree_store_start_check (char *path)
|
||||
current = ts.check_start;
|
||||
while (current
|
||||
&& strncmp(current->name, ts.check_name, len) == 0
|
||||
&& (current->name[len] == '\0' || current->name[len] == PATH_SEP || len == 1)){
|
||||
&& (current->name[len] == '\0' || current->name[len] == PATH_SEP
|
||||
|| len == 1)) {
|
||||
current->mark = 1;
|
||||
current = current->next;
|
||||
}
|
||||
@ -701,7 +726,8 @@ tree_store_end_check (void)
|
||||
current = ts.check_start;
|
||||
while (current
|
||||
&& strncmp(current->name, ts.check_name, len) == 0
|
||||
&& (current->name[len] == '\0' || current->name[len] == PATH_SEP || len == 1)){
|
||||
&& (current->name[len] == '\0' || current->name[len] == PATH_SEP
|
||||
|| len == 1)) {
|
||||
old = current;
|
||||
current = current->next;
|
||||
if (old->mark)
|
||||
@ -716,13 +742,10 @@ tree_store_end_check (void)
|
||||
ts.check_name = NULL;
|
||||
|
||||
for (l = the_queue; l; l = l->next) {
|
||||
tree_store_notify_add (l->data);
|
||||
g_free(l->data);
|
||||
}
|
||||
|
||||
g_list_free(the_queue);
|
||||
|
||||
tree_store_set_freeze (FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -808,140 +831,3 @@ tree_store_rescan (char *dir)
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
||||
static Hook *remove_entry_hooks;
|
||||
static Hook *add_entry_hooks;
|
||||
static Hook *freeze_hooks;
|
||||
|
||||
void
|
||||
tree_store_add_entry_remove_hook (tree_store_remove_fn callback, void *data)
|
||||
{
|
||||
add_hook (&remove_entry_hooks, (void (*)(void *))callback, data);
|
||||
}
|
||||
|
||||
void
|
||||
tree_store_remove_entry_remove_hook (tree_store_remove_fn callback)
|
||||
{
|
||||
delete_hook (&remove_entry_hooks, (void (*)(void *))callback);
|
||||
}
|
||||
|
||||
void
|
||||
tree_store_notify_remove (tree_entry *entry)
|
||||
{
|
||||
Hook *p = remove_entry_hooks;
|
||||
tree_store_remove_fn r;
|
||||
|
||||
|
||||
while (p){
|
||||
r = (tree_store_remove_fn) p->hook_fn;
|
||||
r (entry, p->hook_data);
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
void
|
||||
tree_store_add_entry_add_hook (tree_store_add_fn callback, void *data)
|
||||
{
|
||||
add_hook (&add_entry_hooks, (void (*)(void *))callback, data);
|
||||
}
|
||||
|
||||
void
|
||||
tree_store_remove_entry_add_hook (tree_store_add_fn callback)
|
||||
{
|
||||
delete_hook (&add_entry_hooks, (void (*)(void *))callback);
|
||||
}
|
||||
|
||||
void
|
||||
tree_store_notify_add (char *directory)
|
||||
{
|
||||
Hook *p = add_entry_hooks;
|
||||
tree_store_add_fn r;
|
||||
|
||||
while (p) {
|
||||
r = (tree_store_add_fn) p->hook_fn;
|
||||
r (directory, p->hook_data);
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
tree_store_add_freeze_hook (tree_freeze_fn callback, void *data)
|
||||
{
|
||||
add_hook (&freeze_hooks, (void (*)(void *)) callback, data);
|
||||
}
|
||||
|
||||
void
|
||||
tree_store_remove_freeze_hook (tree_freeze_fn callback)
|
||||
{
|
||||
delete_hook (&freeze_hooks, (void (*)(void *))callback);
|
||||
}
|
||||
|
||||
void
|
||||
tree_store_set_freeze (int freeze)
|
||||
{
|
||||
Hook *p = freeze_hooks;
|
||||
tree_freeze_fn f;
|
||||
|
||||
while (p) {
|
||||
f = (tree_freeze_fn) p->hook_fn;
|
||||
f (freeze, p->hook_data);
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
|
||||
tree_scan *
|
||||
tree_store_opendir (char *path)
|
||||
{
|
||||
tree_entry *entry;
|
||||
tree_scan *scan;
|
||||
|
||||
entry = tree_store_whereis (path);
|
||||
if (!entry || (entry && !entry->scanned)) {
|
||||
entry = tree_store_rescan (path);
|
||||
|
||||
if (!entry)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (entry->next == NULL)
|
||||
return NULL;
|
||||
|
||||
scan = g_new (tree_scan, 1);
|
||||
scan->base = entry;
|
||||
scan->current = entry->next;
|
||||
scan->sublevel = entry->next->sublevel;
|
||||
|
||||
scan->base_dir_len = strlen (path);
|
||||
return scan;
|
||||
}
|
||||
|
||||
tree_entry *
|
||||
tree_store_readdir (tree_scan *scan)
|
||||
{
|
||||
tree_entry *entry;
|
||||
int len;
|
||||
|
||||
g_assert (scan != NULL);
|
||||
|
||||
len = scan->base_dir_len;
|
||||
entry = scan->current;
|
||||
while (entry &&
|
||||
(strncmp (entry->name, scan->base->name, len) == 0) &&
|
||||
(entry->name [len] == 0 || entry->name [len] == PATH_SEP || len == 1)){
|
||||
|
||||
if (entry->sublevel == scan->sublevel){
|
||||
scan->current = entry->next;
|
||||
return entry;
|
||||
}
|
||||
entry = entry->next;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
tree_store_closedir (tree_scan *scanner)
|
||||
{
|
||||
g_assert (scanner != NULL);
|
||||
|
||||
g_free (scanner);
|
||||
}
|
||||
|
@ -39,10 +39,6 @@ typedef struct {
|
||||
unsigned int dirty : 1;
|
||||
} TreeStore;
|
||||
|
||||
#define TREE_CHECK_NAME ts.check_name_list->data
|
||||
|
||||
extern void (*tree_store_dirty_notify)(int state);
|
||||
|
||||
TreeStore *tree_store_get (void);
|
||||
int tree_store_load (void);
|
||||
int tree_store_save (void);
|
||||
@ -62,34 +58,5 @@ 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);
|
||||
|
||||
/*
|
||||
* Register/unregister notification functions for "entry_add"
|
||||
*/
|
||||
typedef void (*tree_store_add_fn)(char *name, void *data);
|
||||
void tree_store_add_entry_add_hook (tree_store_add_fn callback, void *data);
|
||||
void tree_store_remove_entry_add_hook (tree_store_add_fn callback);
|
||||
|
||||
/*
|
||||
* Register/unregister freeze/unfreeze functions for the tree
|
||||
*/
|
||||
typedef void (*tree_freeze_fn)(int freeze, void *data);
|
||||
void tree_store_add_freeze_hook (tree_freeze_fn callback, void *data);
|
||||
void tree_store_remove_freeze_hook (tree_freeze_fn);
|
||||
|
||||
/*
|
||||
* Changes in the tree_entry are notified with these
|
||||
*/
|
||||
void tree_store_notify_remove (tree_entry *entry);
|
||||
void tree_store_notify_add (char *directory);
|
||||
|
||||
/*
|
||||
* Freeze unfreeze notification
|
||||
*/
|
||||
void tree_store_set_freeze (int freeze);
|
||||
|
||||
tree_scan *tree_store_opendir (char *path);
|
||||
tree_entry *tree_store_readdir (tree_scan *scanner);
|
||||
void tree_store_closedir (tree_scan *scanner);
|
||||
|
||||
#endif
|
||||
#endif /* !__TREE_STORE_H */
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user