2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 /* Copyright (C) 1994 Cazamar Systems, Inc. */
12 #include <afs/param.h>
24 void osi_LongToUID(long inval
, UUID
*outuidp
)
26 /* generic UUID whose seconds field we'll never use again */
27 UUID genericCazamarUUID
= { /* 7C45E3F8-5F73-101B-89A3-204C4F4F5020 */
31 {0x89, 0xa3, 0x20, 0x4C, 0x4F, 0x4F, 0x50, 0x20}
34 genericCazamarUUID
.Data1
= inval
;
35 memcpy(outuidp
, &genericCazamarUUID
, sizeof(UUID
));
38 /* compare two UIDs in the dictionary ordering */
39 int osi_UIDCmp(UUID
*uid1p
, UUID
*uid2p
)
47 if (uid1p
->Data1
< uid2p
->Data1
) return -1;
48 else if (uid1p
->Data1
> uid2p
->Data1
) return 1;
50 if (uid1p
->Data2
< uid2p
->Data2
) return -1;
51 else if (uid1p
->Data2
> uid2p
->Data2
) return 1;
53 if (uid1p
->Data3
< uid2p
->Data3
) return -1;
54 else if (uid1p
->Data3
> uid2p
->Data3
) return 1;
62 if (v1
< v2
) return -1;
63 else if (v1
> v2
) return 1;
68 void * __RPC_API
MIDL_user_allocate(size_t size
)
70 return (void *) malloc(size
);
73 void __RPC_API
MIDL_user_free(void *p
)
78 #if (_MSC_VER >= 1300)
79 LARGE_INTEGER
/* WINAPI */ LargeIntegerAdd(LARGE_INTEGER a
, LARGE_INTEGER b
)
83 result
.LowPart
=a
.LowPart
+b
.LowPart
;
84 carry
=(result
.LowPart
< b
.LowPart
) ? 1 : 0;
85 result
.HighPart
=a
.HighPart
+b
.HighPart
+ carry
;
88 LARGE_INTEGER
/* WINAPI */ LargeIntegerSubtract(LARGE_INTEGER a
, LARGE_INTEGER b
)
92 result
.LowPart
=a
.LowPart
-b
.LowPart
;
93 borrow
=(result
.LowPart
> a
.LowPart
) ? 1 : 0;
94 result
.HighPart
=a
.HighPart
-b
.HighPart
- borrow
;
97 LARGE_INTEGER
/* WINAPI */ ExtendedLargeIntegerDivide(LARGE_INTEGER a
, unsigned long b
, unsigned long *remainder
)
104 if (b
== 0) { return result
; }
105 if (b
== 1) { *remainder
= 0; return a
; }
112 if (r1
> ULONG_MAX
) /*XXX */;
113 result
.HighPart
=(LONG
)(q1
>> 32);
114 result
.LowPart
=(DWORD
)(q1
& 0xffffffff);
115 *remainder
=(unsigned long)(r1
& 0xffffffff);
118 LARGE_INTEGER
/* WINAPI */ LargeIntegerDivide(LARGE_INTEGER a
, LARGE_INTEGER b
, LARGE_INTEGER
*remainder
)
120 LARGE_INTEGER result
;
121 ULONGLONG a1
,b1
,q1
,r1
;
125 if (b
.HighPart
== 0 && b
.LowPart
== 0) { return result
; }
126 if (b
.HighPart
== 0 && b
.LowPart
== 1) {
127 remainder
->HighPart
= 0;
128 remainder
->LowPart
= 0;
140 result
.HighPart
=(LONG
)(q1
>> 32);
141 result
.LowPart
=(DWORD
)(q1
& 0xffffffff);
142 remainder
->HighPart
=(LONG
)(r1
>> 32);
143 remainder
->LowPart
=(DWORD
)(r1
& 0xffffffff);
147 LARGE_INTEGER
/* WINAPI */ ConvertLongToLargeInteger(unsigned long a
)
149 LARGE_INTEGER result
;