Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
61dc7de4
Commit
61dc7de4
authored
Nov 29, 2022
by
Alex Henrie
Committed by
Alexandre Julliard
Nov 30, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mountmgr: Use standard C functions for memory allocation.
parent
9dba420d
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
42 additions
and
60 deletions
+42
-60
device.c
dlls/mountmgr.sys/device.c
+27
-45
mountmgr.c
dlls/mountmgr.sys/mountmgr.c
+15
-15
No files found.
dlls/mountmgr.sys/device.c
View file @
61dc7de4
...
...
@@ -113,24 +113,6 @@ static CRITICAL_SECTION_DEBUG critsect_debug =
};
static
CRITICAL_SECTION
device_section
=
{
&
critsect_debug
,
-
1
,
0
,
0
,
0
,
0
};
static
char
*
strdupA
(
const
char
*
str
)
{
char
*
ret
;
if
(
!
str
)
return
NULL
;
if
((
ret
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
strlen
(
str
)
+
1
)))
strcpy
(
ret
,
str
);
return
ret
;
}
static
WCHAR
*
strdupW
(
const
WCHAR
*
str
)
{
WCHAR
*
ret
;
if
(
!
str
)
return
NULL
;
if
((
ret
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
(
lstrlenW
(
str
)
+
1
)
*
sizeof
(
WCHAR
)
)))
lstrcpyW
(
ret
,
str
);
return
ret
;
}
static
const
GUID
*
get_default_uuid
(
int
letter
)
{
static
GUID
guid
;
...
...
@@ -649,7 +631,7 @@ static NTSTATUS create_disk_device( enum device_type type, struct disk_device **
}
name
.
MaximumLength
=
(
lstrlenW
(
format
)
+
10
)
*
sizeof
(
WCHAR
);
name
.
Buffer
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
name
.
MaximumLength
);
name
.
Buffer
=
malloc
(
name
.
MaximumLength
);
for
(
i
=
first
;
i
<
32
;
i
++
)
{
swprintf
(
name
.
Buffer
,
name
.
MaximumLength
/
sizeof
(
WCHAR
),
format
,
i
);
...
...
@@ -673,7 +655,7 @@ static NTSTATUS create_disk_device( enum device_type type, struct disk_device **
UNICODE_STRING
symlink
;
symlink
.
MaximumLength
=
(
lstrlenW
(
link_format
)
+
10
)
*
sizeof
(
WCHAR
);
if
((
symlink
.
Buffer
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
symlink
.
MaximumLength
)))
if
((
symlink
.
Buffer
=
malloc
(
symlink
.
MaximumLength
)))
{
swprintf
(
symlink
.
Buffer
,
symlink
.
MaximumLength
/
sizeof
(
WCHAR
),
link_format
,
i
);
symlink
.
Length
=
lstrlenW
(
symlink
.
Buffer
)
*
sizeof
(
WCHAR
);
...
...
@@ -732,9 +714,9 @@ static void delete_disk_device( struct disk_device *device )
IoDeleteSymbolicLink
(
&
device
->
symlink
);
RtlFreeUnicodeString
(
&
device
->
symlink
);
}
RtlFreeHeap
(
GetProcessHeap
(),
0
,
device
->
unix_device
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
device
->
unix_mount
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
device
->
serial
);
free
(
device
->
unix_device
);
free
(
device
->
unix_mount
);
free
(
device
->
serial
);
RtlFreeUnicodeString
(
&
device
->
name
);
IoDeleteDevice
(
device
->
dev_obj
);
}
...
...
@@ -758,7 +740,7 @@ static unsigned int release_volume( struct volume *volume )
list_remove
(
&
volume
->
entry
);
if
(
volume
->
mount
)
delete_mount_point
(
volume
->
mount
);
delete_disk_device
(
volume
->
device
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
volume
);
free
(
volume
);
}
return
ret
;
}
...
...
@@ -770,11 +752,11 @@ static void set_volume_udi( struct volume *volume, const char *udi )
{
assert
(
!
volume
->
udi
);
/* having a udi means the HAL side holds an extra reference */
if
((
volume
->
udi
=
strdup
A
(
udi
)))
grab_volume
(
volume
);
if
((
volume
->
udi
=
strdup
(
udi
)))
grab_volume
(
volume
);
}
else
if
(
volume
->
udi
)
{
RtlFreeHeap
(
GetProcessHeap
(),
0
,
volume
->
udi
);
free
(
volume
->
udi
);
volume
->
udi
=
NULL
;
release_volume
(
volume
);
}
...
...
@@ -786,7 +768,7 @@ static NTSTATUS create_volume( const char *udi, enum device_type type, struct vo
struct
volume
*
volume
;
NTSTATUS
status
;
if
(
!
(
volume
=
RtlAllocateHeap
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
*
volume
)
)))
if
(
!
(
volume
=
calloc
(
1
,
sizeof
(
*
volume
)
)))
return
STATUS_NO_MEMORY
;
if
(
!
(
status
=
create_disk_device
(
type
,
&
volume
->
device
,
volume
)))
...
...
@@ -795,7 +777,7 @@ static NTSTATUS create_volume( const char *udi, enum device_type type, struct vo
list_add_tail
(
&
volumes_list
,
&
volume
->
entry
);
*
volume_ret
=
grab_volume
(
volume
);
}
else
RtlFreeHeap
(
GetProcessHeap
(),
0
,
volume
);
else
free
(
volume
);
return
status
;
}
...
...
@@ -807,7 +789,7 @@ static NTSTATUS create_dos_device( struct volume *volume, const char *udi, int l
struct
dos_drive
*
drive
;
NTSTATUS
status
;
if
(
!
(
drive
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
sizeof
(
*
drive
)
)))
return
STATUS_NO_MEMORY
;
if
(
!
(
drive
=
malloc
(
sizeof
(
*
drive
)
)))
return
STATUS_NO_MEMORY
;
drive
->
drive
=
letter
;
drive
->
mount
=
NULL
;
...
...
@@ -824,7 +806,7 @@ static NTSTATUS create_dos_device( struct volume *volume, const char *udi, int l
list_add_tail
(
&
drives_list
,
&
drive
->
entry
);
*
drive_ret
=
drive
;
}
else
RtlFreeHeap
(
GetProcessHeap
(),
0
,
drive
);
else
free
(
drive
);
return
status
;
}
...
...
@@ -835,7 +817,7 @@ static void delete_dos_device( struct dos_drive *drive )
list_remove
(
&
drive
->
entry
);
if
(
drive
->
mount
)
delete_mount_point
(
drive
->
mount
);
release_volume
(
drive
->
volume
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
drive
);
free
(
drive
);
}
/* find a volume that matches the parameters */
...
...
@@ -952,8 +934,8 @@ static void set_dos_devices_disk_serial( struct disk_device *device )
/* copy serial if drive resides on this Unix device */
if
(
devices
&
(
1
<<
drive
->
drive
))
{
HeapFree
(
GetProcessHeap
(),
0
,
drive
->
volume
->
device
->
serial
);
drive
->
volume
->
device
->
serial
=
strdup
A
(
device
->
serial
);
free
(
drive
->
volume
->
device
->
serial
);
drive
->
volume
->
device
->
serial
=
strdup
(
device
->
serial
);
}
}
}
...
...
@@ -986,13 +968,13 @@ static NTSTATUS set_volume_info( struct volume *volume, struct dos_drive *drive,
}
else
{
RtlFreeHeap
(
GetProcessHeap
(),
0
,
disk_device
->
unix_device
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
disk_device
->
unix_mount
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
disk_device
->
serial
);
free
(
disk_device
->
unix_device
);
free
(
disk_device
->
unix_mount
);
free
(
disk_device
->
serial
);
}
disk_device
->
unix_device
=
strdup
A
(
device
);
disk_device
->
unix_mount
=
strdup
A
(
mount_point
);
disk_device
->
serial
=
strdup
A
(
disk_serial
);
disk_device
->
unix_device
=
strdup
(
device
);
disk_device
->
unix_mount
=
strdup
(
mount_point
);
disk_device
->
serial
=
strdup
(
disk_serial
);
set_dos_devices_disk_serial
(
disk_device
);
if
(
!
get_volume_device_info
(
volume
))
...
...
@@ -1467,9 +1449,9 @@ NTSTATUS query_unix_drive( void *buff, SIZE_T insize, SIZE_T outsize, IO_STATUS_
device_type
=
volume
->
device
->
type
;
fs_type
=
get_mountmgr_fs_type
(
volume
->
fs_type
);
serial
=
volume
->
serial
;
device
=
strdup
A
(
volume
->
device
->
unix_device
);
mount_point
=
strdup
A
(
volume
->
device
->
unix_mount
);
label
=
strdupW
(
volume
->
label
);
device
=
strdup
(
volume
->
device
->
unix_device
);
mount_point
=
strdup
(
volume
->
device
->
unix_mount
);
label
=
wcsdup
(
volume
->
label
);
release_volume
(
volume
);
}
LeaveCriticalSection
(
&
device_section
);
...
...
@@ -1532,9 +1514,9 @@ NTSTATUS query_unix_drive( void *buff, SIZE_T insize, SIZE_T outsize, IO_STATUS_
iosb
->
Information
=
ptr
-
(
char
*
)
output
;
if
(
size
>
outsize
)
status
=
STATUS_BUFFER_OVERFLOW
;
RtlFreeHeap
(
GetProcessHeap
(),
0
,
device
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
mount_point
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
label
);
free
(
device
);
free
(
mount_point
);
free
(
label
);
return
status
;
}
...
...
dlls/mountmgr.sys/mountmgr.c
View file @
61dc7de4
...
...
@@ -48,9 +48,9 @@ static HKEY mount_key;
void
set_mount_point_id
(
struct
mount_point
*
mount
,
const
void
*
id
,
unsigned
int
id_len
)
{
RtlFreeHeap
(
GetProcessHeap
(),
0
,
mount
->
id
);
free
(
mount
->
id
);
mount
->
id_len
=
max
(
MIN_ID_LEN
,
id_len
);
if
((
mount
->
id
=
RtlAllocateHeap
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
mount
->
id_len
)))
if
((
mount
->
id
=
calloc
(
mount
->
id_len
,
1
)))
{
memcpy
(
mount
->
id
,
id
,
id_len
);
RegSetValueExW
(
mount_key
,
mount
->
link
.
Buffer
,
0
,
REG_BINARY
,
mount
->
id
,
mount
->
id_len
);
...
...
@@ -65,7 +65,7 @@ static struct mount_point *add_mount_point( DEVICE_OBJECT *device, UNICODE_STRIN
WCHAR
*
str
;
UINT
len
=
(
lstrlenW
(
link
)
+
1
)
*
sizeof
(
WCHAR
)
+
device_name
->
Length
+
sizeof
(
WCHAR
);
if
(
!
(
mount
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
sizeof
(
*
mount
)
+
len
)))
return
NULL
;
if
(
!
(
mount
=
malloc
(
sizeof
(
*
mount
)
+
len
)))
return
NULL
;
str
=
(
WCHAR
*
)(
mount
+
1
);
lstrcpyW
(
str
,
link
);
...
...
@@ -116,8 +116,8 @@ void delete_mount_point( struct mount_point *mount )
list_remove
(
&
mount
->
entry
);
RegDeleteValueW
(
mount_key
,
mount
->
link
.
Buffer
);
IoDeleteSymbolicLink
(
&
mount
->
link
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
mount
->
id
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
mount
);
free
(
mount
->
id
);
free
(
mount
);
}
/* check if a given mount point matches the requested specs */
...
...
@@ -186,7 +186,7 @@ static NTSTATUS query_mount_points( void *buff, SIZE_T insize,
return
STATUS_BUFFER_OVERFLOW
;
}
input
=
HeapAlloc
(
GetProcessHeap
(),
0
,
insize
);
input
=
malloc
(
insize
);
if
(
!
input
)
return
STATUS_NO_MEMORY
;
memcpy
(
input
,
buff
,
insize
);
...
...
@@ -217,7 +217,7 @@ static NTSTATUS query_mount_points( void *buff, SIZE_T insize,
}
info
->
Size
=
pos
;
iosb
->
Information
=
pos
;
HeapFree
(
GetProcessHeap
(),
0
,
input
);
free
(
input
);
return
STATUS_SUCCESS
;
}
...
...
@@ -298,7 +298,7 @@ static NTSTATUS define_shell_folder( const void *in_buff, SIZE_T insize )
for
(;;)
{
if
(
!
(
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
)))
if
(
!
(
buffer
=
malloc
(
size
)))
{
status
=
STATUS_NO_MEMORY
;
goto
done
;
...
...
@@ -307,12 +307,12 @@ static NTSTATUS define_shell_folder( const void *in_buff, SIZE_T insize )
if
(
status
==
STATUS_NO_SUCH_FILE
)
status
=
STATUS_SUCCESS
;
if
(
status
==
STATUS_SUCCESS
)
break
;
if
(
status
!=
STATUS_BUFFER_TOO_SMALL
)
goto
done
;
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
free
(
buffer
);
}
if
(
input
->
create_backup
)
{
if
(
!
(
backup
=
HeapAlloc
(
GetProcessHeap
(),
0
,
strlen
(
buffer
)
+
sizeof
(
".backup"
)
)))
if
(
!
(
backup
=
malloc
(
strlen
(
buffer
)
+
sizeof
(
".backup"
)
)))
{
status
=
STATUS_NO_MEMORY
;
goto
done
;
...
...
@@ -327,8 +327,8 @@ static NTSTATUS define_shell_folder( const void *in_buff, SIZE_T insize )
status
=
MOUNTMGR_CALL
(
set_shell_folder
,
&
params
);
done:
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
HeapFree
(
GetProcessHeap
(),
0
,
backup
);
free
(
buffer
);
free
(
backup
);
return
status
;
}
...
...
@@ -348,7 +348,7 @@ static NTSTATUS query_shell_folder( void *buff, SIZE_T insize, SIZE_T outsize, I
for
(;;)
{
if
(
!
(
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
)))
return
STATUS_NO_MEMORY
;
if
(
!
(
buffer
=
malloc
(
size
)))
return
STATUS_NO_MEMORY
;
status
=
wine_nt_to_unix_file_name
(
&
attr
,
buffer
,
&
size
,
FILE_OPEN
);
if
(
!
status
)
{
...
...
@@ -358,10 +358,10 @@ static NTSTATUS query_shell_folder( void *buff, SIZE_T insize, SIZE_T outsize, I
break
;
}
if
(
status
!=
STATUS_BUFFER_TOO_SMALL
)
break
;
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
free
(
buffer
);
}
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
free
(
buffer
);
return
status
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment