/************************************************************************ * IEIPersistFile::QueryInterface */ static HRESULT WINAPI IEIPersistFile_fnQueryInterface(IPersistFile *iface, REFIID iid, void **ppv) { IExtractIconWImpl *This = impl_from_IPersistFile(iface); return IExtractIconW_QueryInterface(&This->IExtractIconW_iface, iid, ppv); }
static HRESULT WINAPI PersistFile_Save(IPersistFile *pFile, LPCOLESTR pszFileName, BOOL fRemember) { HRESULT hr = S_OK; INT len; CHAR *url; InternetShortcut *This = impl_from_IPersistFile(pFile); TRACE("(%p, %s, %d)\n", pFile, debugstr_w(pszFileName), fRemember); if (pszFileName != NULL && fRemember) { LPOLESTR oldFile = This->currentFile; This->currentFile = co_strdupW(pszFileName); if (This->currentFile == NULL) { This->currentFile = oldFile; return E_OUTOFMEMORY; } CoTaskMemFree(oldFile); } if (This->url == NULL) return E_FAIL; /* Windows seems to always write: * ASCII "[InternetShortcut]" headers * ASCII names in "name=value" pairs * An ASCII (probably UTF8?) value in "URL=..." */ len = WideCharToMultiByte(CP_UTF8, 0, This->url, -1, NULL, 0, 0, 0); url = heap_alloc(len); if (url != NULL) { HANDLE file; WideCharToMultiByte(CP_UTF8, 0, This->url, -1, url, len, 0, 0); file = CreateFileW(pszFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (file != INVALID_HANDLE_VALUE) { DWORD bytesWritten; char str_header[] = "[InternetShortcut]"; char str_URL[] = "URL="; char str_eol[] = "\r\n"; WriteFile(file, str_header, lstrlenA(str_header), &bytesWritten, NULL); WriteFile(file, str_eol, lstrlenA(str_eol), &bytesWritten, NULL); WriteFile(file, str_URL, lstrlenA(str_URL), &bytesWritten, NULL); WriteFile(file, url, lstrlenA(url), &bytesWritten, NULL); WriteFile(file, str_eol, lstrlenA(str_eol), &bytesWritten, NULL); CloseHandle(file); if (pszFileName == NULL || fRemember) This->isDirty = FALSE; } else hr = E_FAIL; heap_free(url); } else hr = E_OUTOFMEMORY; return hr; }
static HRESULT WINAPI IPersistFile_fnQueryInterface(IPersistFile *iface, REFIID riid, void **ret_iface) { IAVIFileImpl *This = impl_from_IPersistFile(iface); return IUnknown_QueryInterface(This->outer_unk, riid, ret_iface); }
/************************************************************************ * IEIPersistFile_Load (IPersistFile) */ static HRESULT WINAPI IEIPersistFile_fnLoad(IPersistFile* iface, LPCOLESTR pszFileName, DWORD dwMode) { IExtractIconW *This = impl_from_IPersistFile(iface); FIXME("%p\n", This); return E_NOTIMPL; }
/************************************************************************ * IEIPersistFile_Release (IUnknown) */ static ULONG WINAPI IEIPersistFile_fnRelease( IPersistFile *iface) { IExtractIconW *This = impl_from_IPersistFile(iface); return IExtractIconW_Release(This); }
/************************************************************************ * IEIPersistFile_AddRef (IUnknown) */ static ULONG WINAPI IEIPersistFile_fnAddRef( IPersistFile *iface) { IExtractIconW *This = impl_from_IPersistFile(iface); return IExtractIconW_AddRef(This); }
static HRESULT WINAPI PersistFile_IsDirty(IPersistFile *iface) { HTMLDocument *This = impl_from_IPersistFile(iface); TRACE("(%p)\n", This); return IPersistStreamInit_IsDirty(&This->IPersistStreamInit_iface); }
static HRESULT WINAPI IPersistFile_fnIsDirty(IPersistFile *iface) { IAVIFileImpl *This = impl_from_IPersistFile(iface); TRACE("(%p)\n", iface); return (This->fDirty ? S_OK : S_FALSE); }
static ULONG WINAPI MSTASK_IPersistFile_AddRef( IPersistFile* iface) { TaskImpl *This = impl_from_IPersistFile(iface); ULONG ref; TRACE("\n"); ref = InterlockedIncrement(&This->ref); return ref; }
static HRESULT WINAPI MSTASK_IPersistFile_QueryInterface( IPersistFile* iface, REFIID riid, void **ppvObject) { TaskImpl *This = impl_from_IPersistFile(iface); TRACE("(%p, %s, %p)\n", iface, debugstr_guid(riid), ppvObject); return ITask_QueryInterface(&This->ITask_iface, riid, ppvObject); }
/************************************************************************ * IEIPersistFile_QueryInterface (IUnknown) */ static HRESULT WINAPI IEIPersistFile_fnQueryInterface( IPersistFile *iface, REFIID iid, LPVOID *ppvObj) { IExtractIconW *This = impl_from_IPersistFile(iface); return IExtractIconW_QueryInterface(This, iid, ppvObj); }
static ULONG WINAPI MSTASK_IPersistFile_Release( IPersistFile* iface) { TaskImpl *This = impl_from_IPersistFile(iface); ULONG ref; TRACE("\n"); ref = InterlockedDecrement(&This->ref); if (ref == 0) TaskDestructor(This); return ref; }
static HRESULT WINAPI PersistFile_GetClassID(IPersistFile *iface, CLSID *pClassID) { HTMLDocument *This = impl_from_IPersistFile(iface); TRACE("(%p)->(%p)\n", This, pClassID); if(!pClassID) return E_INVALIDARG; *pClassID = CLSID_HTMLDocument; return S_OK; }
static HRESULT WINAPI PersistFile_Load(IPersistFile *pFile, LPCOLESTR pszFileName, DWORD dwMode) { WCHAR str_header[] = {'I','n','t','e','r','n','e','t','S','h','o','r','t','c','u','t',0}; WCHAR str_URL[] = {'U','R','L',0}; WCHAR *filename = NULL; HRESULT hr; InternetShortcut *This = impl_from_IPersistFile(pFile); TRACE("(%p, %s, 0x%x)\n", pFile, debugstr_w(pszFileName), dwMode); if (dwMode != 0) FIXME("ignoring unimplemented mode 0x%x\n", dwMode); filename = co_strdupW(pszFileName); if (filename != NULL) { DWORD len = 128; DWORD r; WCHAR *url = CoTaskMemAlloc(len*sizeof(WCHAR)); if (url != NULL) { r = GetPrivateProfileStringW(str_header, str_URL, NULL, url, len, pszFileName); while (r == len-1) { CoTaskMemFree(url); len *= 2; url = CoTaskMemAlloc(len*sizeof(WCHAR)); if (url == NULL) break; r = GetPrivateProfileStringW(str_header, str_URL, NULL, url, len, pszFileName); } if (r == 0) hr = E_FAIL; else if (url != NULL) { CoTaskMemFree(This->currentFile); This->currentFile = filename; CoTaskMemFree(This->url); This->url = url; This->isDirty = FALSE; return S_OK; } else hr = E_OUTOFMEMORY; CoTaskMemFree(url); } else hr = E_OUTOFMEMORY; CoTaskMemFree(filename); } else hr = E_OUTOFMEMORY; return hr; }
static HRESULT WINAPI PersistFile_GetCurFile(IPersistFile *pFile, LPOLESTR *ppszFileName) { HRESULT hr = S_OK; InternetShortcut *This = impl_from_IPersistFile(pFile); TRACE("(%p, %p)\n", pFile, ppszFileName); if (This->currentFile == NULL) *ppszFileName = NULL; else { *ppszFileName = co_strdupW(This->currentFile); if (*ppszFileName == NULL) hr = E_OUTOFMEMORY; } return hr; }
static HRESULT WINAPI IPersistFile_fnGetCurFile(IPersistFile *iface, LPOLESTR *ppszFileName) { IAVIFileImpl *This = impl_from_IPersistFile(iface); TRACE("(%p,%p)\n", iface, ppszFileName); if (ppszFileName == NULL) return AVIERR_BADPARAM; *ppszFileName = NULL; if (This->szFileName) { int len = lstrlenW(This->szFileName) + 1; *ppszFileName = CoTaskMemAlloc(len * sizeof(WCHAR)); if (*ppszFileName == NULL) return AVIERR_MEMORY; strcpyW(*ppszFileName, This->szFileName); } return AVIERR_OK; }
static HRESULT WINAPI PersistFile_Save(IPersistFile *iface, LPCOLESTR pszFileName, BOOL fRemember) { HTMLDocument *This = impl_from_IPersistFile(iface); char *str; DWORD written=0; HANDLE file; HRESULT hres; TRACE("(%p)->(%s %x)\n", This, debugstr_w(pszFileName), fRemember); file = CreateFileW(pszFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(file == INVALID_HANDLE_VALUE) { WARN("Could not create file: %u\n", GetLastError()); return E_FAIL; } hres = get_doc_string(This->doc_node, &str); if(SUCCEEDED(hres)) WriteFile(file, str, strlen(str), &written, NULL); CloseHandle(file); return hres; }
static HRESULT WINAPI PersistFile_QueryInterface(IPersistFile *iface, REFIID riid, void **ppv) { HTMLDocument *This = impl_from_IPersistFile(iface); return htmldoc_query_interface(This, riid, ppv); }
static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile *iface, LPCOLESTR pszFileName, DWORD dwMode) { IAVIFileImpl *This = impl_from_IPersistFile(iface); WCHAR wszStreamFmt[50]; INT len; TRACE("(%p,%s,0x%08X)\n", iface, debugstr_w(pszFileName), dwMode); /* check parameter */ if (pszFileName == NULL) return AVIERR_BADPARAM; if (This->hmmio != NULL) return AVIERR_ERROR; /* No reuse of this object for another file! */ /* remember mode and name */ This->uMode = dwMode; len = lstrlenW(pszFileName) + 1; This->szFileName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); if (This->szFileName == NULL) return AVIERR_MEMORY; lstrcpyW(This->szFileName, pszFileName); /* try to open the file */ This->hmmio = mmioOpenW(This->szFileName, NULL, MMIO_ALLOCBUF | dwMode); if (This->hmmio == NULL) { /* mmioOpenW not in native DLLs of Win9x -- try mmioOpenA */ LPSTR szFileName; len = WideCharToMultiByte(CP_ACP, 0, This->szFileName, -1, NULL, 0, NULL, NULL); szFileName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(CHAR)); if (szFileName == NULL) return AVIERR_MEMORY; WideCharToMultiByte(CP_ACP, 0, This->szFileName, -1, szFileName, len, NULL, NULL); This->hmmio = mmioOpenA(szFileName, NULL, MMIO_ALLOCBUF | dwMode); HeapFree(GetProcessHeap(), 0, szFileName); if (This->hmmio == NULL) return AVIERR_FILEOPEN; } memset(& This->fInfo, 0, sizeof(This->fInfo)); memset(& This->sInfo, 0, sizeof(This->sInfo)); LoadStringW(AVIFILE_hModule, IDS_WAVEFILETYPE, This->fInfo.szFileType, sizeof(This->fInfo.szFileType)/sizeof(This->fInfo.szFileType[0])); if (LoadStringW(AVIFILE_hModule, IDS_WAVESTREAMFORMAT, wszStreamFmt, sizeof(wszStreamFmt)/sizeof(wszStreamFmt[0])) > 0) { wsprintfW(This->sInfo.szName, wszStreamFmt, AVIFILE_BasenameW(This->szFileName)); } /* should we create a new file? */ if (dwMode & OF_CREATE) { /* nothing more to do */ return AVIERR_OK; } else return AVIFILE_LoadFile(This); }
static HRESULT WINAPI PersistFile_Load(IPersistFile *pFile, LPCOLESTR pszFileName, DWORD dwMode) { WCHAR str_header[] = {'I','n','t','e','r','n','e','t','S','h','o','r','t','c','u','t',0}; WCHAR str_URL[] = {'U','R','L',0}; WCHAR str_iconfile[] = {'i','c','o','n','f','i','l','e',0}; WCHAR str_iconindex[] = {'i','c','o','n','i','n','d','e','x',0}; WCHAR *filename = NULL; HRESULT hr; InternetShortcut *This = impl_from_IPersistFile(pFile); TRACE("(%p, %s, 0x%x)\n", pFile, debugstr_w(pszFileName), dwMode); if (dwMode != 0) FIXME("ignoring unimplemented mode 0x%x\n", dwMode); filename = co_strdupW(pszFileName); if (filename != NULL) { DWORD r; WCHAR *url; r = get_profile_string(str_header, str_URL, pszFileName, &url); if (url == NULL) { hr = E_OUTOFMEMORY; CoTaskMemFree(filename); } else if (r == 0) { hr = E_FAIL; CoTaskMemFree(filename); } else { hr = S_OK; CoTaskMemFree(This->currentFile); This->currentFile = filename; CoTaskMemFree(This->url); This->url = url; This->isDirty = FALSE; } /* Now we're going to read in the iconfile and iconindex. If we don't find them, that's not a failure case -- it's possible that they just aren't in there. */ if (SUCCEEDED(hr)) { IPropertyStorage *pPropStg; WCHAR *iconfile; WCHAR *iconindexstring; hr = IPropertySetStorage_Open(This->property_set_storage, &FMTID_Intshcut, STGM_READWRITE | STGM_SHARE_EXCLUSIVE, &pPropStg); r = get_profile_string(str_header, str_iconfile, pszFileName, &iconfile); if (iconfile != NULL) { PROPSPEC ps; PROPVARIANT pv; ps.ulKind = PRSPEC_PROPID; ps.u.propid = PID_IS_ICONFILE; pv.vt = VT_LPWSTR; pv.u.pwszVal = iconfile; hr = IPropertyStorage_WriteMultiple(pPropStg, 1, &ps, &pv, 0); if (FAILED(hr)) { TRACE("Failed to store the iconfile to our property storage. hr = 0x%x\n", hr); } CoTaskMemFree(iconfile); } r = get_profile_string(str_header, str_iconindex, pszFileName, &iconindexstring); if (iconindexstring != NULL) { int iconindex; PROPSPEC ps; PROPVARIANT pv; char *iconindexastring = co_strdupWtoA(iconindexstring); sscanf(iconindexastring, "%d", &iconindex); CoTaskMemFree(iconindexastring); ps.ulKind = PRSPEC_PROPID; ps.u.propid = PID_IS_ICONINDEX; pv.vt = VT_I4; pv.u.iVal = iconindex; hr = IPropertyStorage_WriteMultiple(pPropStg, 1, &ps, &pv, 0); if (FAILED(hr)) { TRACE("Failed to store the iconindex to our property storage. hr = 0x%x\n", hr); } CoTaskMemFree(iconindexstring); } IPropertyStorage_Release(pPropStg); } else hr = E_OUTOFMEMORY; } else hr = E_OUTOFMEMORY; return hr; }
static ULONG WINAPI IPersistFile_fnRelease(IPersistFile *iface) { IAVIFileImpl *This = impl_from_IPersistFile(iface); return IUnknown_Release(This->outer_unk); }
static HRESULT WINAPI PersistFile_Save(IPersistFile *pFile, LPCOLESTR pszFileName, BOOL fRemember) { HRESULT hr = S_OK; INT len; CHAR *url; InternetShortcut *This = impl_from_IPersistFile(pFile); TRACE("(%p, %s, %d)\n", pFile, debugstr_w(pszFileName), fRemember); if (pszFileName != NULL && fRemember) { LPOLESTR oldFile = This->currentFile; This->currentFile = co_strdupW(pszFileName); if (This->currentFile == NULL) { This->currentFile = oldFile; return E_OUTOFMEMORY; } CoTaskMemFree(oldFile); } if (This->url == NULL) return E_FAIL; /* Windows seems to always write: * ASCII "[InternetShortcut]" headers * ASCII names in "name=value" pairs * An ASCII (probably UTF8?) value in "URL=..." */ len = WideCharToMultiByte(CP_UTF8, 0, This->url, -1, NULL, 0, 0, 0); url = heap_alloc(len); if (url != NULL) { HANDLE file; WideCharToMultiByte(CP_UTF8, 0, This->url, -1, url, len, 0, 0); file = CreateFileW(pszFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (file != INVALID_HANDLE_VALUE) { DWORD bytesWritten; char *iconfile; char str_header[] = "[InternetShortcut]"; char str_URL[] = "URL="; char str_ICONFILE[] = "ICONFILE="; char str_eol[] = "\r\n"; IPropertyStorage *pPropStgRead; PROPSPEC ps[2]; PROPVARIANT pvread[2]; ps[0].ulKind = PRSPEC_PROPID; ps[0].u.propid = PID_IS_ICONFILE; ps[1].ulKind = PRSPEC_PROPID; ps[1].u.propid = PID_IS_ICONINDEX; WriteFile(file, str_header, lstrlenA(str_header), &bytesWritten, NULL); WriteFile(file, str_eol, lstrlenA(str_eol), &bytesWritten, NULL); WriteFile(file, str_URL, lstrlenA(str_URL), &bytesWritten, NULL); WriteFile(file, url, lstrlenA(url), &bytesWritten, NULL); WriteFile(file, str_eol, lstrlenA(str_eol), &bytesWritten, NULL); hr = IPropertySetStorage_Open(This->property_set_storage, &FMTID_Intshcut, STGM_READ|STGM_SHARE_EXCLUSIVE, &pPropStgRead); if (SUCCEEDED(hr)) { hr = IPropertyStorage_ReadMultiple(pPropStgRead, 2, ps, pvread); if (hr == S_FALSE) { /* None of the properties are present, that's ok */ hr = S_OK; IPropertyStorage_Release(pPropStgRead); } else if (SUCCEEDED(hr)) { char indexString[50]; len = WideCharToMultiByte(CP_UTF8, 0, pvread[0].u.pwszVal, -1, NULL, 0, 0, 0); iconfile = heap_alloc(len); if (iconfile != NULL) { WideCharToMultiByte(CP_UTF8, 0, pvread[0].u.pwszVal, -1, iconfile, len, 0, 0); WriteFile(file, str_ICONFILE, lstrlenA(str_ICONFILE), &bytesWritten, NULL); WriteFile(file, iconfile, lstrlenA(iconfile), &bytesWritten, NULL); WriteFile(file, str_eol, lstrlenA(str_eol), &bytesWritten, NULL); } sprintf(indexString, "ICONINDEX=%d", pvread[1].u.iVal); WriteFile(file, indexString, lstrlenA(indexString), &bytesWritten, NULL); WriteFile(file, str_eol, lstrlenA(str_eol), &bytesWritten, NULL); IPropertyStorage_Release(pPropStgRead); PropVariantClear(&pvread[0]); PropVariantClear(&pvread[1]); } else { TRACE("Unable to read properties.\n"); } } else { TRACE("Unable to get the IPropertyStorage.\n"); } CloseHandle(file); if (pszFileName == NULL || fRemember) This->isDirty = FALSE; StartLinkProcessor(pszFileName); } else hr = E_FAIL; heap_free(url); } else hr = E_OUTOFMEMORY; return hr; }
static HRESULT WINAPI PersistFile_QueryInterface(IPersistFile *pFile, REFIID riid, PVOID *ppvObject) { InternetShortcut *This = impl_from_IPersistFile(pFile); TRACE("(%p, %s, %p)\n", pFile, debugstr_guid(riid), ppvObject); return Unknown_QueryInterface(This, riid, ppvObject); }
static HRESULT WINAPI PersistFile_GetCurFile(IPersistFile *iface, LPOLESTR *pszFileName) { HTMLDocument *This = impl_from_IPersistFile(iface); FIXME("(%p)->(%p)\n", This, pszFileName); return E_NOTIMPL; }
static HRESULT WINAPI PersistFile_SaveCompleted(IPersistFile *iface, LPCOLESTR pszFileName) { HTMLDocument *This = impl_from_IPersistFile(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(pszFileName)); return E_NOTIMPL; }
static HRESULT WINAPI PersistFile_Load(IPersistFile *iface, LPCOLESTR pszFileName, DWORD dwMode) { HTMLDocument *This = impl_from_IPersistFile(iface); FIXME("(%p)->(%s %08x)\n", This, debugstr_w(pszFileName), dwMode); return E_NOTIMPL; }
static ULONG WINAPI PersistFile_Release(IPersistFile *pFile) { InternetShortcut *This = impl_from_IPersistFile(pFile); TRACE("(%p)\n", pFile); return Unknown_Release(This); }
static HRESULT WINAPI PersistFile_IsDirty(IPersistFile *pFile) { InternetShortcut *This = impl_from_IPersistFile(pFile); TRACE("(%p)\n", pFile); return This->isDirty ? S_OK : S_FALSE; }
static ULONG WINAPI PersistFile_Release(IPersistFile *iface) { HTMLDocument *This = impl_from_IPersistFile(iface); return htmldoc_release(This); }
static ULONG WINAPI PersistFile_AddRef(IPersistFile *iface) { HTMLDocument *This = impl_from_IPersistFile(iface); return htmldoc_addref(This); }