[WIN32SS]
[reactos.git] / reactos / subsystems / win32 / win32k / eng / float.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Engine floating point functions
5 * FILE: subsys/win32k/eng/float.c
6 * PROGRAMER: Jason Filby
7 */
8
9 /* INCLUDES *****************************************************************/
10
11 #include <win32k.h>
12
13 #define NDEBUG
14 #include <debug.h>
15
16 /* FUNCTIONS *****************************************************************/
17
18 BOOL
19 APIENTRY
20 EngRestoreFloatingPointState ( IN VOID *Buffer )
21 {
22 NTSTATUS Status;
23 Status = KeRestoreFloatingPointState((PKFLOATING_SAVE)Buffer);
24 if (!NT_SUCCESS(Status))
25 {
26 return FALSE;
27 }
28 return TRUE;
29 }
30
31 ULONG
32 APIENTRY
33 EngSaveFloatingPointState(OUT VOID *Buffer,
34 IN ULONG BufferSize)
35 {
36 KFLOATING_SAVE TempBuffer;
37 NTSTATUS Status;
38 if (Buffer == NULL || BufferSize == 0)
39 {
40 /* Check for floating point support. */
41 Status = KeSaveFloatingPointState(&TempBuffer);
42 if (Status != STATUS_SUCCESS)
43 {
44 return(0);
45 }
46 KeRestoreFloatingPointState(&TempBuffer);
47 return(sizeof(KFLOATING_SAVE));
48 }
49 if (BufferSize < sizeof(KFLOATING_SAVE))
50 {
51 return(0);
52 }
53 Status = KeSaveFloatingPointState((PKFLOATING_SAVE)Buffer);
54 if (!NT_SUCCESS(Status))
55 {
56 return FALSE;
57 }
58 return TRUE;
59 }