From: Vijay Kiran Kamuju infyquest@gmail.com
--- programs/schtasks/schtasks.c | 69 ++++++++++++++++-------------- programs/schtasks/tests/schtasks.c | 22 ++++++++++ 2 files changed, 58 insertions(+), 33 deletions(-)
diff --git a/programs/schtasks/schtasks.c b/programs/schtasks/schtasks.c index c9434801db8..10f17d7601b 100644 --- a/programs/schtasks/schtasks.c +++ b/programs/schtasks/schtasks.c @@ -111,7 +111,7 @@ static BSTR read_file_to_bstr(const WCHAR *file_name)
if (read_size > 2 && data[0] == 0xff && data[1] == 0xfe) { /* UTF-16 BOM */ ret = SysAllocStringLen((const WCHAR *)(data + 2), (read_size - 2) / sizeof(WCHAR)); - }else { + } else { size = MultiByteToWideChar(CP_ACP, 0, (const char *)data, read_size, NULL, 0); ret = SysAllocStringLen(NULL, size); if (ret) @@ -131,13 +131,13 @@ static int change_command(int argc, WCHAR *argv[])
while (argc) { if (!wcsicmp(argv[0], L"/tn")) { - if (argc < 2) { - FIXME("Missing /tn value\n"); + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /tn value\n"); return 1; }
if (task_name) { - FIXME("Duplicated /tn argument\n"); + ERR("Duplicated /tn argument\n"); return 1; }
@@ -150,8 +150,8 @@ static int change_command(int argc, WCHAR *argv[]) argc--; argv++; } else if (!wcsicmp(argv[0], L"/tr")) { - if (argc < 2) { - FIXME("Missing /tr value\n"); + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /tr value\n"); return 1; }
@@ -159,19 +159,19 @@ static int change_command(int argc, WCHAR *argv[]) have_option = TRUE; argc -= 2; argv += 2; - }else { + } else { FIXME("Unsupported arguments %s\n", debugstr_w(argv[0])); return 1; } }
if (!task_name) { - FIXME("Missing /tn option\n"); + ERR("Missing /tn option\n"); return 1; }
if (!have_option) { - FIXME("Missing change options\n"); + ERR("Missing change options\n"); return 1; }
@@ -204,28 +204,28 @@ static int create_command(int argc, WCHAR *argv[])
while (argc) { if (!wcsicmp(argv[0], L"/xml")) { - if (argc < 2) { - FIXME("Missing /xml value\n"); - return 1; + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /xml value\n"); + return E_FAIL; }
if (xml_file) { - FIXME("Duplicated /xml argument\n"); - return 1; + ERR("Duplicated /xml argument\n"); + return E_FAIL; }
xml_file = argv[1]; argc -= 2; argv += 2; } else if (!wcsicmp(argv[0], L"/tn")) { - if (argc < 2) { - FIXME("Missing /tn value\n"); - return 1; + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /tn value\n"); + return E_FAIL; }
if (task_name) { - FIXME("Duplicated /tn argument\n"); - return 1; + ERR("Duplicated /tn argument\n"); + return E_FAIL; }
task_name = argv[1]; @@ -236,33 +236,33 @@ static int create_command(int argc, WCHAR *argv[]) argc--; argv++; } else if (!wcsicmp(argv[0], L"/ru")) { - if (argc < 2) { - FIXME("Missing /ru value\n"); - return 1; + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /ru value\n"); + return E_FAIL; }
FIXME("Unsupported /ru option %s\n", debugstr_w(argv[1])); argc -= 2; argv += 2; - }else { + } else { FIXME("Unsupported argument %s\n", debugstr_w(argv[0])); - return 1; + return E_FAIL; } }
if (!task_name) { - FIXME("Missing /tn argument\n"); - return 1; + ERR("Missing /tn argument\n"); + return E_FAIL; }
if (!xml_file) { - FIXME("Missing /xml argument\n"); + ERR("Missing /xml argument\n"); return E_FAIL; }
xml = read_file_to_bstr(xml_file); if (!xml) - return 1; + return E_FAIL;
root = get_tasks_root_folder(); if (!root) { @@ -297,27 +297,27 @@ static int delete_command(int argc, WCHAR *argv[]) argc--; argv++; } else if (!wcsicmp(argv[0], L"/tn")) { - if (argc < 2) { - FIXME("Missing /tn value\n"); + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /tn value\n"); return 1; }
if (task_name) { - FIXME("Duplicated /tn argument\n"); + ERR("Duplicated /tn argument\n"); return 1; }
task_name = argv[1]; argc -= 2; argv += 2; - }else { + } else { FIXME("Unsupported argument %s\n", debugstr_w(argv[0])); return 1; } }
if (!task_name) { - FIXME("Missing /tn argument\n"); + ERR("Missing /tn argument\n"); return 1; }
@@ -354,7 +354,10 @@ int __cdecl wmain(int argc, WCHAR *argv[]) else if (!wcsicmp(argv[1], L"/delete")) ret = delete_command(argc - 2, argv + 2); else + { FIXME("Unsupported command %s\n", debugstr_w(argv[1])); + ret = 1; + }
CoUninitialize(); return ret; diff --git a/programs/schtasks/tests/schtasks.c b/programs/schtasks/tests/schtasks.c index 3ed2378c90c..e896449fa32 100644 --- a/programs/schtasks/tests/schtasks.c +++ b/programs/schtasks/tests/schtasks.c @@ -222,11 +222,17 @@ START_TEST(schtasks) r = run_command("schtasks"); ok(r == 0, "r = %lu\n", r);
+ r = run_command("schtasks /wine"); + ok(r == 1, "r = %lu\n", r); + register_task("winetest");
r = run_command("schtasks /change /tn winetest /enable"); ok(r == 0, "r = %lu\n", r);
+ r = run_command("schtasks /change /tn winetest /tn /enable"); + ok(r == 1, "r = %lu\n", r); + unregister_task("winetest");
r = run_command("schtasks /change /tn winetest /enable"); @@ -237,6 +243,9 @@ START_TEST(schtasks) r = run_command("schtasks /CHANGE /tn wine\test\winetest /enable"); ok(r == 0, "r = %lu\n", r);
+ r = run_command("schtasks /delete /f /tn /tn wine\test\winetest"); + ok(r == 1, "r = %lu\n", r); + r = run_command("schtasks /delete /f /tn wine\test\winetest"); ok(r == 0, "r = %lu\n", r);
@@ -248,6 +257,18 @@ START_TEST(schtasks) r = run_command("schtasks /create /xml test.xml /tn wine\winetest"); ok(r == 0, "r = %lu\n", r);
+ r = run_command("schtasks /create /xml test.xml /tn wine\winetest /tn"); + ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ + + r = run_command("schtasks /create /xml test.xml /tn wine\winetest /xml"); + ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ + + r = run_command("schtasks /create /xml test.xml /tn wine\winetest /tn test"); + ok(r == E_FAIL, "r = %lx\n", r); /* duplicate arguments */ + + r = run_command("schtasks /create /xml test.xml /tn wine\winetest /xml empty.xml"); + ok(r == E_FAIL, "r = %lx\n", r); /* duplicate arguments */ + r = run_command("schtasks /change /tn wine\winetest /enable"); ok(r == 0, "r = %lu\n", r);
@@ -268,6 +289,7 @@ START_TEST(schtasks)
r = ITaskFolder_DeleteFolder(root, wine_testW, 0); ok(r == S_OK, "DeleteFolder(\wine\test) failed: %lx\n", r); + r = ITaskFolder_DeleteFolder(root, wineW, 0); ok(r == S_OK, "DeleteFolder(\wine) failed: %lx\n", r);