Commit ca736551 authored by Roy Shea's avatar Roy Shea Committed by Alexandre Julliard

mstask: Implemented (Set|Get)ApplicationName.

parent 67631163
...@@ -3,7 +3,7 @@ TOPOBJDIR = ../.. ...@@ -3,7 +3,7 @@ TOPOBJDIR = ../..
SRCDIR = @srcdir@ SRCDIR = @srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
MODULE = mstask.dll MODULE = mstask.dll
IMPORTS = uuid kernel32 IMPORTS = uuid ole32 kernel32
C_SRCS = \ C_SRCS = \
factory.c \ factory.c \
......
...@@ -58,6 +58,7 @@ typedef struct ...@@ -58,6 +58,7 @@ typedef struct
const IPersistFileVtbl *persistVtbl; const IPersistFileVtbl *persistVtbl;
LONG ref; LONG ref;
LPWSTR taskName; LPWSTR taskName;
LPWSTR applicationName;
} TaskImpl; } TaskImpl;
extern HRESULT TaskConstructor(LPCWSTR pwszTaskName, LPVOID *ppObj); extern HRESULT TaskConstructor(LPCWSTR pwszTaskName, LPVOID *ppObj);
......
...@@ -323,16 +323,69 @@ static HRESULT WINAPI MSTASK_ITask_SetApplicationName( ...@@ -323,16 +323,69 @@ static HRESULT WINAPI MSTASK_ITask_SetApplicationName(
ITask* iface, ITask* iface,
LPCWSTR pwszApplicationName) LPCWSTR pwszApplicationName)
{ {
FIXME("(%p, %s): stub\n", iface, debugstr_w(pwszApplicationName)); DWORD n;
return E_NOTIMPL; TaskImpl *This = (TaskImpl *)iface;
LPWSTR tmp_name;
TRACE("(%p, %s)\n", iface, debugstr_w(pwszApplicationName));
/* Empty application name */
if (pwszApplicationName[0] == 0)
{
HeapFree(GetProcessHeap(), 0, This->applicationName);
This->applicationName = NULL;
return S_OK;
}
/* Attempt to set pwszApplicationName to a path resolved application name */
n = SearchPathW(NULL, pwszApplicationName, NULL, 0, NULL, NULL);
if (n)
{
tmp_name = HeapAlloc(GetProcessHeap(), 0, n * sizeof(WCHAR));
if (!tmp_name)
return E_OUTOFMEMORY;
n = SearchPathW(NULL, pwszApplicationName, NULL, n, tmp_name, NULL);
if (n)
{
HeapFree(GetProcessHeap(), 0, This->applicationName);
This->applicationName = tmp_name;
return S_OK;
}
else
HeapFree(GetProcessHeap(), 0, tmp_name);
}
/* If unable to path resolve name, simply set to pwszApplicationName */
n = (lstrlenW(pwszApplicationName) + 1);
tmp_name = HeapAlloc(GetProcessHeap(), 0, n * sizeof(WCHAR));
if (!tmp_name)
return E_OUTOFMEMORY;
lstrcpyW(tmp_name, pwszApplicationName);
HeapFree(GetProcessHeap(), 0, This->applicationName);
This->applicationName = tmp_name;
return S_OK;
} }
static HRESULT WINAPI MSTASK_ITask_GetApplicationName( static HRESULT WINAPI MSTASK_ITask_GetApplicationName(
ITask* iface, ITask* iface,
LPWSTR *ppwszApplicationName) LPWSTR *ppwszApplicationName)
{ {
FIXME("(%p, %p): stub\n", iface, ppwszApplicationName); DWORD n;
return E_NOTIMPL; TaskImpl *This = (TaskImpl *)iface;
TRACE("(%p, %p)\n", iface, ppwszApplicationName);
n = This->applicationName ? lstrlenW(This->applicationName) + 1 : 1;
*ppwszApplicationName = CoTaskMemAlloc(n * sizeof(WCHAR));
if (!*ppwszApplicationName)
return E_OUTOFMEMORY;
if (!This->applicationName)
*ppwszApplicationName[0] = 0;
else
lstrcpyW(*ppwszApplicationName, This->applicationName);
return S_OK;
} }
static HRESULT WINAPI MSTASK_ITask_SetParameters( static HRESULT WINAPI MSTASK_ITask_SetParameters(
...@@ -571,6 +624,7 @@ HRESULT TaskConstructor(LPCWSTR pwszTaskName, LPVOID *ppObj) ...@@ -571,6 +624,7 @@ HRESULT TaskConstructor(LPCWSTR pwszTaskName, LPVOID *ppObj)
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
lstrcpyW(This->taskName, pwszTaskName); lstrcpyW(This->taskName, pwszTaskName);
This->applicationName = NULL;
*ppObj = &This->lpVtbl; *ppObj = &This->lpVtbl;
InterlockedIncrement(&dll_ref); InterlockedIncrement(&dll_ref);
......
...@@ -118,10 +118,10 @@ static void test_SetApplicationName_GetApplicationName(void) ...@@ -118,10 +118,10 @@ static void test_SetApplicationName_GetApplicationName(void)
/* Attempt getting before setting application name */ /* Attempt getting before setting application name */
hres = ITask_GetApplicationName(test_task, &stored_name); hres = ITask_GetApplicationName(test_task, &stored_name);
todo_wine ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres);
if (hres == S_OK) if (hres == S_OK)
{ {
todo_wine ok(!lstrcmpW(stored_name, empty), ok(!lstrcmpW(stored_name, empty),
"Got %s, expected empty string\n", dbgstr_w(stored_name)); "Got %s, expected empty string\n", dbgstr_w(stored_name));
CoTaskMemFree(stored_name); CoTaskMemFree(stored_name);
} }
...@@ -129,14 +129,14 @@ static void test_SetApplicationName_GetApplicationName(void) ...@@ -129,14 +129,14 @@ static void test_SetApplicationName_GetApplicationName(void)
/* Set application name to a non-existent application and then get /* Set application name to a non-existent application and then get
* the application name that is actually stored */ * the application name that is actually stored */
hres = ITask_SetApplicationName(test_task, non_application_name); hres = ITask_SetApplicationName(test_task, non_application_name);
todo_wine ok(hres == S_OK, "Failed setting name %s: %08x\n", ok(hres == S_OK, "Failed setting name %s: %08x\n",
dbgstr_w(non_application_name), hres); dbgstr_w(non_application_name), hres);
hres = ITask_GetApplicationName(test_task, &stored_name); hres = ITask_GetApplicationName(test_task, &stored_name);
todo_wine ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres);
if (hres == S_OK) if (hres == S_OK)
{ {
full_name = path_resolve_name(non_application_name); full_name = path_resolve_name(non_application_name);
todo_wine ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n", ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n",
dbgstr_w(stored_name), dbgstr_w(full_name)); dbgstr_w(stored_name), dbgstr_w(full_name));
CoTaskMemFree(stored_name); CoTaskMemFree(stored_name);
} }
...@@ -144,14 +144,14 @@ static void test_SetApplicationName_GetApplicationName(void) ...@@ -144,14 +144,14 @@ static void test_SetApplicationName_GetApplicationName(void)
/* Set a valid application name with program type extension and then /* Set a valid application name with program type extension and then
* get the stored name */ * get the stored name */
hres = ITask_SetApplicationName(test_task, notepad_exe); hres = ITask_SetApplicationName(test_task, notepad_exe);
todo_wine ok(hres == S_OK, "Failed setting name %s: %08x\n", ok(hres == S_OK, "Failed setting name %s: %08x\n",
dbgstr_w(notepad_exe), hres); dbgstr_w(notepad_exe), hres);
hres = ITask_GetApplicationName(test_task, &stored_name); hres = ITask_GetApplicationName(test_task, &stored_name);
todo_wine ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres);
if (hres == S_OK) if (hres == S_OK)
{ {
full_name = path_resolve_name(notepad_exe); full_name = path_resolve_name(notepad_exe);
todo_wine ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n", ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n",
dbgstr_w(stored_name), dbgstr_w(full_name)); dbgstr_w(stored_name), dbgstr_w(full_name));
CoTaskMemFree(stored_name); CoTaskMemFree(stored_name);
} }
...@@ -159,13 +159,13 @@ static void test_SetApplicationName_GetApplicationName(void) ...@@ -159,13 +159,13 @@ static void test_SetApplicationName_GetApplicationName(void)
/* Set a valid application name without program type extension and /* Set a valid application name without program type extension and
* then get the stored name */ * then get the stored name */
hres = ITask_SetApplicationName(test_task, notepad); hres = ITask_SetApplicationName(test_task, notepad);
todo_wine ok(hres == S_OK, "Failed setting name %s: %08x\n", dbgstr_w(notepad), hres); ok(hres == S_OK, "Failed setting name %s: %08x\n", dbgstr_w(notepad), hres);
hres = ITask_GetApplicationName(test_task, &stored_name); hres = ITask_GetApplicationName(test_task, &stored_name);
todo_wine ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres);
if (hres == S_OK) if (hres == S_OK)
{ {
full_name = path_resolve_name(notepad); full_name = path_resolve_name(notepad);
todo_wine ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n", ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n",
dbgstr_w(stored_name), dbgstr_w(full_name)); dbgstr_w(stored_name), dbgstr_w(full_name));
CoTaskMemFree(stored_name); CoTaskMemFree(stored_name);
} }
...@@ -174,26 +174,26 @@ static void test_SetApplicationName_GetApplicationName(void) ...@@ -174,26 +174,26 @@ static void test_SetApplicationName_GetApplicationName(void)
* to a non-existant application and then get the name that is * to a non-existant application and then get the name that is
* actually stored */ * actually stored */
hres = ITask_SetApplicationName(test_task, non_application_name); hres = ITask_SetApplicationName(test_task, non_application_name);
todo_wine ok(hres == S_OK, "Failed setting name %s: %08x\n", ok(hres == S_OK, "Failed setting name %s: %08x\n",
dbgstr_w(non_application_name), hres); dbgstr_w(non_application_name), hres);
hres = ITask_GetApplicationName(test_task, &stored_name); hres = ITask_GetApplicationName(test_task, &stored_name);
todo_wine ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres);
if (hres == S_OK) if (hres == S_OK)
{ {
full_name = path_resolve_name(non_application_name); full_name = path_resolve_name(non_application_name);
todo_wine ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n", ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n",
dbgstr_w(stored_name), dbgstr_w(full_name)); dbgstr_w(stored_name), dbgstr_w(full_name));
CoTaskMemFree(stored_name); CoTaskMemFree(stored_name);
} }
/* Clear application name */ /* Clear application name */
hres = ITask_SetApplicationName(test_task, empty); hres = ITask_SetApplicationName(test_task, empty);
todo_wine ok(hres == S_OK, "Failed setting name %s: %08x\n", dbgstr_w(empty), hres); ok(hres == S_OK, "Failed setting name %s: %08x\n", dbgstr_w(empty), hres);
hres = ITask_GetApplicationName(test_task, &stored_name); hres = ITask_GetApplicationName(test_task, &stored_name);
todo_wine ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres);
if (hres == S_OK) if (hres == S_OK)
{ {
todo_wine ok(!lstrcmpW(stored_name, empty), ok(!lstrcmpW(stored_name, empty),
"Got %s, expected empty string\n", dbgstr_w(stored_name)); "Got %s, expected empty string\n", dbgstr_w(stored_name));
CoTaskMemFree(stored_name); CoTaskMemFree(stored_name);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment