[Spice-devel] [phodav PATCH 2/3 v5] spice-webdavd-windows: Check for mapped shared folder

Victor Toso lists at victortoso.com
Fri Apr 8 06:54:15 UTC 2016


Hi,

On Thu, Apr 07, 2016 at 05:44:52PM +0200, Lukas Venhoda wrote:
> Check whether Spice Folder is already mapped.
> If yes, don't try to map another one.
> ---
> Changes since v4:
>  - Moved some variables around
>  - Better debug message
>  - Fixed bug, that would cause the folder not to mount automatically
> 
> Changes since v3:
>  - changed function is_spice_folder_mapped to get_spice_folder_letter
>     - Now returns the mapped folder drive letter
>     - This can be used to call unmap_drive
>     - No need for global variable drive_letter
>  - Better handeling of adress string
>     - No hardcoded port
>  - Syntax cleanup
> 
> Changes since v2:
>  - New patch
> ---
>  spice/spice-webdavd.c | 49 +++++++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 45 insertions(+), 4 deletions(-)
> 
> diff --git a/spice/spice-webdavd.c b/spice/spice-webdavd.c
> index 6c2e53f..571600e 100644
> --- a/spice/spice-webdavd.c
> +++ b/spice/spice-webdavd.c
> @@ -775,6 +775,42 @@ get_free_drive_letter(void)
>    return 0;
>  }
> 
> +static gchar
> +get_spice_folder_letter(void)
> +{
> +  const guint32 max_mask = 1 << 25;
> +  gchar local_name[MAX_DRIVE_LETTER_SIZE] = "z:";
> +  gchar * spice_folder_name;

Same comment about '*' ;)

Looks good other than that,
Acked-by: Victor Toso <victortoso at redhat.com>

> +  gchar spice_folder_letter = 0;
> +  guint32 drives;
> +  guint32 i;
> +
> +  drives = GetLogicalDrives ();
> +  spice_folder_name = g_strdup_printf("\\\\localhost@%d\\DavWWWRoot", port);
> +
> +  for (i = 0; i < 26; i++)
> +  {
> +    gchar remote_name[MAX_SHARED_FOLDER_NAME_SIZE];
> +    guint32 size = sizeof(remote_name);
> +    guint32 mask = max_mask >> i;
> +    if (drives & mask)
> +    {
> +      local_name[0] = 'z' - i;
> +      if ((WNetGetConnection (local_name, remote_name, (LPDWORD)&size) == NO_ERROR) &&
> +          (g_strcmp0 (remote_name, spice_folder_name) == 0))
> +      {
> +        spice_folder_letter = local_name[0];
> +        g_debug ("Found Spice Shared Folder at %c drive", spice_folder_letter);
> +        break;
> +      }
> +    }
> +  }
> +
> +  g_free(spice_folder_name);
> +
> +  return spice_folder_letter;
> +}
> +
>  /* User is required to call netresource_free, when no longer needed. */
>  static void
>  netresource_init(NETRESOURCE * net_resource, const gchar drive_letter)
> @@ -864,10 +900,15 @@ run_service (void)
>  #ifdef G_OS_WIN32
>    MapDriveData map_drive_data;
>    map_drive_data.cancel_map = g_cancellable_new ();
> -  GTask * map_drive_task = g_task_new (NULL, NULL, NULL, NULL);
> -  g_task_set_task_data (map_drive_task, &map_drive_data, NULL);
> -  g_task_run_in_thread (map_drive_task, map_drive_cb);
> -  g_object_unref (map_drive_task);
> +  gchar drive_letter = get_spice_folder_letter ();
> +
> +  if (drive_letter == 0)
> +  {
> +    GTask * map_drive_task = g_task_new (NULL, NULL, NULL, NULL);
> +    g_task_set_task_data (map_drive_task, &map_drive_data, NULL);
> +    g_task_run_in_thread (map_drive_task, map_drive_cb);
> +    g_object_unref (map_drive_task);
> +  }
>  #endif
> 
>    g_socket_service_start (socket_service);
> --
> 2.5.5
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list