214 lines
5.6 KiB
Diff
214 lines
5.6 KiB
Diff
|
diff -Nurp gvfs-1.0.2_old/daemon/gvfsbackendnds.c gvfs-1.0.2_new/daemon/gvfsbackendnds.c
|
||
|
--- gvfs-1.0.2_old/daemon/gvfsbackendnds.c 2009-01-16 22:25:34.000000000 +0530
|
||
|
+++ gvfs-1.0.2_new/daemon/gvfsbackendnds.c 2009-01-16 23:57:55.000000000 +0530
|
||
|
@@ -35,6 +35,7 @@
|
||
|
#include <glib/gi18n.h>
|
||
|
#include <gio/gio.h>
|
||
|
#include<dlfcn.h>
|
||
|
+#include <sys/utsname.h>
|
||
|
|
||
|
#include "gvfsbackendnds.h"
|
||
|
#include "gvfsjobmountmountable.h"
|
||
|
@@ -49,8 +50,6 @@
|
||
|
|
||
|
|
||
|
|
||
|
-/* Function Pointer to /opt/novell/lib/libinterface.so */
|
||
|
-int (*retrieve_children)(char *) = NULL;
|
||
|
|
||
|
typedef struct {
|
||
|
char *name;
|
||
|
@@ -199,6 +198,9 @@ update_cache (GVfsBackendNds *backend,co
|
||
|
int res;
|
||
|
char *ptr=NULL;
|
||
|
char *server_name=NULL;
|
||
|
+ struct utsname utsbuf;
|
||
|
+/* Function Pointer to /opt/novell/lib/libinterface.so */
|
||
|
+int (*retrieve_children)(char *);
|
||
|
|
||
|
entries = NULL;
|
||
|
entry_errno = 0;
|
||
|
@@ -232,17 +234,42 @@ if(backend->server == NULL) //retrieve
|
||
|
|
||
|
else //retrieve object names
|
||
|
{
|
||
|
- handle = dlopen("/opt/novell/lib/libinterface.so",RTLD_NOW);
|
||
|
+ uname(&utsbuf);
|
||
|
+ if(!strcmp(utsbuf.machine,"x86_64"))
|
||
|
+ handle = dlopen("/usr/lib64/libinterface.so",RTLD_NOW | RTLD_DEEPBIND);
|
||
|
+ else
|
||
|
+ handle = dlopen("/usr/lib/libinterface.so",RTLD_NOW | RTLD_DEEPBIND);
|
||
|
|
||
|
if(handle == NULL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
*(void **)(&retrieve_children) = dlsym(handle,"retrieve_children");
|
||
|
+
|
||
|
+ unlink("/tmp/ndsobjects.txt");
|
||
|
+
|
||
|
if(retrieve_children != NULL)
|
||
|
{
|
||
|
res = (*retrieve_children)(server_name);
|
||
|
- }
|
||
|
+
|
||
|
+ if(res == 0)
|
||
|
+ {
|
||
|
+ fptr = fopen("/tmp/ndsobjects.txt","r");
|
||
|
+ if(fptr == NULL)
|
||
|
+ {
|
||
|
+ entry_errno = -1;
|
||
|
+ goto out;
|
||
|
+ }
|
||
|
+ objectname = (char *)malloc(sizeof(char) * 400);
|
||
|
+ while (fgets(objectname,400,fptr) != NULL)
|
||
|
+ {
|
||
|
+ objectlist = g_list_append(objectlist,g_strdup(objectname));
|
||
|
+ memset(objectname,'\0',400);
|
||
|
+ }
|
||
|
+ fclose(fptr);
|
||
|
+ free(objectname);
|
||
|
+ }
|
||
|
+ }
|
||
|
else
|
||
|
{
|
||
|
return;
|
||
|
@@ -265,6 +292,8 @@ for(object = objectlist;object != NULL;o
|
||
|
entries = g_list_append (entries, entry);
|
||
|
}
|
||
|
|
||
|
+//if(objectlist != NULL)
|
||
|
+//g_list_free(objectlist);
|
||
|
|
||
|
out:
|
||
|
|
||
|
@@ -274,7 +303,7 @@ for(object = objectlist;object != NULL;o
|
||
|
backend->entries = entries;
|
||
|
g_mutex_unlock (backend->entries_lock);
|
||
|
}
|
||
|
- backend->entry_errno = entry_errno;
|
||
|
+ backend->entry_errno = entry_errno;
|
||
|
|
||
|
}
|
||
|
|
||
|
@@ -376,15 +405,14 @@ do_mount (GVfsBackend *backend,
|
||
|
display_name = g_strdup (_("NVVFS Top Directory"));
|
||
|
browse_mount_spec = g_mount_spec_new ("nds");
|
||
|
icon = "network-workgroup";
|
||
|
-
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
display_name = g_strdup_printf (_("NVVFS Objects"));
|
||
|
browse_mount_spec = g_mount_spec_new ("nds");
|
||
|
+ //g_mount_spec_set (browse_mount_spec, "host", op_backend->mounted_server);
|
||
|
g_mount_spec_set (browse_mount_spec, "host", op_backend->server);
|
||
|
icon = "network-server";
|
||
|
-
|
||
|
}
|
||
|
|
||
|
g_vfs_backend_set_display_name (backend, display_name);
|
||
|
@@ -424,6 +452,74 @@ try_mount (GVfsBackend *backend,
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
+static void
|
||
|
+run_mount_mountable (GVfsBackendNds *backend,
|
||
|
+ GVfsJobMountMountable *job,
|
||
|
+ const char *filename,
|
||
|
+ GMountSource *mount_source)
|
||
|
+{
|
||
|
+ BrowseEntry *entry;
|
||
|
+ GError *error = NULL;
|
||
|
+ GMountSpec *mount_spec;
|
||
|
+
|
||
|
+ g_mutex_lock (backend->entries_lock);
|
||
|
+
|
||
|
+backend->server = g_strdup(filename);
|
||
|
+
|
||
|
+ mount_spec = get_mount_spec_for_share (backend->server, filename);
|
||
|
+ g_vfs_job_mount_mountable_set_target (job, mount_spec, "/", TRUE);
|
||
|
+ g_mount_spec_unref (mount_spec);
|
||
|
+ g_mutex_unlock (backend->entries_lock);
|
||
|
+
|
||
|
+ g_vfs_job_succeeded (G_VFS_JOB (job));
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
+static gboolean
|
||
|
+do_mount_mountable (GVfsBackend *backend,
|
||
|
+ GVfsJobMountMountable *job,
|
||
|
+ const char *filename,
|
||
|
+ GMountSource *mount_source)
|
||
|
+{
|
||
|
+ GVfsBackendNds *op_backend = G_VFS_BACKEND_NDS (backend);
|
||
|
+
|
||
|
+update_cache (op_backend,filename);
|
||
|
+
|
||
|
+ run_mount_mountable (op_backend,
|
||
|
+ job,
|
||
|
+ filename,
|
||
|
+ mount_source);
|
||
|
+ return TRUE;
|
||
|
+}
|
||
|
+
|
||
|
+static gboolean
|
||
|
+try_mount_mountable (GVfsBackend *backend,
|
||
|
+ GVfsJobMountMountable *job,
|
||
|
+ const char *filename,
|
||
|
+ GMountSource *mount_source)
|
||
|
+{
|
||
|
+ GVfsBackendNds *op_backend = G_VFS_BACKEND_NDS (backend);
|
||
|
+
|
||
|
+
|
||
|
+ if (is_root (filename))
|
||
|
+ {
|
||
|
+ g_vfs_job_failed (G_VFS_JOB (job),
|
||
|
+ G_IO_ERROR, G_IO_ERROR_NOT_MOUNTABLE_FILE,
|
||
|
+ _("The file is not a mountable"));
|
||
|
+ return TRUE;
|
||
|
+ }
|
||
|
+
|
||
|
+update_cache (op_backend,filename);
|
||
|
+
|
||
|
+ run_mount_mountable (op_backend,
|
||
|
+ job,
|
||
|
+ filename,
|
||
|
+ mount_source);
|
||
|
+ return TRUE;
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
+
|
||
|
#define SUB_DELIM_CHARS "!$&'()*+,;="
|
||
|
|
||
|
static gboolean
|
||
|
@@ -482,7 +578,10 @@ get_file_info_from_entry (GVfsBackendNds
|
||
|
g_file_info_set_edit_name (info, entry->name_utf8);
|
||
|
g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL, TRUE);
|
||
|
|
||
|
- icon = g_themed_icon_new ("network-server");
|
||
|
+ if(backend->server == NULL) //NDS-Tree icon
|
||
|
+ icon = g_themed_icon_new ("ncl-ndstree");
|
||
|
+ else
|
||
|
+ icon = g_themed_icon_new ("ncl-nwcontext");
|
||
|
|
||
|
if (icon)
|
||
|
{
|
||
|
@@ -634,7 +733,6 @@ try_enumerate (GVfsBackend *backend,
|
||
|
{
|
||
|
GVfsBackendNds *op_backend = G_VFS_BACKEND_NDS (backend);
|
||
|
|
||
|
-
|
||
|
update_cache (op_backend,filename);
|
||
|
|
||
|
run_enumerate (op_backend, job, filename, matcher);
|
||
|
@@ -648,7 +746,6 @@ g_vfs_backend_nds_class_init (GVfsBacken
|
||
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||
|
GVfsBackendClass *backend_class = G_VFS_BACKEND_CLASS (klass);
|
||
|
|
||
|
-
|
||
|
gobject_class->finalize = g_vfs_backend_nds_finalize;
|
||
|
|
||
|
backend_class->mount = do_mount;
|