Module: wine Branch: master Commit: 878459383a28e534d99bfaf3f32fd7c8d78a194c URL: http://source.winehq.org/git/wine.git/?a=commit;h=878459383a28e534d99bfaf3f3...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Jul 22 17:49:39 2009 +0200
mountmgr: Optionally update the drive mount point in set_volume_info.
---
dlls/mountmgr.sys/device.c | 37 ++++++++++++++++++++----------------- 1 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/dlls/mountmgr.sys/device.c b/dlls/mountmgr.sys/device.c index 7b235ec..682808a 100644 --- a/dlls/mountmgr.sys/device.c +++ b/dlls/mountmgr.sys/device.c @@ -352,9 +352,11 @@ static void delete_dos_device( struct dos_drive *drive ) }
/* change the information for an existing volume */ -static NTSTATUS set_volume_info( struct volume *volume, const char *device, const char *mount_point, - enum device_type type, const GUID *guid ) +static NTSTATUS set_volume_info( struct volume *volume, struct dos_drive *drive, const char *device, + const char *mount_point, enum device_type type, const GUID *guid ) { + void *id = NULL; + unsigned int id_len = 0; struct disk_device *disk_device = volume->device; NTSTATUS status;
@@ -366,6 +368,11 @@ static NTSTATUS set_volume_info( struct volume *volume, const char *device, cons delete_mount_point( volume->mount ); volume->mount = NULL; } + if (drive && drive->mount) + { + delete_mount_point( drive->mount ); + drive->mount = NULL; + } delete_disk_device( volume->device ); volume->device = disk_device; } @@ -389,19 +396,17 @@ static NTSTATUS set_volume_info( struct volume *volume, const char *device, cons
if (!volume->mount) volume->mount = add_volume_mount_point( disk_device->dev_obj, &disk_device->name, &volume->guid ); + if (drive && !drive->mount) + drive->mount = add_dosdev_mount_point( disk_device->dev_obj, &disk_device->name, drive->drive );
- if (volume->mount) + if (disk_device->unix_mount) { - void *id = NULL; - unsigned int id_len = 0; - - if (disk_device->unix_mount) - { - id = disk_device->unix_mount; - id_len = strlen( disk_device->unix_mount ) + 1; - } - set_mount_point_id( volume->mount, id, id_len ); + id = disk_device->unix_mount; + id_len = strlen( disk_device->unix_mount ) + 1; } + if (volume->mount) set_mount_point_id( volume->mount, id, id_len ); + if (drive && drive->mount) set_mount_point_id( drive->mount, id, id_len ); + return STATUS_SUCCESS; }
@@ -593,10 +598,8 @@ static void create_drive_devices(void)
if (!create_dos_device( NULL, drive_type, &drive )) { - drive->volume->device->unix_mount = link; - drive->volume->device->unix_device = device; - drive->volume->guid = *get_default_uuid( i ); - set_drive_letter( drive, i ); + drive->drive = i; + set_volume_info( drive->volume, drive, device, link, drive_type, get_default_uuid(i) ); } else { @@ -624,7 +627,7 @@ NTSTATUS add_volume( const char *udi, const char *device, const char *mount_poin if ((status = create_volume( udi, type, &volume ))) return status;
found: - return set_volume_info( volume, device, mount_point, type, guid ); + return set_volume_info( volume, NULL, device, mount_point, type, guid ); }
/* create a new disk volume */