Storing an IP address in a signed int results in bugs if it starts
[wine] / dlls / ntdll / misc.c
1 /*
2  * Helper functions for ntdll
3  */
4
5 #include "config.h"
6
7 #include <time.h>
8 #include <math.h>
9
10 #include "debugtools.h"
11 #include "ntdll_misc.h"
12
13 DEFAULT_DEBUG_CHANNEL(ntdll);
14
15 #if defined(__GNUC__) && defined(__i386__)
16 #define DO_FPU(x,y) __asm__ __volatile__( x " %0;fwait" : "=m" (y) : )
17 #define POP_FPU(x) DO_FPU("fstpl",x)
18 #endif
19
20 void dump_ObjectAttributes (const OBJECT_ATTRIBUTES *oa)
21 {
22         if (oa)
23           TRACE("%p:(name=%s, attr=0x%08lx, hRoot=0x%08x, sd=%p) \n",
24             oa, debugstr_us(oa->ObjectName),
25             oa->Attributes, oa->RootDirectory, oa->SecurityDescriptor);
26 }
27
28 LPCSTR debugstr_us( const UNICODE_STRING *us )
29 {
30     if (!us) return "<null>";
31     return debugstr_wn(us->Buffer, us->Length);
32 }
33
34 /*********************************************************************
35  *                  _ftol   (NTDLL.@)
36  *
37  * VERSION
38  *      [GNUC && i386]
39  */
40 #if defined(__GNUC__) && defined(__i386__)
41 LONG __cdecl NTDLL__ftol(void)
42 {
43         /* don't just do DO_FPU("fistp",retval), because the rounding
44          * mode must also be set to "round towards zero"... */
45         double fl;
46         POP_FPU(fl);
47         return (LONG)fl;
48 }
49 #endif /* defined(__GNUC__) && defined(__i386__) */
50
51 /*********************************************************************
52  *                  _ftol   (NTDLL.@)
53  *
54  * FIXME
55  *      Should be register function
56  * VERSION
57  *      [!GNUC && i386]
58  */
59 #if !defined(__GNUC__) && defined(__i386__)
60 LONG __cdecl NTDLL__ftol(double fl)
61 {
62         FIXME("should be register function\n");
63         return (LONG)fl;
64 }
65 #endif /* !defined(__GNUC__) && defined(__i386__) */
66
67 /*********************************************************************
68  *                  _ftol   (NTDLL.@)
69  * VERSION
70  *      [!i386]
71  */
72 #ifndef __i386__
73 LONG __cdecl NTDLL__ftol(double fl)
74 {
75         return (LONG) fl;
76 }
77 #endif /* !defined(__i386__) */
78
79 /*********************************************************************
80  *                  _CIpow   (NTDLL.@)
81  * VERSION
82  *      [GNUC && i386]
83  */
84 #if defined(__GNUC__) && defined(__i386__)
85 double __cdecl NTDLL__CIpow(void)
86 {
87         double x,y;
88         POP_FPU(y);
89         POP_FPU(x);
90         return pow(x,y);
91 }
92 #endif /* defined(__GNUC__) && defined(__i386__) */
93
94
95 /*********************************************************************
96  *                  _CIpow   (NTDLL.@)
97  *
98  * FIXME
99  *      Should be register function
100  *
101  * VERSION
102  *      [!GNUC && i386]
103  */
104 #if !defined(__GNUC__) && defined(__i386__)
105 double __cdecl NTDLL__CIpow(double x,double y)
106 {
107         FIXME("should be register function\n");
108         return pow(x,y);
109 }
110 #endif /* !defined(__GNUC__) && defined(__i386__) */
111
112 /*********************************************************************
113  *                  _CIpow   (NTDLL.@)
114  * VERSION
115  *      [!i386]
116  */
117 #ifndef __i386__
118 double __cdecl NTDLL__CIpow(double x,double y)
119 {
120         return pow(x,y);
121 }
122 #endif /* !defined(__i386__) */
123
124