Enlightenment CVS committal

Author  : lordchaos
Project : e17
Module  : apps/evfs

Dir     : e17/apps/evfs/src/bin


Modified Files:
        evfs_main.c evfs_server_handle.c 


Log Message:
* Drastic changes allowing a more generic VFS structure, and also allowing file 
system operations between different file systems. This still needs a lot of 
work, but a basic 'copy' function is already working
* Fixed the non-generic smb-stat problem.  This will still be an issue with 
multiple-client locking, but we'll deal with that later

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/evfs/src/bin/evfs_main.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- evfs_main.c 11 Oct 2005 00:35:09 -0000      1.15
+++ evfs_main.c 16 Oct 2005 10:09:05 -0000      1.16
@@ -152,9 +152,6 @@
                        evfs_handle_file_rename_command(client,command);
                        break;
 
-               case EVFS_CMD_COPY_FILE:
-                       printf("Copy file stub\n");
-                       break;
                case EVFS_CMD_MOVE_FILE:
                        printf("Move file stub\n");
                        break;
@@ -168,6 +165,10 @@
                        evfs_handle_dir_list_command(client,command);
                        printf("List directory stub\n");
                        break;
+               case EVFS_CMD_FILE_COPY:
+                       printf("File copy handler\n");
+                       evfs_handle_file_copy(client,command);
+                       break;
        }
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/evfs/src/bin/evfs_server_handle.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- evfs_server_handle.c        11 Oct 2005 00:35:09 -0000      1.7
+++ evfs_server_handle.c        16 Oct 2005 10:09:05 -0000      1.8
@@ -4,7 +4,6 @@
 void evfs_handle_monitor_start_command(evfs_client* client, evfs_command* 
command) {
        /*First get the plugin responsible for this file*/
 
-       void (*evfs_monitor_start)(evfs_client* client, evfs_command* command);
 
        if (command->file_command.num_files > 0) {
                evfs_plugin* plugin = 
evfs_get_plugin_for_uri(command->file_command.files[0]->plugin_uri);
@@ -67,13 +66,18 @@
 }
 
 void evfs_handle_file_stat_command(evfs_client* client, evfs_command* command) 
{
+       static struct stat file_stat;
+       
        printf ("At file stat handler\n");
        printf("Looking for plugin for '%s'\n", 
command->file_command.files[0]->plugin_uri);
        evfs_plugin* plugin = 
evfs_get_plugin_for_uri(command->file_command.files[0]->plugin_uri);
        if (plugin) {
                printf("Pointer here: %p\n", plugin->functions->evfs_file_stat);
-               (*(plugin->functions->evfs_file_stat))(client,command);
+               (*(plugin->functions->evfs_file_stat))(command, &file_stat);
+
+               evfs_stat_event_create(client, command, &file_stat);
        }
+       printf("Handled event, client is %p\n", client);
 
 }
 
@@ -88,3 +92,60 @@
        }
 
 }
+
+void evfs_handle_file_copy(evfs_client* client, evfs_command* command) {
+       evfs_plugin* plugin;
+       evfs_plugin* dst_plugin;
+       
+       char bytes[COPY_BLOCKSIZE];
+       long count;
+       long read_write_bytes = 0;
+       static struct stat file_stat;
+       evfs_filereference* ref = NEW(evfs_filereference);
+
+       printf ("At test handler\n");
+
+       /*Make a dummy 'to' file for now*/
+       /*ref->plugin_uri = strdup("smb");
+       ref->plugin = evfs_get_plugin_for_uri(ref->plugin_uri);
+       ref->parent = NULL;
+       ref->path = strdup("/gown/MythVideos/musicvideos/testcopy.dat");*/
+       
+       
+
+       plugin = 
evfs_get_plugin_for_uri(command->file_command.files[0]->plugin_uri);
+       dst_plugin = 
evfs_get_plugin_for_uri(command->file_command.files[1]->plugin_uri);
+       
+       if (plugin && dst_plugin) {
+               
(*dst_plugin->functions->evfs_file_create)(command->file_command.files[1]);
+               
(*plugin->functions->evfs_file_open)(command->file_command.files[0]);
+
+               /*Get the source file size*/
+               (*plugin->functions->evfs_file_stat)(command, &file_stat);
+               printf("Source file size: %d bytes\n", file_stat.st_size);
+               
+               
+               count = 0;
+               while (count < file_stat.st_size) {
+                       
(*plugin->functions->evfs_file_seek)(command->file_command.files[0], count, 
SEEK_SET);
+
+                       read_write_bytes = (file_stat.st_size > count + 
COPY_BLOCKSIZE) ? COPY_BLOCKSIZE : (file_stat.st_size - count);
+                       printf("Reading/writing %d bytes\n", read_write_bytes);
+                       
+                       
(*plugin->functions->evfs_file_read)(command->file_command.files[0], bytes, 
read_write_bytes );
+
+                       
(*dst_plugin->functions->evfs_file_write)(command->file_command.files[1], 
bytes, read_write_bytes );
+
+                       
+
+                       count+= COPY_BLOCKSIZE;
+               }
+               
+               
+
+               
(*dst_plugin->functions->evfs_file_close)(command->file_command.files[1]);
+               
(*plugin->functions->evfs_file_close)(command->file_command.files[0]);
+               
+       }
+
+}




-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to