Enlightenment CVS committal
Author : chaos
Project : e17
Module : proto
Dir : e17/proto/entropy/src/plugins
Modified Files:
filesystem.c
Log Message:
* Migrate everything to use client_identifier evfs tracker - much safer and
more secure
===================================================================
RCS file: /cvs/e/e17/proto/entropy/src/plugins/filesystem.c,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -3 -r1.65 -r1.66
--- filesystem.c 13 Apr 2006 13:17:50 -0000 1.65
+++ filesystem.c 25 Apr 2006 13:24:03 -0000 1.66
@@ -16,8 +16,6 @@
Ecore_Hash *folder_monitor_hash;
-Ecore_Hash *stat_request_hash;
-Ecore_Hash *file_copy_hash;
Ecore_Hash *evfs_dir_requests;
entropy_core *filesystem_core; /*A reference to the core */
@@ -31,15 +29,6 @@
void entropy_filesystem_directory_create (entropy_generic_file * parent, char*
child_name);
void entropy_filesystem_file_remove (entropy_generic_file * file,
entropy_gui_component_instance* instance);
-
-
-
-
-//TODO: In its current implementation - stats can only be tracked by one
instance at a time.
-// I.e. if a request is made for a file by one instance, and another
instance requests a stat on that file,
-// whilst we're waiting for a response on the first, we'll have a
collision. This will almost *never* happen,
-// but it would be a good idea to fix.
-
evfs_connection *con;
void
@@ -161,20 +150,17 @@
entropy_gui_component_instance *instance;
entropy_file_stat *file_stat;
entropy_file_listener* listener;
+ char* md5;
-
- char *md5;
char *folder =
strdup ((char *) data->resp_command.file_command.files[0]->path);
char *pos = rindex (folder, '/');
-
-
*pos = '\0';
//printf("Folder: '%s'\nFilename: '%s'\n", folder, pos+1);
md5 = md5_entropy_path_file
(data->resp_command.file_command.files[0]->plugin_uri, folder, pos + 1);
- instance = ecore_hash_get (stat_request_hash, md5);
+ instance = ecore_hash_get (evfs_dir_requests,
(long*)data->resp_command.client_identifier );
/*Build a file<->stat structure to pass to requester */
file_stat = entropy_malloc (sizeof (entropy_file_stat));
@@ -223,7 +209,7 @@
entropy_free (file_stat->stat_obj);
entropy_free (file_stat);
- ecore_hash_remove (stat_request_hash, md5);
+ ecore_hash_remove (evfs_dir_requests,
(long*)data->resp_command.client_identifier);
entropy_free (folder);
entropy_free (md5);
@@ -377,7 +363,7 @@
uri =
evfs_filereference_to_string (data->resp_command.file_command.
files[0]);
- instance = ecore_hash_get (file_copy_hash, uri);
+ instance = ecore_hash_get (evfs_dir_requests,
(long*)data->resp_command.client_identifier);
if (instance) {
/*Build up the gui_event wrapper */
@@ -394,8 +380,7 @@
}
if (data->progress->type == EVFS_PROGRESS_TYPE_DONE) {
- /*TODO free the key */
- ecore_hash_remove(file_copy_hash, uri);
+ ecore_hash_remove(evfs_dir_requests,
(long*)data->resp_command.client_identifier);
}
if (uri) free (uri);
@@ -417,7 +402,8 @@
uri =
evfs_filereference_to_string (data->resp_command.file_command.
files[0]);
- instance = ecore_hash_get (file_copy_hash, uri);
+ instance = ecore_hash_get (evfs_dir_requests,
(long*)data->resp_command.client_identifier);
+
if (instance) {
/*Build up the gui_event wrapper */
@@ -526,9 +512,7 @@
/*Initialise misc. hashes*/
folder_monitor_hash =
ecore_hash_new (ecore_direct_hash, ecore_direct_compare);
- stat_request_hash = ecore_hash_new (ecore_str_hash, ecore_str_compare);
evfs_dir_requests = ecore_hash_new (ecore_direct_hash, ecore_direct_compare);
- file_copy_hash = ecore_hash_new (ecore_str_hash, ecore_str_compare);
/*Connect to evfs*/
con = evfs_connect (&callback, NULL);
@@ -601,17 +585,17 @@
{
evfs_file_uri_path *path;
char *uri = uri = entropy_core_generic_file_uri_create (request->file, 0);
+ long id;
//printf("Getting a stat from evfs...\n");
path = evfs_parse_uri (uri);
- char *md5 =
- md5_entropy_path_file (request->file->uri_base, request->file->path,
request->file->filename);
- ecore_hash_set (stat_request_hash, md5, request->requester);
- evfs_client_file_stat (con, path->files[0]);
+ id = evfs_client_file_stat (con, path->files[0]);
+ecore_hash_set (evfs_dir_requests, (long*)id, request->requester);
- free (uri);
+ evfs_cleanup_file_uri_path (path);
+ free(uri);
return NULL;
@@ -812,12 +796,10 @@
{
evfs_file_uri_path *uri_path_from;
evfs_file_uri_path *uri_path_to;
- char *original;
-
char copy_buffer[PATH_MAX];
-
char uri_from[512];
char uri_to[512];
+ long id;
@@ -837,12 +819,11 @@
//
/*Track the copy action */
snprintf (copy_buffer, PATH_MAX, "%s%s", uri_from, uri_to);
- original = evfs_filereference_to_string (uri_path_from->files[0]);
- ecore_hash_set (file_copy_hash, original, instance);
-
- evfs_client_file_copy (con, uri_path_from->files[0], uri_path_to->files[0]);
+ id = evfs_client_file_copy (con, uri_path_from->files[0],
uri_path_to->files[0]);
+ ecore_hash_set(evfs_dir_requests, (long*)id, instance);
- //TODO - free the file containers here
+ evfs_cleanup_file_uri_path(uri_path_from);
+ evfs_cleanup_file_uri_path(uri_path_to);
}
@@ -853,17 +834,16 @@
entropy_filesystem_file_remove (entropy_generic_file * file,
entropy_gui_component_instance* instance)
{
evfs_file_uri_path *uri_path_from;
- char* original;
char *uri = entropy_core_generic_file_uri_create (file, 0);
- //printf("Deleting uri '%s'\n", uri);
+ long id;
uri_path_from = evfs_parse_uri (uri);
- original = evfs_filereference_to_string (uri_path_from->files[0]);
- evfs_client_file_remove (con, uri_path_from->files[0]);
+ id = evfs_client_file_remove (con, uri_path_from->files[0]);
- ecore_hash_set (file_copy_hash, original, instance);
+ ecore_hash_set (evfs_dir_requests, (long*)id, instance);
free (uri);
+ evfs_cleanup_file_uri_path(uri_path_from);
}
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs