Nikolay Sivov : qmgr: Implement IBackgroundCopyJob::SetDescription().
Alexandre Julliard
julliard at winehq.org
Fri Jan 10 14:44:57 CST 2014
Module: wine
Branch: stable
Commit: 6f933cba724e1fe2de0d05b59a2b3fd192974974
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6f933cba724e1fe2de0d05b59a2b3fd192974974
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Nov 25 10:42:31 2013 +0400
qmgr: Implement IBackgroundCopyJob::SetDescription().
(cherry picked from commit eeb05e6ef98d7bb5cade2eda82640846ebb18c11)
---
dlls/qmgr/job.c | 50 ++++++++++++++++++++++++++++++++++++++++++--------
dlls/qmgr/qmgr.h | 1 +
2 files changed, 43 insertions(+), 8 deletions(-)
diff --git a/dlls/qmgr/job.c b/dlls/qmgr/job.c
index 4abf220..a395ec6 100644
--- a/dlls/qmgr/job.c
+++ b/dlls/qmgr/job.c
@@ -25,9 +25,15 @@
#include "qmgr.h"
#include "wine/debug.h"
+#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(qmgr);
+static inline BOOL is_job_done(const BackgroundCopyJobImpl *job)
+{
+ return job->state == BG_JOB_STATE_CANCELLED || job->state == BG_JOB_STATE_ACKNOWLEDGED;
+}
+
static inline BackgroundCopyJobImpl *impl_from_IBackgroundCopyJob2(IBackgroundCopyJob2 *iface)
{
return CONTAINING_RECORD(iface, BackgroundCopyJobImpl, IBackgroundCopyJob2_iface);
@@ -73,6 +79,7 @@ static ULONG WINAPI BITS_IBackgroundCopyJob_Release(IBackgroundCopyJob2 *iface)
This->cs.DebugInfo->Spare[0] = 0;
DeleteCriticalSection(&This->cs);
HeapFree(GetProcessHeap(), 0, This->displayName);
+ HeapFree(GetProcessHeap(), 0, This->description);
HeapFree(GetProcessHeap(), 0, This);
}
@@ -147,8 +154,7 @@ static HRESULT WINAPI BITS_IBackgroundCopyJob_Resume(
HRESULT rv = S_OK;
EnterCriticalSection(&globalMgr.cs);
- if (This->state == BG_JOB_STATE_CANCELLED
- || This->state == BG_JOB_STATE_ACKNOWLEDGED)
+ if (is_job_done(This))
{
rv = BG_E_INVALID_STATE;
}
@@ -182,8 +188,7 @@ static HRESULT WINAPI BITS_IBackgroundCopyJob_Complete(
EnterCriticalSection(&This->cs);
- if (This->state == BG_JOB_STATE_CANCELLED
- || This->state == BG_JOB_STATE_ACKNOWLEDGED)
+ if (is_job_done(This))
{
rv = BG_E_INVALID_STATE;
}
@@ -313,7 +318,7 @@ static HRESULT WINAPI BITS_IBackgroundCopyJob_GetDisplayName(
if (!pVal)
return E_INVALIDARG;
- n = (lstrlenW(This->displayName) + 1) * sizeof **pVal;
+ n = (strlenW(This->displayName) + 1) * sizeof **pVal;
*pVal = CoTaskMemAlloc(n);
if (*pVal == NULL)
return E_OUTOFMEMORY;
@@ -325,8 +330,36 @@ static HRESULT WINAPI BITS_IBackgroundCopyJob_SetDescription(
IBackgroundCopyJob2 *iface,
LPCWSTR Val)
{
- FIXME("Not implemented\n");
- return E_NOTIMPL;
+ BackgroundCopyJobImpl *This = impl_from_IBackgroundCopyJob2(iface);
+ static const int max_description_len = 1024;
+ HRESULT hr = S_OK;
+ int len;
+
+ TRACE("(%p)->(%s)\n", This, debugstr_w(Val));
+
+ if (!Val) return E_INVALIDARG;
+
+ len = strlenW(Val);
+ if (len > max_description_len) return BG_E_STRING_TOO_LONG;
+
+ EnterCriticalSection(&This->cs);
+
+ if (is_job_done(This))
+ {
+ hr = BG_E_INVALID_STATE;
+ }
+ else
+ {
+ HeapFree(GetProcessHeap(), 0, This->description);
+ if ((This->description = HeapAlloc(GetProcessHeap(), 0, (len+1)*sizeof(WCHAR))))
+ strcpyW(This->description, Val);
+ else
+ hr = E_OUTOFMEMORY;
+ }
+
+ LeaveCriticalSection(&This->cs);
+
+ return hr;
}
static HRESULT WINAPI BITS_IBackgroundCopyJob_GetDescription(
@@ -588,7 +621,7 @@ HRESULT BackgroundCopyJobConstructor(LPCWSTR displayName, BG_JOB_TYPE type, GUID
This->ref = 1;
This->type = type;
- n = (lstrlenW(displayName) + 1) * sizeof *displayName;
+ n = (strlenW(displayName) + 1) * sizeof *displayName;
This->displayName = HeapAlloc(GetProcessHeap(), 0, n);
if (!This->displayName)
{
@@ -617,6 +650,7 @@ HRESULT BackgroundCopyJobConstructor(LPCWSTR displayName, BG_JOB_TYPE type, GUID
This->jobProgress.FilesTransferred = 0;
This->state = BG_JOB_STATE_SUSPENDED;
+ This->description = NULL;
*job = This;
return S_OK;
diff --git a/dlls/qmgr/qmgr.h b/dlls/qmgr/qmgr.h
index 215c200..1f64d41 100644
--- a/dlls/qmgr/qmgr.h
+++ b/dlls/qmgr/qmgr.h
@@ -36,6 +36,7 @@ typedef struct
IBackgroundCopyJob2 IBackgroundCopyJob2_iface;
LONG ref;
LPWSTR displayName;
+ LPWSTR description;
BG_JOB_TYPE type;
GUID jobId;
struct list files;
More information about the wine-cvs
mailing list