----- Original Message ----- > Hi, > > On Wed, May 25, 2016 at 03:51:43PM +0200, Lukáš Venhoda wrote: > > From: Lukas Venhoda <lvenhoda@xxxxxxxxxx> > > > > Check whether Spice Folder is already mapped. > > If yes, don't try to map another one. > > --- > > Changes since v6: > > - Removed empty line > > > > Changes since v5: > > - fixed indentation > > - fixed * indentaion > > > > 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 > > Acked-by: Victor Toso <victortoso@xxxxxxxxxx> > > > --- > > 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 9783459..216d895 100644 > > --- a/spice/spice-webdavd.c > > +++ b/spice/spice-webdavd.c > > @@ -776,6 +776,42 @@ get_free_drive_letter(void) > > return 0; > > } > > > > +static gchar > > +get_spice_folder_letter(void) > > +{ > > + const guint32 max_mask = 1 << 25; > > + gchar local_name[3] = "z:"; > > + gchar *spice_folder_name; > > + 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) Rather than the user name of the driver, it would be more reliable to check the connection details, with a function such as WNetGetResourceInformation(). (I haven't looked in details if this is the right function) > > == 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) > > @@ -871,10 +907,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@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/spice-devel > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel