Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
d6f6b6b7
Commit
d6f6b6b7
authored
Jan 20, 2014
by
Dmitry Timoshkov
Committed by
Alexandre Julliard
Jan 27, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
taskschd: Implement ITaskFolder::CreateFolder.
parent
efced588
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
62 additions
and
23 deletions
+62
-23
folder.c
dlls/taskschd/folder.c
+58
-8
task.c
dlls/taskschd/task.c
+1
-1
taskschd_private.h
dlls/taskschd/taskschd_private.h
+1
-1
scheduler.c
dlls/taskschd/tests/scheduler.c
+2
-13
No files found.
dlls/taskschd/folder.c
View file @
d6f6b6b7
...
@@ -134,6 +134,30 @@ static HRESULT WINAPI TaskFolder_get_Name(ITaskFolder *iface, BSTR *name)
...
@@ -134,6 +134,30 @@ static HRESULT WINAPI TaskFolder_get_Name(ITaskFolder *iface, BSTR *name)
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
reg_create_folder
(
const
WCHAR
*
path
,
HKEY
*
hfolder
)
{
HKEY
hroot
;
DWORD
ret
,
disposition
;
ret
=
RegCreateKeyA
(
HKEY_LOCAL_MACHINE
,
root
,
&
hroot
);
if
(
ret
)
return
HRESULT_FROM_WIN32
(
ret
);
while
(
*
path
==
'\\'
)
path
++
;
ret
=
RegCreateKeyExW
(
hroot
,
path
,
0
,
NULL
,
0
,
KEY_ALL_ACCESS
,
NULL
,
hfolder
,
&
disposition
);
if
(
ret
==
ERROR_FILE_NOT_FOUND
)
ret
=
ERROR_PATH_NOT_FOUND
;
if
(
ret
==
ERROR_SUCCESS
&&
disposition
==
REG_OPENED_EXISTING_KEY
)
{
RegCloseKey
(
*
hfolder
);
ret
=
ERROR_ALREADY_EXISTS
;
}
RegCloseKey
(
hroot
);
return
HRESULT_FROM_WIN32
(
ret
);
}
static
HRESULT
reg_open_folder
(
const
WCHAR
*
path
,
HKEY
*
hfolder
)
static
HRESULT
reg_open_folder
(
const
WCHAR
*
path
,
HKEY
*
hfolder
)
{
{
HKEY
hroot
;
HKEY
hroot
;
...
@@ -203,7 +227,7 @@ static HRESULT WINAPI TaskFolder_GetFolder(ITaskFolder *iface, BSTR path, ITaskF
...
@@ -203,7 +227,7 @@ static HRESULT WINAPI TaskFolder_GetFolder(ITaskFolder *iface, BSTR path, ITaskF
if
(
!
path
)
return
E_INVALIDARG
;
if
(
!
path
)
return
E_INVALIDARG
;
if
(
!
new_folder
)
return
E_POINTER
;
if
(
!
new_folder
)
return
E_POINTER
;
return
TaskFolder_create
(
folder
->
path
,
path
,
new_folder
);
return
TaskFolder_create
(
folder
->
path
,
path
,
new_folder
,
FALSE
);
}
}
static
HRESULT
WINAPI
TaskFolder_GetFolders
(
ITaskFolder
*
iface
,
LONG
flags
,
ITaskFolderCollection
**
folders
)
static
HRESULT
WINAPI
TaskFolder_GetFolders
(
ITaskFolder
*
iface
,
LONG
flags
,
ITaskFolderCollection
**
folders
)
...
@@ -212,10 +236,32 @@ static HRESULT WINAPI TaskFolder_GetFolders(ITaskFolder *iface, LONG flags, ITas
...
@@ -212,10 +236,32 @@ static HRESULT WINAPI TaskFolder_GetFolders(ITaskFolder *iface, LONG flags, ITas
return
E_NOTIMPL
;
return
E_NOTIMPL
;
}
}
static
HRESULT
WINAPI
TaskFolder_CreateFolder
(
ITaskFolder
*
iface
,
BSTR
name
,
VARIANT
sddl
,
ITaskFolder
**
folde
r
)
static
inline
BOOL
is_variant_null
(
const
VARIANT
*
va
r
)
{
{
FIXME
(
"%p,%s,%s,%p: stub
\n
"
,
iface
,
debugstr_w
(
name
),
debugstr_variant
(
&
sddl
),
folder
);
return
V_VT
(
var
)
==
VT_EMPTY
||
V_VT
(
var
)
==
VT_NULL
||
return
E_NOTIMPL
;
(
V_VT
(
var
)
==
VT_BSTR
&&
(
V_BSTR
(
var
)
==
NULL
||
!*
V_BSTR
(
var
)));
}
static
HRESULT
WINAPI
TaskFolder_CreateFolder
(
ITaskFolder
*
iface
,
BSTR
path
,
VARIANT
sddl
,
ITaskFolder
**
new_folder
)
{
TaskFolder
*
folder
=
impl_from_ITaskFolder
(
iface
);
ITaskFolder
*
tmp_folder
=
NULL
;
HRESULT
hr
;
TRACE
(
"%p,%s,%s,%p
\n
"
,
iface
,
debugstr_w
(
path
),
debugstr_variant
(
&
sddl
),
folder
);
if
(
!
path
)
return
E_INVALIDARG
;
if
(
!
new_folder
)
new_folder
=
&
tmp_folder
;
if
(
!
is_variant_null
(
&
sddl
))
FIXME
(
"security descriptor %s is ignored
\n
"
,
debugstr_variant
(
&
sddl
));
hr
=
TaskFolder_create
(
folder
->
path
,
path
,
new_folder
,
TRUE
);
if
(
tmp_folder
)
ITaskFolder_Release
(
tmp_folder
);
return
hr
;
}
}
static
HRESULT
WINAPI
TaskFolder_DeleteFolder
(
ITaskFolder
*
iface
,
BSTR
name
,
LONG
flags
)
static
HRESULT
WINAPI
TaskFolder_DeleteFolder
(
ITaskFolder
*
iface
,
BSTR
name
,
LONG
flags
)
...
@@ -302,7 +348,7 @@ static const ITaskFolderVtbl TaskFolder_vtbl =
...
@@ -302,7 +348,7 @@ static const ITaskFolderVtbl TaskFolder_vtbl =
TaskFolder_SetSecurityDescriptor
TaskFolder_SetSecurityDescriptor
};
};
HRESULT
TaskFolder_create
(
const
WCHAR
*
parent
,
const
WCHAR
*
path
,
ITaskFolder
**
obj
)
HRESULT
TaskFolder_create
(
const
WCHAR
*
parent
,
const
WCHAR
*
path
,
ITaskFolder
**
obj
,
BOOL
create
)
{
{
static
const
WCHAR
bslash
[]
=
{
'\\'
,
0
};
static
const
WCHAR
bslash
[]
=
{
'\\'
,
0
};
TaskFolder
*
folder
;
TaskFolder
*
folder
;
...
@@ -328,17 +374,21 @@ HRESULT TaskFolder_create(const WCHAR *parent, const WCHAR *path, ITaskFolder **
...
@@ -328,17 +374,21 @@ HRESULT TaskFolder_create(const WCHAR *parent, const WCHAR *path, ITaskFolder **
if
(
parent
)
if
(
parent
)
strcpyW
(
folder_path
,
parent
);
strcpyW
(
folder_path
,
parent
);
if
(
path
&&
*
path
)
{
len
=
strlenW
(
folder_path
);
len
=
strlenW
(
folder_path
);
if
(
!
len
||
folder_path
[
len
-
1
]
!=
'\\'
)
if
(
!
len
||
folder_path
[
len
-
1
]
!=
'\\'
)
strcatW
(
folder_path
,
bslash
);
strcatW
(
folder_path
,
bslash
);
if
(
path
)
{
while
(
*
path
==
'\\'
)
path
++
;
while
(
*
path
==
'\\'
)
path
++
;
strcatW
(
folder_path
,
path
);
strcatW
(
folder_path
,
path
);
}
}
hr
=
reg_open_folder
(
folder_path
,
&
hfolder
);
len
=
strlenW
(
folder_path
);
if
(
!
len
)
strcatW
(
folder_path
,
bslash
);
hr
=
create
?
reg_create_folder
(
folder_path
,
&
hfolder
)
:
reg_open_folder
(
folder_path
,
&
hfolder
);
if
(
hr
)
if
(
hr
)
{
{
HeapFree
(
GetProcessHeap
(),
0
,
folder_path
);
HeapFree
(
GetProcessHeap
(),
0
,
folder_path
);
...
...
dlls/taskschd/task.c
View file @
d6f6b6b7
...
@@ -117,7 +117,7 @@ static HRESULT WINAPI TaskService_GetFolder(ITaskService *iface, BSTR path, ITas
...
@@ -117,7 +117,7 @@ static HRESULT WINAPI TaskService_GetFolder(ITaskService *iface, BSTR path, ITas
if
(
!
folder
)
return
E_POINTER
;
if
(
!
folder
)
return
E_POINTER
;
return
TaskFolder_create
(
path
,
NULL
,
folder
);
return
TaskFolder_create
(
path
,
NULL
,
folder
,
FALSE
);
}
}
static
HRESULT
WINAPI
TaskService_GetRunningTasks
(
ITaskService
*
iface
,
LONG
flags
,
IRunningTaskCollection
**
tasks
)
static
HRESULT
WINAPI
TaskService_GetRunningTasks
(
ITaskService
*
iface
,
LONG
flags
,
IRunningTaskCollection
**
tasks
)
...
...
dlls/taskschd/taskschd_private.h
View file @
d6f6b6b7
...
@@ -17,6 +17,6 @@
...
@@ -17,6 +17,6 @@
*/
*/
HRESULT
TaskService_create
(
void
**
obj
)
DECLSPEC_HIDDEN
;
HRESULT
TaskService_create
(
void
**
obj
)
DECLSPEC_HIDDEN
;
HRESULT
TaskFolder_create
(
const
WCHAR
*
parent
,
const
WCHAR
*
path
,
ITaskFolder
**
obj
)
DECLSPEC_HIDDEN
;
HRESULT
TaskFolder_create
(
const
WCHAR
*
parent
,
const
WCHAR
*
path
,
ITaskFolder
**
obj
,
BOOL
create
)
DECLSPEC_HIDDEN
;
const
char
*
debugstr_variant
(
const
VARIANT
*
v
)
DECLSPEC_HIDDEN
;
const
char
*
debugstr_variant
(
const
VARIANT
*
v
)
DECLSPEC_HIDDEN
;
dlls/taskschd/tests/scheduler.c
View file @
d6f6b6b7
...
@@ -185,7 +185,6 @@ todo_wine
...
@@ -185,7 +185,6 @@ todo_wine
SysFreeString
(
bstr
);
SysFreeString
(
bstr
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
NULL
,
v_null
,
&
subfolder
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
NULL
,
v_null
,
&
subfolder
);
todo_wine
ok
(
hr
==
E_INVALIDARG
,
"expected E_INVALIDARG, got %#x
\n
"
,
hr
);
ok
(
hr
==
E_INVALIDARG
,
"expected E_INVALIDARG, got %#x
\n
"
,
hr
);
/* Just in case something was left from previous runs */
/* Just in case something was left from previous runs */
...
@@ -205,20 +204,14 @@ todo_wine
...
@@ -205,20 +204,14 @@ todo_wine
ok
(
hr
==
E_INVALIDARG
,
"expected E_INVALIDARG, got %#x
\n
"
,
hr
);
ok
(
hr
==
E_INVALIDARG
,
"expected E_INVALIDARG, got %#x
\n
"
,
hr
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
Wine_Folder1_Folder2
,
v_null
,
&
subfolder
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
Wine_Folder1_Folder2
,
v_null
,
&
subfolder
);
todo_wine
ok
(
hr
==
S_OK
,
"CreateFolder error %#x
\n
"
,
hr
);
ok
(
hr
==
S_OK
,
"CreateFolder error %#x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
{
ITaskFolder_Release
(
folder
);
ITaskService_Release
(
service
);
return
;
}
ITaskFolder_Release
(
subfolder
);
ITaskFolder_Release
(
subfolder
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
Wine
,
v_null
,
NULL
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
Wine
,
v_null
,
NULL
);
ok
(
hr
==
HRESULT_FROM_WIN32
(
ERROR_ALREADY_EXISTS
),
"expected ERROR_ALREADY_EXISTS, got %#x
\n
"
,
hr
);
ok
(
hr
==
HRESULT_FROM_WIN32
(
ERROR_ALREADY_EXISTS
),
"expected ERROR_ALREADY_EXISTS, got %#x
\n
"
,
hr
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
Wine_Folder1_
,
v_null
,
&
subfolder
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
Wine_Folder1_
,
v_null
,
&
subfolder
);
todo_wine
ok
(
hr
==
HRESULT_FROM_WIN32
(
ERROR_INVALID_NAME
),
"expected ERROR_INVALID_NAME, got %#x
\n
"
,
hr
);
ok
(
hr
==
HRESULT_FROM_WIN32
(
ERROR_INVALID_NAME
),
"expected ERROR_INVALID_NAME, got %#x
\n
"
,
hr
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
Wine
,
v_null
,
&
subfolder
);
hr
=
ITaskFolder_CreateFolder
(
folder
,
Wine
,
v_null
,
&
subfolder
);
...
@@ -239,11 +232,6 @@ todo_wine
...
@@ -239,11 +232,6 @@ todo_wine
hr
=
ITaskService_GetFolder
(
service
,
Wine_Folder1_Folder2
,
&
subfolder
);
hr
=
ITaskService_GetFolder
(
service
,
Wine_Folder1_Folder2
,
&
subfolder
);
ok
(
hr
==
S_OK
,
"GetFolder error %#x
\n
"
,
hr
);
ok
(
hr
==
S_OK
,
"GetFolder error %#x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
{
ITaskService_Release
(
service
);
return
;
}
hr
=
ITaskFolder_get_Name
(
subfolder
,
&
bstr
);
hr
=
ITaskFolder_get_Name
(
subfolder
,
&
bstr
);
ok
(
hr
==
S_OK
,
"get_Name error %#x
\n
"
,
hr
);
ok
(
hr
==
S_OK
,
"get_Name error %#x
\n
"
,
hr
);
...
@@ -303,6 +291,7 @@ todo_wine
...
@@ -303,6 +291,7 @@ todo_wine
SysFreeString
(
bstr
);
SysFreeString
(
bstr
);
hr
=
ITaskFolder_GetFolder
(
subfolder
,
bslash
,
&
subfolder2
);
hr
=
ITaskFolder_GetFolder
(
subfolder
,
bslash
,
&
subfolder2
);
todo_wine
ok
(
hr
==
HRESULT_FROM_WIN32
(
ERROR_INVALID_NAME
),
"expected ERROR_INVALID_NAME, got %#x
\n
"
,
hr
);
ok
(
hr
==
HRESULT_FROM_WIN32
(
ERROR_INVALID_NAME
),
"expected ERROR_INVALID_NAME, got %#x
\n
"
,
hr
);
hr
=
ITaskFolder_GetFolder
(
subfolder
,
NULL
,
&
subfolder2
);
hr
=
ITaskFolder_GetFolder
(
subfolder
,
NULL
,
&
subfolder2
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment