[gvfs] afp: use UTF-8 ServerName if available



commit aec7c42dc109e3cf19cfbe25c0a2b1aa6d56e8b0
Author: Carl-Anton Ingmarsson <ca ingmarsson gmail com>
Date:   Mon Jun 20 12:52:14 2011 +0200

    afp: use UTF-8 ServerName if available

 daemon/gvfsafpconnection.c    |   12 ++++++++++++
 daemon/gvfsafpconnection.h    |    2 ++
 daemon/gvfsafpserver.c        |    8 +++++---
 daemon/gvfsafpserver.h        |    2 +-
 daemon/gvfsbackendafp.c       |   10 ++++++++--
 daemon/gvfsbackendafpbrowse.c |   10 ++++++++--
 6 files changed, 36 insertions(+), 8 deletions(-)
---
diff --git a/daemon/gvfsafpconnection.c b/daemon/gvfsafpconnection.c
index 4745406..a10eea6 100644
--- a/daemon/gvfsafpconnection.c
+++ b/daemon/gvfsafpconnection.c
@@ -50,6 +50,18 @@ g_vfs_afp_name_ref (GVfsAfpName *afp_name)
   g_atomic_int_inc (&afp_name->ref_count);
 }
 
+char *
+g_vfs_afp_name_get_string (GVfsAfpName *afp_name)
+{
+  char *str;
+
+  str = g_malloc (afp_name->len + 1);
+  memcpy (str, afp_name->str, afp_name->len);
+  str[afp_name->len] = 0;
+
+  return str;
+}
+
 GVfsAfpName *
 g_vfs_afp_name_new (guint32 text_encoding, const gchar *str, gsize len)
 {
diff --git a/daemon/gvfsafpconnection.h b/daemon/gvfsafpconnection.h
index f508bc0..3f92c9b 100644
--- a/daemon/gvfsafpconnection.h
+++ b/daemon/gvfsafpconnection.h
@@ -229,6 +229,8 @@ GVfsAfpName* g_vfs_afp_name_new_from_gstring (guint32 text_encoding, GString *st
 void         g_vfs_afp_name_unref            (GVfsAfpName *afp_name);
 void         g_vfs_afp_name_ref              (GVfsAfpName *afp_name);
 
+char*        g_vfs_afp_name_get_string       (GVfsAfpName *afp_name);
+
 /*
  * GVfsAfpReply
  */
diff --git a/daemon/gvfsafpserver.c b/daemon/gvfsafpserver.c
index 504e25c..d76b8f0 100644
--- a/daemon/gvfsafpserver.c
+++ b/daemon/gvfsafpserver.c
@@ -695,13 +695,16 @@ get_server_info (GVfsAfpServer *afp_serv,
   /* Parse UTF-8 ServerName */
   if (afp_serv->flags & (0x1 << 8)) {
     guint16 UTF8ServerName_offset;
+    GVfsAfpName *utf8_server_name;
 
     g_vfs_afp_reply_skip_to_even (reply);
     g_vfs_afp_reply_seek (reply, 6, G_SEEK_CUR);
     g_vfs_afp_reply_read_uint16 (reply, &UTF8ServerName_offset);
 
     g_vfs_afp_reply_seek (reply, UTF8ServerName_offset, G_SEEK_SET);
-    g_vfs_afp_reply_read_afp_name (reply, FALSE, &afp_serv->utf8_server_name);
+    g_vfs_afp_reply_read_afp_name (reply, FALSE, &utf8_server_name);
+    afp_serv->utf8_server_name = g_vfs_afp_name_get_string (utf8_server_name);
+    g_vfs_afp_name_unref (utf8_server_name);
   }
     
   /* Parse MachineType */
@@ -942,8 +945,7 @@ g_vfs_afp_server_finalize (GObject *object)
   
   g_free (afp_serv->machine_type);
   g_free (afp_serv->server_name);
-  if (afp_serv->utf8_server_name)
-    g_vfs_afp_name_unref (afp_serv->utf8_server_name);
+  g_free (afp_serv->utf8_server_name);
   
   g_slist_free_full (afp_serv->uams, g_free);
 
diff --git a/daemon/gvfsafpserver.h b/daemon/gvfsafpserver.h
index 0357ddf..545997a 100644
--- a/daemon/gvfsafpserver.h
+++ b/daemon/gvfsafpserver.h
@@ -64,7 +64,7 @@ struct _GVfsAfpServer
   guint16             flags;
   char                *machine_type;
   char                *server_name;
-  GVfsAfpName         *utf8_server_name;
+  char                *utf8_server_name;
   GSList              *uams;
   AfpVersion          version;
 };
diff --git a/daemon/gvfsbackendafp.c b/daemon/gvfsbackendafp.c
index b8faa98..b17a029 100644
--- a/daemon/gvfsbackendafp.c
+++ b/daemon/gvfsbackendafp.c
@@ -222,6 +222,7 @@ do_mount (GVfsBackend *backend,
   AfpResultCode res_code;
   
   GMountSpec *afp_mount_spec;
+  char       *server_name;
   char       *display_name;
 
   afp_backend->server = g_vfs_afp_server_new (afp_backend->addr);
@@ -282,13 +283,18 @@ do_mount (GVfsBackend *backend,
   g_vfs_backend_set_mount_spec (backend, afp_mount_spec);
   g_mount_spec_unref (afp_mount_spec);
 
+  if (afp_backend->server->utf8_server_name)
+    server_name = afp_backend->server->utf8_server_name;
+  else
+    server_name = afp_backend->server->server_name;
+  
   if (afp_backend->user)
     display_name = g_strdup_printf (_("AFP volume %s for %s on %s"), 
                                     afp_backend->volume, afp_backend->user,
-                                    afp_backend->server->server_name);
+                                    server_name);
   else
     display_name = g_strdup_printf (_("AFP volume %s on %s"),
-                                    afp_backend->volume, afp_backend->server->server_name);
+                                    afp_backend->volume, server_name);
   
   g_vfs_backend_set_display_name (backend, display_name);
   g_free (display_name);
diff --git a/daemon/gvfsbackendafpbrowse.c b/daemon/gvfsbackendafpbrowse.c
index 02b9ab9..db9ed62 100644
--- a/daemon/gvfsbackendafpbrowse.c
+++ b/daemon/gvfsbackendafpbrowse.c
@@ -444,6 +444,7 @@ do_mount (GVfsBackend *backend,
   GError *err = NULL;
 
   GMountSpec *afp_mount_spec;
+  char       *server_name;
   char       *display_name;
 
   afp_backend->server = g_vfs_afp_server_new (afp_backend->addr);
@@ -463,12 +464,17 @@ do_mount (GVfsBackend *backend,
   g_vfs_backend_set_mount_spec (backend, afp_mount_spec);
   g_mount_spec_unref (afp_mount_spec);
 
+  if (afp_backend->server->utf8_server_name)
+    server_name = afp_backend->server->utf8_server_name;
+  else
+    server_name = afp_backend->server->server_name;
+  
   if (afp_backend->user)
     display_name = g_strdup_printf (_("AFP shares for %s on %s"), afp_backend->user,
-                                    afp_backend->server->server_name);
+                                    server_name);
   else
     display_name = g_strdup_printf (_("AFP shares on %s"),
-                                    afp_backend->server->server_name);
+                                    server_name);
   g_vfs_backend_set_display_name (backend, display_name);
   g_free (display_name);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]