Moved timer functions to dlls/kernel.

This commit is contained in:
Alexandre Julliard 2003-05-20 04:14:45 +00:00
parent fd9cbb6ce8
commit 9bf3ac619e
3 changed files with 191 additions and 224 deletions

View File

@ -478,6 +478,197 @@ BOOL WINAPI ReleaseSemaphore( HANDLE handle, LONG count, LONG *previous )
}
/*
* Timers
*/
/***********************************************************************
* CreateWaitableTimerA (KERNEL32.@)
*/
HANDLE WINAPI CreateWaitableTimerA( SECURITY_ATTRIBUTES *sa, BOOL manual, LPCSTR name )
{
WCHAR buffer[MAX_PATH];
if (!name) return CreateWaitableTimerW( sa, manual, NULL );
if (!MultiByteToWideChar( CP_ACP, 0, name, -1, buffer, MAX_PATH ))
{
SetLastError( ERROR_FILENAME_EXCED_RANGE );
return 0;
}
return CreateWaitableTimerW( sa, manual, buffer );
}
/***********************************************************************
* CreateWaitableTimerW (KERNEL32.@)
*/
HANDLE WINAPI CreateWaitableTimerW( SECURITY_ATTRIBUTES *sa, BOOL manual, LPCWSTR name )
{
HANDLE handle;
NTSTATUS status;
UNICODE_STRING us;
DWORD attr = 0;
OBJECT_ATTRIBUTES oa;
if (name) RtlInitUnicodeString(&us, name);
if (sa && (sa->nLength >= sizeof(*sa)) && sa->bInheritHandle)
attr |= OBJ_INHERIT;
InitializeObjectAttributes(&oa, name ? &us : NULL, attr,
NULL /* FIXME */, NULL /* FIXME */);
status = NtCreateTimer(&handle, TIMER_ALL_ACCESS, &oa,
manual ? NotificationTimer : SynchronizationTimer);
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return 0;
}
return handle;
}
/***********************************************************************
* OpenWaitableTimerA (KERNEL32.@)
*/
HANDLE WINAPI OpenWaitableTimerA( DWORD access, BOOL inherit, LPCSTR name )
{
WCHAR buffer[MAX_PATH];
if (!name) return OpenWaitableTimerW( access, inherit, NULL );
if (!MultiByteToWideChar( CP_ACP, 0, name, -1, buffer, MAX_PATH ))
{
SetLastError( ERROR_FILENAME_EXCED_RANGE );
return 0;
}
return OpenWaitableTimerW( access, inherit, buffer );
}
/***********************************************************************
* OpenWaitableTimerW (KERNEL32.@)
*/
HANDLE WINAPI OpenWaitableTimerW( DWORD access, BOOL inherit, LPCWSTR name )
{
NTSTATUS status;
ULONG attr = 0;
UNICODE_STRING us;
HANDLE handle;
OBJECT_ATTRIBUTES oa;
if (inherit) attr |= OBJ_INHERIT;
if (name) RtlInitUnicodeString(&us, name);
InitializeObjectAttributes(&oa, name ? &us : NULL, attr, NULL /* FIXME */, NULL /* FIXME */);
status = NtOpenTimer(&handle, access, &oa);
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return 0;
}
return handle;
}
/***********************************************************************
* SetWaitableTimer (KERNEL32.@)
*/
BOOL WINAPI SetWaitableTimer( HANDLE handle, const LARGE_INTEGER *when, LONG period,
PTIMERAPCROUTINE callback, LPVOID arg, BOOL resume )
{
NTSTATUS status = NtSetTimer(handle, when, callback, arg, resume, period, NULL);
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
if (status != STATUS_TIMER_RESUME_IGNORED) return FALSE;
}
return TRUE;
}
/***********************************************************************
* CancelWaitableTimer (KERNEL32.@)
*/
BOOL WINAPI CancelWaitableTimer( HANDLE handle )
{
NTSTATUS status;
status = NtCancelTimer(handle, NULL);
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
}
/***********************************************************************
* CreateTimerQueue (KERNEL32.@)
*/
HANDLE WINAPI CreateTimerQueue(void)
{
FIXME("stub\n");
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return NULL;
}
/***********************************************************************
* DeleteTimerQueueEx (KERNEL32.@)
*/
BOOL WINAPI DeleteTimerQueueEx(HANDLE TimerQueue, HANDLE CompletionEvent)
{
FIXME("(%p, %p): stub\n", TimerQueue, CompletionEvent);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/***********************************************************************
* CreateTimerQueueTimer (KERNEL32.@)
*
* Creates a timer-queue timer. This timer expires at the specified due
* time (in ms), then after every specified period (in ms). When the timer
* expires, the callback function is called.
*
* RETURNS
* nonzero on success or zero on faillure
*
* BUGS
* Unimplemented
*/
BOOL WINAPI CreateTimerQueueTimer( PHANDLE phNewTimer, HANDLE TimerQueue,
WAITORTIMERCALLBACK Callback, PVOID Parameter,
DWORD DueTime, DWORD Period, ULONG Flags )
{
FIXME("stub\n");
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return TRUE;
}
/***********************************************************************
* DeleteTimerQueueTimer (KERNEL32.@)
*
* Cancels a timer-queue timer.
*
* RETURNS
* nonzero on success or zero on faillure
*
* BUGS
* Unimplemented
*/
BOOL WINAPI DeleteTimerQueueTimer( HANDLE TimerQueue, HANDLE Timer,
HANDLE CompletionEvent )
{
FIXME("stub\n");
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return TRUE;
}
/*
* Pipes
*/

View File

@ -59,7 +59,6 @@ C_SRCS = \
$(TOPOBJDIR)/scheduler/sysdeps.c \
$(TOPOBJDIR)/scheduler/syslevel.c \
$(TOPOBJDIR)/scheduler/thread.c \
$(TOPOBJDIR)/scheduler/timer.c \
$(TOPOBJDIR)/win32/device.c \
$(TOPOBJDIR)/win32/except.c \
$(TOPOBJDIR)/win32/kernel32.c \

View File

@ -1,223 +0,0 @@
/*
* Win32 waitable timers
*
* Copyright 1999 Alexandre Julliard
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "config.h"
#include "wine/port.h"
#include <assert.h>
#include <string.h>
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
#include "winerror.h"
#include "winnls.h"
#include "wine/unicode.h"
#include "wine/server.h"
#include "wine/debug.h"
#include "ntdll_misc.h"
WINE_DEFAULT_DEBUG_CHANNEL(timer);
/***********************************************************************
* CreateWaitableTimerA (KERNEL32.@)
*/
HANDLE WINAPI CreateWaitableTimerA( SECURITY_ATTRIBUTES *sa, BOOL manual, LPCSTR name )
{
WCHAR buffer[MAX_PATH];
if (!name) return CreateWaitableTimerW( sa, manual, NULL );
if (!MultiByteToWideChar( CP_ACP, 0, name, -1, buffer, MAX_PATH ))
{
SetLastError( ERROR_FILENAME_EXCED_RANGE );
return 0;
}
return CreateWaitableTimerW( sa, manual, buffer );
}
/***********************************************************************
* CreateWaitableTimerW (KERNEL32.@)
*/
HANDLE WINAPI CreateWaitableTimerW( SECURITY_ATTRIBUTES *sa, BOOL manual, LPCWSTR name )
{
HANDLE handle;
NTSTATUS status;
UNICODE_STRING us;
DWORD attr = 0;
OBJECT_ATTRIBUTES oa;
if (name) RtlInitUnicodeString(&us, name);
if (sa && (sa->nLength >= sizeof(*sa)) && sa->bInheritHandle)
attr |= OBJ_INHERIT;
InitializeObjectAttributes(&oa, name ? &us : NULL, attr,
NULL /* FIXME */, NULL /* FIXME */);
status = NtCreateTimer(&handle, TIMER_ALL_ACCESS, &oa,
manual ? NotificationTimer : SynchronizationTimer);
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return NULL;
}
return handle;
}
/***********************************************************************
* OpenWaitableTimerA (KERNEL32.@)
*/
HANDLE WINAPI OpenWaitableTimerA( DWORD access, BOOL inherit, LPCSTR name )
{
WCHAR buffer[MAX_PATH];
if (!name) return OpenWaitableTimerW( access, inherit, NULL );
if (!MultiByteToWideChar( CP_ACP, 0, name, -1, buffer, MAX_PATH ))
{
SetLastError( ERROR_FILENAME_EXCED_RANGE );
return 0;
}
return OpenWaitableTimerW( access, inherit, buffer );
}
/***********************************************************************
* OpenWaitableTimerW (KERNEL32.@)
*/
HANDLE WINAPI OpenWaitableTimerW( DWORD access, BOOL inherit, LPCWSTR name )
{
NTSTATUS status;
ULONG attr = 0;
UNICODE_STRING us;
HANDLE handle;
OBJECT_ATTRIBUTES oa;
if (inherit) attr |= OBJ_INHERIT;
if (name) RtlInitUnicodeString(&us, name);
InitializeObjectAttributes(&oa, name ? &us : NULL, attr, NULL /* FIXME */, NULL /* FIXME */);
status = NtOpenTimer(&handle, access, &oa);
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return NULL;
}
return handle;
}
/***********************************************************************
* SetWaitableTimer (KERNEL32.@)
*/
BOOL WINAPI SetWaitableTimer( HANDLE handle, const LARGE_INTEGER *when, LONG period,
PTIMERAPCROUTINE callback, LPVOID arg, BOOL resume )
{
NTSTATUS status;
status = NtSetTimer(handle, when, callback, arg, resume, period, NULL);
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
if (status != STATUS_TIMER_RESUME_IGNORED) return FALSE;
}
return TRUE;
}
/***********************************************************************
* CancelWaitableTimer (KERNEL32.@)
*/
BOOL WINAPI CancelWaitableTimer( HANDLE handle )
{
NTSTATUS status;
status = NtCancelTimer(handle, NULL);
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
}
/***********************************************************************
* CreateTimerQueue (KERNEL32.@)
*/
HANDLE WINAPI CreateTimerQueue(void)
{
FIXME("stub\n");
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return NULL;
}
/***********************************************************************
* DeleteTimerQueueEx (KERNEL32.@)
*/
BOOL WINAPI DeleteTimerQueueEx(HANDLE TimerQueue, HANDLE CompletionEvent)
{
FIXME("(%p, %p): stub\n", TimerQueue, CompletionEvent);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/***********************************************************************
* CreateTimerQueueTimer (KERNEL32.@)
*
* Creates a timer-queue timer. This timer expires at the specified due
* time (in ms), then after every specified period (in ms). When the timer
* expires, the callback function is called.
*
* RETURNS
* nonzero on success or zero on faillure
*
* BUGS
* Unimplemented
*/
BOOL WINAPI CreateTimerQueueTimer( PHANDLE phNewTimer, HANDLE TimerQueue,
WAITORTIMERCALLBACK Callback, PVOID Parameter,
DWORD DueTime, DWORD Period, ULONG Flags )
{
FIXME("stub\n");
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return TRUE;
}
/***********************************************************************
* DeleteTimerQueueTimer (KERNEL32.@)
*
* Cancels a timer-queue timer.
*
* RETURNS
* nonzero on success or zero on faillure
*
* BUGS
* Unimplemented
*/
BOOL WINAPI DeleteTimerQueueTimer( HANDLE TimerQueue, HANDLE Timer,
HANDLE CompletionEvent )
{
FIXME("stub\n");
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return TRUE;
}