2 * Copyright 2012 Alistair Leslie-Hughes
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "scrrun_private.h"
32 #include "wine/debug.h"
34 WINE_DEFAULT_DEBUG_CHANNEL(scrrun);
37 IFolder IFolder_iface;
42 ITextStream ITextStream_iface;
46 static inline struct folder *impl_from_IFolder(IFolder *iface)
48 return CONTAINING_RECORD(iface, struct folder, IFolder_iface);
51 static inline struct textstream *impl_from_ITextStream(ITextStream *iface)
53 return CONTAINING_RECORD(iface, struct textstream, ITextStream_iface);
56 static HRESULT WINAPI textstream_QueryInterface(ITextStream *iface, REFIID riid, void **obj)
58 struct textstream *This = impl_from_ITextStream(iface);
60 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
62 if (IsEqualIID(riid, &IID_ITextStream) ||
63 IsEqualIID(riid, &IID_IDispatch) ||
64 IsEqualIID(riid, &IID_IUnknown))
67 ITextStream_AddRef(iface);
75 static ULONG WINAPI textstream_AddRef(ITextStream *iface)
77 struct textstream *This = impl_from_ITextStream(iface);
78 ULONG ref = InterlockedIncrement(&This->ref);
79 TRACE("(%p)->(%d)\n", This, ref);
83 static ULONG WINAPI textstream_Release(ITextStream *iface)
85 struct textstream *This = impl_from_ITextStream(iface);
86 ULONG ref = InterlockedDecrement(&This->ref);
87 TRACE("(%p)->(%d)\n", This, ref);
95 static HRESULT WINAPI textstream_GetTypeInfoCount(ITextStream *iface, UINT *pctinfo)
97 struct textstream *This = impl_from_ITextStream(iface);
98 TRACE("(%p)->(%p)\n", This, pctinfo);
103 static HRESULT WINAPI textstream_GetTypeInfo(ITextStream *iface, UINT iTInfo,
104 LCID lcid, ITypeInfo **ppTInfo)
106 struct textstream *This = impl_from_ITextStream(iface);
107 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
108 return get_typeinfo(ITextStream_tid, ppTInfo);
111 static HRESULT WINAPI textstream_GetIDsOfNames(ITextStream *iface, REFIID riid,
112 LPOLESTR *rgszNames, UINT cNames,
113 LCID lcid, DISPID *rgDispId)
115 struct textstream *This = impl_from_ITextStream(iface);
119 TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
121 hr = get_typeinfo(ITextStream_tid, &typeinfo);
124 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
125 ITypeInfo_Release(typeinfo);
131 static HRESULT WINAPI textstream_Invoke(ITextStream *iface, DISPID dispIdMember,
132 REFIID riid, LCID lcid, WORD wFlags,
133 DISPPARAMS *pDispParams, VARIANT *pVarResult,
134 EXCEPINFO *pExcepInfo, UINT *puArgErr)
136 struct textstream *This = impl_from_ITextStream(iface);
140 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
141 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
143 hr = get_typeinfo(ITextStream_tid, &typeinfo);
146 hr = ITypeInfo_Invoke(typeinfo, iface, dispIdMember, wFlags,
147 pDispParams, pVarResult, pExcepInfo, puArgErr);
148 ITypeInfo_Release(typeinfo);
154 static HRESULT WINAPI textstream_get_Line(ITextStream *iface, LONG *line)
156 struct textstream *This = impl_from_ITextStream(iface);
157 FIXME("(%p)->(%p): stub\n", This, line);
161 static HRESULT WINAPI textstream_get_Column(ITextStream *iface, LONG *column)
163 struct textstream *This = impl_from_ITextStream(iface);
164 FIXME("(%p)->(%p): stub\n", This, column);
168 static HRESULT WINAPI textstream_get_AtEndOfStream(ITextStream *iface, VARIANT_BOOL *eos)
170 struct textstream *This = impl_from_ITextStream(iface);
171 FIXME("(%p)->(%p): stub\n", This, eos);
175 static HRESULT WINAPI textstream_get_AtEndOfLine(ITextStream *iface, VARIANT_BOOL *eol)
177 struct textstream *This = impl_from_ITextStream(iface);
178 FIXME("(%p)->(%p): stub\n", This, eol);
182 static HRESULT WINAPI textstream_Read(ITextStream *iface, LONG len, BSTR *text)
184 struct textstream *This = impl_from_ITextStream(iface);
185 FIXME("(%p)->(%p): stub\n", This, text);
189 static HRESULT WINAPI textstream_ReadLine(ITextStream *iface, BSTR *text)
191 struct textstream *This = impl_from_ITextStream(iface);
192 FIXME("(%p)->(%p): stub\n", This, text);
196 static HRESULT WINAPI textstream_ReadAll(ITextStream *iface, BSTR *text)
198 struct textstream *This = impl_from_ITextStream(iface);
199 FIXME("(%p)->(%p): stub\n", This, text);
203 static HRESULT WINAPI textstream_Write(ITextStream *iface, BSTR text)
205 struct textstream *This = impl_from_ITextStream(iface);
206 FIXME("(%p)->(%s): stub\n", This, debugstr_w(text));
210 static HRESULT WINAPI textstream_WriteLine(ITextStream *iface, BSTR text)
212 struct textstream *This = impl_from_ITextStream(iface);
213 FIXME("(%p)->(%s): stub\n", This, debugstr_w(text));
217 static HRESULT WINAPI textstream_WriteBlankLines(ITextStream *iface, LONG lines)
219 struct textstream *This = impl_from_ITextStream(iface);
220 FIXME("(%p)->(%d): stub\n", This, lines);
224 static HRESULT WINAPI textstream_Skip(ITextStream *iface, LONG count)
226 struct textstream *This = impl_from_ITextStream(iface);
227 FIXME("(%p)->(%d): stub\n", This, count);
231 static HRESULT WINAPI textstream_SkipLine(ITextStream *iface)
233 struct textstream *This = impl_from_ITextStream(iface);
234 FIXME("(%p): stub\n", This);
238 static HRESULT WINAPI textstream_Close(ITextStream *iface)
240 struct textstream *This = impl_from_ITextStream(iface);
241 FIXME("(%p): stub\n", This);
245 static const ITextStreamVtbl textstreamvtbl = {
246 textstream_QueryInterface,
249 textstream_GetTypeInfoCount,
250 textstream_GetTypeInfo,
251 textstream_GetIDsOfNames,
254 textstream_get_Column,
255 textstream_get_AtEndOfStream,
256 textstream_get_AtEndOfLine,
261 textstream_WriteLine,
262 textstream_WriteBlankLines,
268 static HRESULT create_textstream(ITextStream **ret)
270 struct textstream *stream;
272 stream = heap_alloc(sizeof(struct textstream));
273 if (!stream) return E_OUTOFMEMORY;
275 stream->ITextStream_iface.lpVtbl = &textstreamvtbl;
278 *ret = &stream->ITextStream_iface;
282 static HRESULT WINAPI folder_QueryInterface(IFolder *iface, REFIID riid, void **obj)
284 struct folder *This = impl_from_IFolder(iface);
286 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
290 if (IsEqualGUID( riid, &IID_IFolder ) ||
291 IsEqualGUID( riid, &IID_IUnknown))
294 IFolder_AddRef(iface);
297 return E_NOINTERFACE;
302 static ULONG WINAPI folder_AddRef(IFolder *iface)
304 struct folder *This = impl_from_IFolder(iface);
305 ULONG ref = InterlockedIncrement(&This->ref);
306 TRACE("(%p)->(%d)\n", This, ref);
310 static ULONG WINAPI folder_Release(IFolder *iface)
312 struct folder *This = impl_from_IFolder(iface);
313 ULONG ref = InterlockedDecrement(&This->ref);
314 TRACE("(%p)->(%d)\n", This, ref);
322 static HRESULT WINAPI folder_GetTypeInfoCount(IFolder *iface, UINT *pctinfo)
324 struct folder *This = impl_from_IFolder(iface);
325 TRACE("(%p)->(%p)\n", This, pctinfo);
330 static HRESULT WINAPI folder_GetTypeInfo(IFolder *iface, UINT iTInfo,
331 LCID lcid, ITypeInfo **ppTInfo)
333 struct folder *This = impl_from_IFolder(iface);
334 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
335 return get_typeinfo(IFolder_tid, ppTInfo);
338 static HRESULT WINAPI folder_GetIDsOfNames(IFolder *iface, REFIID riid,
339 LPOLESTR *rgszNames, UINT cNames,
340 LCID lcid, DISPID *rgDispId)
342 struct folder *This = impl_from_IFolder(iface);
346 TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
348 hr = get_typeinfo(IFolder_tid, &typeinfo);
351 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
352 ITypeInfo_Release(typeinfo);
358 static HRESULT WINAPI folder_Invoke(IFolder *iface, DISPID dispIdMember,
359 REFIID riid, LCID lcid, WORD wFlags,
360 DISPPARAMS *pDispParams, VARIANT *pVarResult,
361 EXCEPINFO *pExcepInfo, UINT *puArgErr)
363 struct folder *This = impl_from_IFolder(iface);
367 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
368 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
370 hr = get_typeinfo(IFolder_tid, &typeinfo);
373 hr = ITypeInfo_Invoke(typeinfo, iface, dispIdMember, wFlags,
374 pDispParams, pVarResult, pExcepInfo, puArgErr);
375 ITypeInfo_Release(typeinfo);
381 static HRESULT WINAPI folder_get_Path(IFolder *iface, BSTR *path)
383 struct folder *This = impl_from_IFolder(iface);
384 FIXME("(%p)->(%p): stub\n", This, path);
388 static HRESULT WINAPI folder_get_Name(IFolder *iface, BSTR *name)
390 struct folder *This = impl_from_IFolder(iface);
391 FIXME("(%p)->(%p): stub\n", This, name);
395 static HRESULT WINAPI folder_put_Name(IFolder *iface, BSTR name)
397 struct folder *This = impl_from_IFolder(iface);
398 FIXME("(%p)->(%s): stub\n", This, debugstr_w(name));
402 static HRESULT WINAPI folder_get_ShortPath(IFolder *iface, BSTR *path)
404 struct folder *This = impl_from_IFolder(iface);
405 FIXME("(%p)->(%p): stub\n", This, path);
409 static HRESULT WINAPI folder_get_ShortName(IFolder *iface, BSTR *name)
411 struct folder *This = impl_from_IFolder(iface);
412 FIXME("(%p)->(%p): stub\n", This, name);
416 static HRESULT WINAPI folder_get_Drive(IFolder *iface, IDrive **drive)
418 struct folder *This = impl_from_IFolder(iface);
419 FIXME("(%p)->(%p): stub\n", This, drive);
423 static HRESULT WINAPI folder_get_ParentFolder(IFolder *iface, IFolder **parent)
425 struct folder *This = impl_from_IFolder(iface);
426 FIXME("(%p)->(%p): stub\n", This, parent);
430 static HRESULT WINAPI folder_get_Attributes(IFolder *iface, FileAttribute *attr)
432 struct folder *This = impl_from_IFolder(iface);
433 FIXME("(%p)->(%p): stub\n", This, attr);
437 static HRESULT WINAPI folder_put_Attributes(IFolder *iface, FileAttribute attr)
439 struct folder *This = impl_from_IFolder(iface);
440 FIXME("(%p)->(0x%x): stub\n", This, attr);
444 static HRESULT WINAPI folder_get_DateCreated(IFolder *iface, DATE *date)
446 struct folder *This = impl_from_IFolder(iface);
447 FIXME("(%p)->(%p): stub\n", This, date);
451 static HRESULT WINAPI folder_get_DateLastModified(IFolder *iface, DATE *date)
453 struct folder *This = impl_from_IFolder(iface);
454 FIXME("(%p)->(%p): stub\n", This, date);
458 static HRESULT WINAPI folder_get_DateLastAccessed(IFolder *iface, DATE *date)
460 struct folder *This = impl_from_IFolder(iface);
461 FIXME("(%p)->(%p): stub\n", This, date);
465 static HRESULT WINAPI folder_get_Type(IFolder *iface, BSTR *type)
467 struct folder *This = impl_from_IFolder(iface);
468 FIXME("(%p)->(%p): stub\n", This, type);
472 static HRESULT WINAPI folder_Delete(IFolder *iface, VARIANT_BOOL force)
474 struct folder *This = impl_from_IFolder(iface);
475 FIXME("(%p)->(%x): stub\n", This, force);
479 static HRESULT WINAPI folder_Copy(IFolder *iface, BSTR dest, VARIANT_BOOL overwrite)
481 struct folder *This = impl_from_IFolder(iface);
482 FIXME("(%p)->(%s %x): stub\n", This, debugstr_w(dest), overwrite);
486 static HRESULT WINAPI folder_Move(IFolder *iface, BSTR dest)
488 struct folder *This = impl_from_IFolder(iface);
489 FIXME("(%p)->(%s): stub\n", This, debugstr_w(dest));
493 static HRESULT WINAPI folder_get_IsRootFolder(IFolder *iface, VARIANT_BOOL *isroot)
495 struct folder *This = impl_from_IFolder(iface);
496 FIXME("(%p)->(%p): stub\n", This, isroot);
500 static HRESULT WINAPI folder_get_Size(IFolder *iface, VARIANT *size)
502 struct folder *This = impl_from_IFolder(iface);
503 FIXME("(%p)->(%p): stub\n", This, size);
507 static HRESULT WINAPI folder_get_SubFolders(IFolder *iface, IFolderCollection **folders)
509 struct folder *This = impl_from_IFolder(iface);
510 FIXME("(%p)->(%p): stub\n", This, folders);
514 static HRESULT WINAPI folder_get_Files(IFolder *iface, IFileCollection **files)
516 struct folder *This = impl_from_IFolder(iface);
517 FIXME("(%p)->(%p): stub\n", This, files);
521 static HRESULT WINAPI folder_CreateTextFile(IFolder *iface, BSTR filename, VARIANT_BOOL overwrite,
522 VARIANT_BOOL unicode, ITextStream **stream)
524 struct folder *This = impl_from_IFolder(iface);
525 FIXME("(%p)->(%s %x %x %p): stub\n", This, debugstr_w(filename), overwrite, unicode, stream);
529 static const IFolderVtbl foldervtbl = {
530 folder_QueryInterface,
533 folder_GetTypeInfoCount,
535 folder_GetIDsOfNames,
540 folder_get_ShortPath,
541 folder_get_ShortName,
543 folder_get_ParentFolder,
544 folder_get_Attributes,
545 folder_put_Attributes,
546 folder_get_DateCreated,
547 folder_get_DateLastModified,
548 folder_get_DateLastAccessed,
553 folder_get_IsRootFolder,
555 folder_get_SubFolders,
557 folder_CreateTextFile
560 static HRESULT create_folder(IFolder **folder)
564 This = heap_alloc(sizeof(struct folder));
565 if (!This) return E_OUTOFMEMORY;
567 This->IFolder_iface.lpVtbl = &foldervtbl;
570 *folder = &This->IFolder_iface;
575 static HRESULT WINAPI filesys_QueryInterface(IFileSystem3 *iface, REFIID riid, void **ppvObject)
577 TRACE("%p %s %p\n", iface, debugstr_guid(riid), ppvObject);
579 if ( IsEqualGUID( riid, &IID_IFileSystem3 ) ||
580 IsEqualGUID( riid, &IID_IFileSystem ) ||
581 IsEqualGUID( riid, &IID_IDispatch ) ||
582 IsEqualGUID( riid, &IID_IUnknown ) )
586 else if ( IsEqualGUID( riid, &IID_IDispatchEx ))
588 TRACE("Interface IDispatchEx not supported - returning NULL\n");
590 return E_NOINTERFACE;
592 else if ( IsEqualGUID( riid, &IID_IObjectWithSite ))
594 TRACE("Interface IObjectWithSite not supported - returning NULL\n");
596 return E_NOINTERFACE;
600 FIXME("Unsupported interface %s\n", debugstr_guid(riid));
601 return E_NOINTERFACE;
604 IFileSystem3_AddRef(iface);
609 static ULONG WINAPI filesys_AddRef(IFileSystem3 *iface)
611 TRACE("%p\n", iface);
616 static ULONG WINAPI filesys_Release(IFileSystem3 *iface)
618 TRACE("%p\n", iface);
623 static HRESULT WINAPI filesys_GetTypeInfoCount(IFileSystem3 *iface, UINT *pctinfo)
625 TRACE("(%p)->(%p)\n", iface, pctinfo);
631 static HRESULT WINAPI filesys_GetTypeInfo(IFileSystem3 *iface, UINT iTInfo,
632 LCID lcid, ITypeInfo **ppTInfo)
634 TRACE("(%p)->(%u %u %p)\n", iface, iTInfo, lcid, ppTInfo);
635 return get_typeinfo(IFileSystem3_tid, ppTInfo);
638 static HRESULT WINAPI filesys_GetIDsOfNames(IFileSystem3 *iface, REFIID riid,
639 LPOLESTR *rgszNames, UINT cNames,
640 LCID lcid, DISPID *rgDispId)
645 TRACE("(%p)->(%s %p %u %u %p)\n", iface, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
647 hr = get_typeinfo(IFileSystem3_tid, &typeinfo);
650 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
651 ITypeInfo_Release(typeinfo);
657 static HRESULT WINAPI filesys_Invoke(IFileSystem3 *iface, DISPID dispIdMember,
658 REFIID riid, LCID lcid, WORD wFlags,
659 DISPPARAMS *pDispParams, VARIANT *pVarResult,
660 EXCEPINFO *pExcepInfo, UINT *puArgErr)
665 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", iface, dispIdMember, debugstr_guid(riid),
666 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
668 hr = get_typeinfo(IFileSystem3_tid, &typeinfo);
671 hr = ITypeInfo_Invoke(typeinfo, iface, dispIdMember, wFlags,
672 pDispParams, pVarResult, pExcepInfo, puArgErr);
673 ITypeInfo_Release(typeinfo);
679 static HRESULT WINAPI filesys_get_Drives(IFileSystem3 *iface, IDriveCollection **ppdrives)
681 FIXME("%p %p\n", iface, ppdrives);
686 static HRESULT WINAPI filesys_BuildPath(IFileSystem3 *iface, BSTR Path,
687 BSTR Name, BSTR *pbstrResult)
689 FIXME("%p %s %s %p\n", iface, debugstr_w(Path), debugstr_w(Name), pbstrResult);
694 static HRESULT WINAPI filesys_GetDriveName(IFileSystem3 *iface, BSTR Path,
697 FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
702 static HRESULT WINAPI filesys_GetParentFolderName(IFileSystem3 *iface, BSTR Path,
705 FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
710 static HRESULT WINAPI filesys_GetFileName(IFileSystem3 *iface, BSTR Path,
713 FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
718 static HRESULT WINAPI filesys_GetBaseName(IFileSystem3 *iface, BSTR Path,
721 FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
726 static HRESULT WINAPI filesys_GetExtensionName(IFileSystem3 *iface, BSTR Path,
729 FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
734 static HRESULT WINAPI filesys_GetAbsolutePathName(IFileSystem3 *iface, BSTR Path,
737 FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
742 static HRESULT WINAPI filesys_GetTempName(IFileSystem3 *iface, BSTR *pbstrResult)
744 FIXME("%p %p\n", iface, pbstrResult);
749 static HRESULT WINAPI filesys_DriveExists(IFileSystem3 *iface, BSTR DriveSpec,
750 VARIANT_BOOL *pfExists)
752 FIXME("%p %s %p\n", iface, debugstr_w(DriveSpec), pfExists);
757 static HRESULT WINAPI filesys_FileExists(IFileSystem3 *iface, BSTR path, VARIANT_BOOL *ret)
760 TRACE("%p %s %p\n", iface, debugstr_w(path), ret);
762 if (!ret) return E_POINTER;
764 attrs = GetFileAttributesW(path);
765 *ret = attrs != INVALID_FILE_ATTRIBUTES && !(attrs & FILE_ATTRIBUTE_DIRECTORY) ? VARIANT_TRUE : VARIANT_FALSE;
769 static HRESULT WINAPI filesys_FolderExists(IFileSystem3 *iface, BSTR path, VARIANT_BOOL *ret)
772 TRACE("%p %s %p\n", iface, debugstr_w(path), ret);
774 if (!ret) return E_POINTER;
776 attrs = GetFileAttributesW(path);
777 *ret = attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_DIRECTORY) ? VARIANT_TRUE : VARIANT_FALSE;
782 static HRESULT WINAPI filesys_GetDrive(IFileSystem3 *iface, BSTR DriveSpec,
785 FIXME("%p %s %p\n", iface, debugstr_w(DriveSpec), ppdrive);
790 static HRESULT WINAPI filesys_GetFile(IFileSystem3 *iface, BSTR FilePath,
793 FIXME("%p %s %p\n", iface, debugstr_w(FilePath), ppfile);
798 static HRESULT WINAPI filesys_GetFolder(IFileSystem3 *iface, BSTR FolderPath,
801 FIXME("%p %s %p\n", iface, debugstr_w(FolderPath), ppfolder);
806 static HRESULT WINAPI filesys_GetSpecialFolder(IFileSystem3 *iface,
807 SpecialFolderConst SpecialFolder,
810 FIXME("%p %d %p\n", iface, SpecialFolder, ppfolder);
815 static HRESULT WINAPI filesys_DeleteFile(IFileSystem3 *iface, BSTR FileSpec,
818 FIXME("%p %s %d\n", iface, debugstr_w(FileSpec), Force);
823 static HRESULT WINAPI filesys_DeleteFolder(IFileSystem3 *iface, BSTR FolderSpec,
826 FIXME("%p %s %d\n", iface, debugstr_w(FolderSpec), Force);
831 static HRESULT WINAPI filesys_MoveFile(IFileSystem3 *iface, BSTR Source,
834 FIXME("%p %s %s\n", iface, debugstr_w(Source), debugstr_w(Destination));
839 static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface,BSTR Source,
842 FIXME("%p %s %s\n", iface, debugstr_w(Source), debugstr_w(Destination));
847 static HRESULT WINAPI filesys_CopyFile(IFileSystem3 *iface, BSTR Source,
848 BSTR Destination, VARIANT_BOOL OverWriteFiles)
850 FIXME("%p %s %s %d\n", iface, debugstr_w(Source), debugstr_w(Destination), OverWriteFiles);
855 static HRESULT WINAPI filesys_CopyFolder(IFileSystem3 *iface, BSTR Source,
856 BSTR Destination, VARIANT_BOOL OverWriteFiles)
858 FIXME("%p %s %s %d\n", iface, debugstr_w(Source), debugstr_w(Destination), OverWriteFiles);
863 static HRESULT WINAPI filesys_CreateFolder(IFileSystem3 *iface, BSTR path,
868 TRACE("(%p)->(%s %p)\n", iface, debugstr_w(path), folder);
870 ret = CreateDirectoryW(path, NULL);
874 if (GetLastError() == ERROR_ALREADY_EXISTS) return CTL_E_FILEALREADYEXISTS;
875 return HRESULT_FROM_WIN32(GetLastError());
878 return create_folder(folder);
881 static HRESULT WINAPI filesys_CreateTextFile(IFileSystem3 *iface, BSTR FileName,
882 VARIANT_BOOL Overwrite, VARIANT_BOOL Unicode,
885 FIXME("%p %s %d %d %p\n", iface, debugstr_w(FileName), Overwrite, Unicode, ppts);
890 static HRESULT WINAPI filesys_OpenTextFile(IFileSystem3 *iface, BSTR filename,
891 IOMode mode, VARIANT_BOOL create,
892 Tristate format, ITextStream **stream)
894 FIXME("(%p)->(%s %d %d %d %p)\n", iface, debugstr_w(filename), mode, create, format, stream);
895 return create_textstream(stream);
898 static HRESULT WINAPI filesys_GetStandardStream(IFileSystem3 *iface,
899 StandardStreamTypes StandardStreamType,
900 VARIANT_BOOL Unicode,
903 FIXME("%p %d %d %p\n", iface, StandardStreamType, Unicode, ppts);
908 static HRESULT WINAPI filesys_GetFileVersion(IFileSystem3 *iface, BSTR FileName,
911 FIXME("%p %s %p\n", iface, debugstr_w(FileName), FileVersion);
916 static const struct IFileSystem3Vtbl filesys_vtbl =
918 filesys_QueryInterface,
921 filesys_GetTypeInfoCount,
923 filesys_GetIDsOfNames,
927 filesys_GetDriveName,
928 filesys_GetParentFolderName,
931 filesys_GetExtensionName,
932 filesys_GetAbsolutePathName,
936 filesys_FolderExists,
940 filesys_GetSpecialFolder,
942 filesys_DeleteFolder,
947 filesys_CreateFolder,
948 filesys_CreateTextFile,
949 filesys_OpenTextFile,
950 filesys_GetStandardStream,
951 filesys_GetFileVersion
954 static IFileSystem3 filesystem = { &filesys_vtbl };
956 HRESULT WINAPI FileSystem_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
958 TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
960 return IFileSystem3_QueryInterface(&filesystem, riid, ppv);