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
fee495d5
Commit
fee495d5
authored
Nov 04, 2012
by
Nikolay Sivov
Committed by
Alexandre Julliard
Nov 05, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
scrrun: Added a stub for IFolder interface.
parent
f43b49fb
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
362 additions
and
7 deletions
+362
-7
filesystem.c
dlls/scrrun/filesystem.c
+320
-5
scrrun.c
dlls/scrrun/scrrun.c
+1
-0
scrrun_private.h
dlls/scrrun/scrrun_private.h
+11
-0
filesystem.c
dlls/scrrun/tests/filesystem.c
+30
-2
No files found.
dlls/scrrun/filesystem.c
View file @
fee495d5
...
...
@@ -24,6 +24,7 @@
#include "windef.h"
#include "winbase.h"
#include "ole2.h"
#include "olectl.h"
#include "dispex.h"
#include "scrrun.h"
#include "scrrun_private.h"
...
...
@@ -32,6 +33,309 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
scrrun
);
struct
folder
{
IFolder
IFolder_iface
;
LONG
ref
;
};
static
inline
struct
folder
*
impl_from_IFolder
(
IFolder
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
struct
folder
,
IFolder_iface
);
}
static
HRESULT
WINAPI
folder_QueryInterface
(
IFolder
*
iface
,
REFIID
riid
,
void
**
obj
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
TRACE
(
"(%p)->(%s %p)
\n
"
,
This
,
debugstr_guid
(
riid
),
obj
);
*
obj
=
NULL
;
if
(
IsEqualGUID
(
riid
,
&
IID_IFolder
)
||
IsEqualGUID
(
riid
,
&
IID_IUnknown
))
{
*
obj
=
iface
;
IFolder_AddRef
(
iface
);
}
else
return
E_NOINTERFACE
;
return
S_OK
;
}
static
ULONG
WINAPI
folder_AddRef
(
IFolder
*
iface
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
This
->
ref
);
TRACE
(
"(%p)->(%d)
\n
"
,
This
,
ref
);
return
ref
;
}
static
ULONG
WINAPI
folder_Release
(
IFolder
*
iface
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
This
->
ref
);
TRACE
(
"(%p)->(%d)
\n
"
,
This
,
ref
);
if
(
!
ref
)
heap_free
(
This
);
return
ref
;
}
static
HRESULT
WINAPI
folder_GetTypeInfoCount
(
IFolder
*
iface
,
UINT
*
pctinfo
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
pctinfo
);
*
pctinfo
=
1
;
return
S_OK
;
}
static
HRESULT
WINAPI
folder_GetTypeInfo
(
IFolder
*
iface
,
UINT
iTInfo
,
LCID
lcid
,
ITypeInfo
**
ppTInfo
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
TRACE
(
"(%p)->(%u %u %p)
\n
"
,
This
,
iTInfo
,
lcid
,
ppTInfo
);
return
get_typeinfo
(
IFolder_tid
,
ppTInfo
);
}
static
HRESULT
WINAPI
folder_GetIDsOfNames
(
IFolder
*
iface
,
REFIID
riid
,
LPOLESTR
*
rgszNames
,
UINT
cNames
,
LCID
lcid
,
DISPID
*
rgDispId
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
ITypeInfo
*
typeinfo
;
HRESULT
hr
;
TRACE
(
"(%p)->(%s %p %u %u %p)
\n
"
,
This
,
debugstr_guid
(
riid
),
rgszNames
,
cNames
,
lcid
,
rgDispId
);
hr
=
get_typeinfo
(
IFolder_tid
,
&
typeinfo
);
if
(
SUCCEEDED
(
hr
))
{
hr
=
ITypeInfo_GetIDsOfNames
(
typeinfo
,
rgszNames
,
cNames
,
rgDispId
);
ITypeInfo_Release
(
typeinfo
);
}
return
hr
;
}
static
HRESULT
WINAPI
folder_Invoke
(
IFolder
*
iface
,
DISPID
dispIdMember
,
REFIID
riid
,
LCID
lcid
,
WORD
wFlags
,
DISPPARAMS
*
pDispParams
,
VARIANT
*
pVarResult
,
EXCEPINFO
*
pExcepInfo
,
UINT
*
puArgErr
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
ITypeInfo
*
typeinfo
;
HRESULT
hr
;
TRACE
(
"(%p)->(%d %s %d %d %p %p %p %p)
\n
"
,
This
,
dispIdMember
,
debugstr_guid
(
riid
),
lcid
,
wFlags
,
pDispParams
,
pVarResult
,
pExcepInfo
,
puArgErr
);
hr
=
get_typeinfo
(
IFolder_tid
,
&
typeinfo
);
if
(
SUCCEEDED
(
hr
))
{
hr
=
ITypeInfo_Invoke
(
typeinfo
,
iface
,
dispIdMember
,
wFlags
,
pDispParams
,
pVarResult
,
pExcepInfo
,
puArgErr
);
ITypeInfo_Release
(
typeinfo
);
}
return
hr
;
}
static
HRESULT
WINAPI
folder_get_Path
(
IFolder
*
iface
,
BSTR
*
path
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
path
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_Name
(
IFolder
*
iface
,
BSTR
*
name
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
name
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_put_Name
(
IFolder
*
iface
,
BSTR
name
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%s): stub
\n
"
,
This
,
debugstr_w
(
name
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_ShortPath
(
IFolder
*
iface
,
BSTR
*
path
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
path
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_ShortName
(
IFolder
*
iface
,
BSTR
*
name
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
name
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_Drive
(
IFolder
*
iface
,
IDrive
**
drive
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
drive
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_ParentFolder
(
IFolder
*
iface
,
IFolder
**
parent
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
parent
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_Attributes
(
IFolder
*
iface
,
FileAttribute
*
attr
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
attr
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_put_Attributes
(
IFolder
*
iface
,
FileAttribute
attr
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(0x%x): stub
\n
"
,
This
,
attr
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_DateCreated
(
IFolder
*
iface
,
DATE
*
date
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
date
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_DateLastModified
(
IFolder
*
iface
,
DATE
*
date
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
date
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_DateLastAccessed
(
IFolder
*
iface
,
DATE
*
date
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
date
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_Type
(
IFolder
*
iface
,
BSTR
*
type
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
type
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_Delete
(
IFolder
*
iface
,
VARIANT_BOOL
force
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%x): stub
\n
"
,
This
,
force
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_Copy
(
IFolder
*
iface
,
BSTR
dest
,
VARIANT_BOOL
overwrite
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%s %x): stub
\n
"
,
This
,
debugstr_w
(
dest
),
overwrite
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_Move
(
IFolder
*
iface
,
BSTR
dest
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%s): stub
\n
"
,
This
,
debugstr_w
(
dest
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_IsRootFolder
(
IFolder
*
iface
,
VARIANT_BOOL
*
isroot
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
isroot
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_Size
(
IFolder
*
iface
,
VARIANT
*
size
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
size
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_SubFolders
(
IFolder
*
iface
,
IFolderCollection
**
folders
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
folders
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_get_Files
(
IFolder
*
iface
,
IFileCollection
**
files
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
files
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
folder_CreateTextFile
(
IFolder
*
iface
,
BSTR
filename
,
VARIANT_BOOL
overwrite
,
VARIANT_BOOL
unicode
,
ITextStream
**
stream
)
{
struct
folder
*
This
=
impl_from_IFolder
(
iface
);
FIXME
(
"(%p)->(%s %x %x %p): stub
\n
"
,
This
,
debugstr_w
(
filename
),
overwrite
,
unicode
,
stream
);
return
E_NOTIMPL
;
}
static
const
IFolderVtbl
foldervtbl
=
{
folder_QueryInterface
,
folder_AddRef
,
folder_Release
,
folder_GetTypeInfoCount
,
folder_GetTypeInfo
,
folder_GetIDsOfNames
,
folder_Invoke
,
folder_get_Path
,
folder_get_Name
,
folder_put_Name
,
folder_get_ShortPath
,
folder_get_ShortName
,
folder_get_Drive
,
folder_get_ParentFolder
,
folder_get_Attributes
,
folder_put_Attributes
,
folder_get_DateCreated
,
folder_get_DateLastModified
,
folder_get_DateLastAccessed
,
folder_get_Type
,
folder_Delete
,
folder_Copy
,
folder_Move
,
folder_get_IsRootFolder
,
folder_get_Size
,
folder_get_SubFolders
,
folder_get_Files
,
folder_CreateTextFile
};
static
HRESULT
create_folder
(
IFolder
**
folder
)
{
struct
folder
*
This
;
This
=
heap_alloc
(
sizeof
(
struct
folder
));
if
(
!
This
)
return
E_OUTOFMEMORY
;
This
->
IFolder_iface
.
lpVtbl
=
&
foldervtbl
;
This
->
ref
=
1
;
*
folder
=
&
This
->
IFolder_iface
;
return
S_OK
;
}
static
HRESULT
WINAPI
filesys_QueryInterface
(
IFileSystem3
*
iface
,
REFIID
riid
,
void
**
ppvObject
)
{
TRACE
(
"%p %s %p
\n
"
,
iface
,
debugstr_guid
(
riid
),
ppvObject
);
...
...
@@ -92,7 +396,8 @@ static HRESULT WINAPI filesys_GetTypeInfo(IFileSystem3 *iface, UINT iTInfo,
LCID
lcid
,
ITypeInfo
**
ppTInfo
)
{
TRACE
(
"(%p)->(%u %u %p)
\n
"
,
iface
,
iTInfo
,
lcid
,
ppTInfo
);
return
get_typeinfo
(
IFileSystem3_tid
,
ppTInfo
);}
return
get_typeinfo
(
IFileSystem3_tid
,
ppTInfo
);
}
static
HRESULT
WINAPI
filesys_GetIDsOfNames
(
IFileSystem3
*
iface
,
REFIID
riid
,
LPOLESTR
*
rgszNames
,
UINT
cNames
,
...
...
@@ -319,12 +624,22 @@ static HRESULT WINAPI filesys_CopyFolder(IFileSystem3 *iface, BSTR Source,
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
filesys_CreateFolder
(
IFileSystem3
*
iface
,
BSTR
P
ath
,
IFolder
**
pp
folder
)
static
HRESULT
WINAPI
filesys_CreateFolder
(
IFileSystem3
*
iface
,
BSTR
p
ath
,
IFolder
**
folder
)
{
FIXME
(
"%p %s %p
\n
"
,
iface
,
debugstr_w
(
Path
),
ppfolder
)
;
BOOL
ret
;
return
E_NOTIMPL
;
TRACE
(
"(%p)->(%s %p)
\n
"
,
iface
,
debugstr_w
(
path
),
folder
);
ret
=
CreateDirectoryW
(
path
,
NULL
);
if
(
!
ret
)
{
*
folder
=
NULL
;
if
(
GetLastError
()
==
ERROR_ALREADY_EXISTS
)
return
CTL_E_FILEALREADYEXISTS
;
return
HRESULT_FROM_WIN32
(
GetLastError
());
}
return
create_folder
(
folder
);
}
static
HRESULT
WINAPI
filesys_CreateTextFile
(
IFileSystem3
*
iface
,
BSTR
FileName
,
...
...
dlls/scrrun/scrrun.c
View file @
fee495d5
...
...
@@ -104,6 +104,7 @@ static REFIID tid_ids[] = {
&
IID_NULL
,
&
IID_IDictionary
,
&
IID_IFileSystem3
,
&
IID_IFolder
};
static
HRESULT
load_typelib
(
void
)
...
...
dlls/scrrun/scrrun_private.h
View file @
fee495d5
...
...
@@ -26,9 +26,20 @@ typedef enum tid_t
NULL_tid
,
IDictionary_tid
,
IFileSystem3_tid
,
IFolder_tid
,
LAST_tid
}
tid_t
;
HRESULT
get_typeinfo
(
tid_t
tid
,
ITypeInfo
**
typeinfo
)
DECLSPEC_HIDDEN
;
static
inline
void
*
heap_alloc
(
size_t
len
)
{
return
HeapAlloc
(
GetProcessHeap
(),
0
,
len
);
}
static
inline
BOOL
heap_free
(
void
*
mem
)
{
return
HeapFree
(
GetProcessHeap
(),
0
,
mem
);
}
#endif
dlls/scrrun/tests/filesystem.c
View file @
fee495d5
...
...
@@ -22,6 +22,7 @@
#include "windows.h"
#include "ole2.h"
#include "olectl.h"
#include "oleauto.h"
#include "dispex.h"
...
...
@@ -32,9 +33,9 @@
static
void
test_interfaces
(
void
)
{
static
const
WCHAR
pathW
[]
=
{
'p'
,
'a'
,
't'
,
'h'
,
0
};
static
const
WCHAR
nonexistent_dirW
[]
=
{
'c'
,
':'
,
'\\'
,
'N'
,
'o'
,
'n'
,
'e'
,
'x'
,
'i'
,
's'
,
't'
,
'e'
,
'n'
,
't'
,
0
};
static
const
WCHAR
pathW
[]
=
{
'p'
,
'a'
,
't'
,
'h'
,
0
};
static
const
WCHAR
file_kernel32W
[]
=
{
'\\'
,
'k'
,
'e'
,
'r'
,
'n'
,
'e'
,
'l'
,
'3'
,
'2'
,
'.'
,
'd'
,
'l'
,
'l'
,
0
};
HRESULT
hr
;
...
...
@@ -122,12 +123,39 @@ static void test_interfaces(void)
IDispatch_Release
(
disp
);
}
static
void
test_createfolder
(
void
)
{
IFileSystem3
*
fs3
;
HRESULT
hr
;
WCHAR
pathW
[
MAX_PATH
];
BSTR
path
;
IFolder
*
folder
;
hr
=
CoCreateInstance
(
&
CLSID_FileSystemObject
,
NULL
,
CLSCTX_INPROC_SERVER
|
CLSCTX_INPROC_HANDLER
,
&
IID_IFileSystem3
,
(
void
**
)
&
fs3
);
if
(
FAILED
(
hr
))
{
win_skip
(
"Could not create FileSystem object: %08x
\n
"
,
hr
);
return
;
}
/* create existing directory */
GetCurrentDirectoryW
(
sizeof
(
pathW
)
/
sizeof
(
WCHAR
),
pathW
);
path
=
SysAllocString
(
pathW
);
folder
=
(
void
*
)
0xdeabeef
;
hr
=
IFileSystem3_CreateFolder
(
fs3
,
path
,
&
folder
);
ok
(
hr
==
CTL_E_FILEALREADYEXISTS
,
"got 0x%08x
\n
"
,
hr
);
ok
(
folder
==
NULL
,
"got %p
\n
"
,
folder
);
SysFreeString
(
path
);
IFileSystem3_Release
(
fs3
);
}
START_TEST
(
filesystem
)
{
CoInitialize
(
NULL
);
test_interfaces
();
test_createfolder
();
CoUninitialize
();
}
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