Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
0ed9db27
Commit
0ed9db27
authored
Apr 17, 2008
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
setupapi: Add support for creating directories from the FakeDlls section.
parent
05e55edd
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
21 deletions
+29
-21
fakedll.c
dlls/setupapi/fakedll.c
+29
-21
No files found.
dlls/setupapi/fakedll.c
View file @
0ed9db27
...
...
@@ -276,6 +276,27 @@ static BOOL is_fake_dll( HANDLE h )
return
!
memcmp
(
dos
+
1
,
fakedll_signature
,
sizeof
(
fakedll_signature
)
);
}
/* create directories leading to a given file */
static
void
create_directories
(
const
WCHAR
*
name
)
{
WCHAR
*
path
,
*
p
;
/* create the directory/directories */
path
=
HeapAlloc
(
GetProcessHeap
(),
0
,
(
strlenW
(
name
)
+
1
)
*
sizeof
(
WCHAR
));
strcpyW
(
path
,
name
);
p
=
strchrW
(
path
,
'\\'
);
while
(
p
!=
NULL
)
{
*
p
=
0
;
if
(
!
CreateDirectoryW
(
path
,
NULL
))
TRACE
(
"Couldn't create directory %s - error: %d
\n
"
,
wine_dbgstr_w
(
path
),
GetLastError
());
*
p
=
'\\'
;
p
=
strchrW
(
p
+
1
,
'\\'
);
}
HeapFree
(
GetProcessHeap
(),
0
,
path
);
}
/***********************************************************************
* create_fake_dll
*/
...
...
@@ -285,6 +306,13 @@ BOOL create_fake_dll( const WCHAR *name, const WCHAR *source )
HMODULE
module
;
BOOL
ret
;
/* check for empty name which means to only create the directory */
if
(
name
[
strlenW
(
name
)
-
1
]
==
'\\'
)
{
create_directories
(
name
);
return
TRUE
;
}
/* first check for an existing file */
h
=
CreateFileW
(
name
,
GENERIC_READ
|
GENERIC_WRITE
,
0
,
NULL
,
OPEN_EXISTING
,
0
,
NULL
);
if
(
h
!=
INVALID_HANDLE_VALUE
)
...
...
@@ -301,27 +329,7 @@ BOOL create_fake_dll( const WCHAR *name, const WCHAR *source )
}
else
{
if
(
GetLastError
()
==
ERROR_PATH_NOT_FOUND
)
{
WCHAR
*
path
;
WCHAR
*
pathel
;
/* create the directory/directories */
path
=
HeapAlloc
(
GetProcessHeap
(),
0
,
(
strlenW
(
name
)
+
1
)
*
sizeof
(
WCHAR
));
strcpyW
(
path
,
name
);
pathel
=
strchrW
(
path
,
'\\'
);
while
(
pathel
!=
NULL
)
{
*
pathel
=
0
;
if
(
!
CreateDirectoryW
(
path
,
NULL
))
TRACE
(
"Couldn't create directory %s - error: %d
\n
"
,
wine_dbgstr_w
(
path
),
GetLastError
());
*
pathel
=
'\\'
;
pathel
=
strchrW
(
pathel
+
1
,
'\\'
);
}
HeapFree
(
GetProcessHeap
(),
0
,
path
);
}
if
(
GetLastError
()
==
ERROR_PATH_NOT_FOUND
)
create_directories
(
name
);
h
=
CreateFileW
(
name
,
GENERIC_WRITE
,
0
,
NULL
,
CREATE_NEW
,
0
,
NULL
);
if
(
h
==
INVALID_HANDLE_VALUE
)
...
...
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