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
e96695a6
Commit
e96695a6
authored
Aug 24, 2007
by
Stefan Leichter
Committed by
Alexandre Julliard
Aug 27, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msi: Remove 'recursive registry key delete' function.
parent
5987d3a3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
8 additions
and
68 deletions
+8
-68
regsvr.c
dlls/msi/regsvr.c
+8
-68
No files found.
dlls/msi/regsvr.c
View file @
e96695a6
...
@@ -135,9 +135,6 @@ static LONG register_key_defvalueA(HKEY base, WCHAR const *name,
...
@@ -135,9 +135,6 @@ static LONG register_key_defvalueA(HKEY base, WCHAR const *name,
static
LONG
register_progid
(
WCHAR
const
*
clsid
,
static
LONG
register_progid
(
WCHAR
const
*
clsid
,
char
const
*
progid
,
char
const
*
curver_progid
,
char
const
*
progid
,
char
const
*
curver_progid
,
char
const
*
name
,
char
const
*
extra
);
char
const
*
name
,
char
const
*
extra
);
static
LONG
recursive_delete_key
(
HKEY
key
);
static
LONG
recursive_delete_keyA
(
HKEY
base
,
char
const
*
name
);
static
LONG
recursive_delete_keyW
(
HKEY
base
,
WCHAR
const
*
name
);
/***********************************************************************
/***********************************************************************
* register_interfaces
* register_interfaces
...
@@ -224,7 +221,8 @@ static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
...
@@ -224,7 +221,8 @@ static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
WCHAR
buf
[
39
];
WCHAR
buf
[
39
];
StringFromGUID2
(
list
->
iid
,
buf
,
39
);
StringFromGUID2
(
list
->
iid
,
buf
,
39
);
res
=
recursive_delete_keyW
(
interface_key
,
buf
);
res
=
RegDeleteTreeW
(
interface_key
,
buf
);
if
(
res
==
ERROR_FILE_NOT_FOUND
)
res
=
ERROR_SUCCESS
;
}
}
RegCloseKey
(
interface_key
);
RegCloseKey
(
interface_key
);
...
@@ -346,16 +344,19 @@ static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
...
@@ -346,16 +344,19 @@ static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
WCHAR
buf
[
39
];
WCHAR
buf
[
39
];
StringFromGUID2
(
list
->
clsid
,
buf
,
39
);
StringFromGUID2
(
list
->
clsid
,
buf
,
39
);
res
=
recursive_delete_keyW
(
coclass_key
,
buf
);
res
=
RegDeleteTreeW
(
coclass_key
,
buf
);
if
(
res
==
ERROR_FILE_NOT_FOUND
)
res
=
ERROR_SUCCESS
;
if
(
res
!=
ERROR_SUCCESS
)
goto
error_close_coclass_key
;
if
(
res
!=
ERROR_SUCCESS
)
goto
error_close_coclass_key
;
if
(
list
->
progid
)
{
if
(
list
->
progid
)
{
res
=
recursive_delete_keyA
(
HKEY_CLASSES_ROOT
,
list
->
progid
);
res
=
RegDeleteTreeA
(
HKEY_CLASSES_ROOT
,
list
->
progid
);
if
(
res
==
ERROR_FILE_NOT_FOUND
)
res
=
ERROR_SUCCESS
;
if
(
res
!=
ERROR_SUCCESS
)
goto
error_close_coclass_key
;
if
(
res
!=
ERROR_SUCCESS
)
goto
error_close_coclass_key
;
}
}
if
(
list
->
viprogid
)
{
if
(
list
->
viprogid
)
{
res
=
recursive_delete_keyA
(
HKEY_CLASSES_ROOT
,
list
->
viprogid
);
res
=
RegDeleteTreeA
(
HKEY_CLASSES_ROOT
,
list
->
viprogid
);
if
(
res
==
ERROR_FILE_NOT_FOUND
)
res
=
ERROR_SUCCESS
;
if
(
res
!=
ERROR_SUCCESS
)
goto
error_close_coclass_key
;
if
(
res
!=
ERROR_SUCCESS
)
goto
error_close_coclass_key
;
}
}
}
}
...
@@ -464,67 +465,6 @@ error_close_progid_key:
...
@@ -464,67 +465,6 @@ error_close_progid_key:
}
}
/***********************************************************************
/***********************************************************************
* recursive_delete_key
*/
static
LONG
recursive_delete_key
(
HKEY
key
)
{
LONG
res
;
WCHAR
subkey_name
[
MAX_PATH
];
DWORD
cName
;
HKEY
subkey
;
for
(;;)
{
cName
=
sizeof
(
subkey_name
)
/
sizeof
(
WCHAR
);
res
=
RegEnumKeyExW
(
key
,
0
,
subkey_name
,
&
cName
,
NULL
,
NULL
,
NULL
,
NULL
);
if
(
res
!=
ERROR_SUCCESS
&&
res
!=
ERROR_MORE_DATA
)
{
res
=
ERROR_SUCCESS
;
/* presumably we're done enumerating */
break
;
}
res
=
RegOpenKeyExW
(
key
,
subkey_name
,
0
,
KEY_READ
|
KEY_WRITE
,
&
subkey
);
if
(
res
==
ERROR_FILE_NOT_FOUND
)
continue
;
if
(
res
!=
ERROR_SUCCESS
)
break
;
res
=
recursive_delete_key
(
subkey
);
RegCloseKey
(
subkey
);
if
(
res
!=
ERROR_SUCCESS
)
break
;
}
if
(
res
==
ERROR_SUCCESS
)
res
=
RegDeleteKeyW
(
key
,
0
);
return
res
;
}
/***********************************************************************
* recursive_delete_keyA
*/
static
LONG
recursive_delete_keyA
(
HKEY
base
,
char
const
*
name
)
{
LONG
res
;
HKEY
key
;
res
=
RegOpenKeyExA
(
base
,
name
,
0
,
KEY_READ
|
KEY_WRITE
,
&
key
);
if
(
res
==
ERROR_FILE_NOT_FOUND
)
return
ERROR_SUCCESS
;
if
(
res
!=
ERROR_SUCCESS
)
return
res
;
res
=
recursive_delete_key
(
key
);
RegCloseKey
(
key
);
return
res
;
}
/***********************************************************************
* recursive_delete_keyW
*/
static
LONG
recursive_delete_keyW
(
HKEY
base
,
WCHAR
const
*
name
)
{
LONG
res
;
HKEY
key
;
res
=
RegOpenKeyExW
(
base
,
name
,
0
,
KEY_READ
|
KEY_WRITE
,
&
key
);
if
(
res
==
ERROR_FILE_NOT_FOUND
)
return
ERROR_SUCCESS
;
if
(
res
!=
ERROR_SUCCESS
)
return
res
;
res
=
recursive_delete_key
(
key
);
RegCloseKey
(
key
);
return
res
;
}
/***********************************************************************
* coclass list
* coclass list
*/
*/
static
struct
regsvr_coclass
const
coclass_list
[]
=
{
static
struct
regsvr_coclass
const
coclass_list
[]
=
{
...
...
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