From: Sam Hartman Date: Wed, 30 Jul 2003 17:08:34 +0000 (+0000) Subject: Initial revision X-Git-Tag: debian/1.2.10-1~10 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=0700003f10bb0e9a5c2000c8f1f5ccaf440a291d;p=packages%2Fo%2Fopenafs.git Initial revision --- diff --git a/src/WINNT/afsd/largeintdotnet.c b/src/WINNT/afsd/largeintdotnet.c new file mode 100644 index 000000000..231182395 --- /dev/null +++ b/src/WINNT/afsd/largeintdotnet.c @@ -0,0 +1,90 @@ +/* + * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved + * + * (C) COPYRIGHT IBM CORPORATION 1987, 1988 + * LICENSED MATERIALS - PROPERTY OF IBM + * + */ + +/* Copyright (C) 1994 Cazamar Systems, Inc. */ + +#include +#include + +#include +#include +#include +#include +#include + +#if (_MSC_VER >= 1300) +LARGE_INTEGER LargeIntegerAdd(LARGE_INTEGER a, LARGE_INTEGER b) +{ + LARGE_INTEGER result; + int carry; + result.LowPart=a.LowPart+b.LowPart; + carry=(result.LowPart < b.LowPart) ? 1 : 0; + result.HighPart=a.HighPart+b.HighPart+ carry; + return result; +} +LARGE_INTEGER LargeIntegerSubtract(LARGE_INTEGER a, LARGE_INTEGER b) +{ + LARGE_INTEGER result; + int borrow; + result.LowPart=a.LowPart-b.LowPart; + borrow=(result.LowPart > a.LowPart) ? 1 : 0; + result.HighPart=a.HighPart-b.HighPart- borrow; + return result; +} +LARGE_INTEGER ExtendedLargeIntegerDivide(LARGE_INTEGER a, unsigned long b, unsigned long *remainder) +{ + LARGE_INTEGER result; + ULONGLONG a1,q1,r1; + + result.HighPart=0; + result.LowPart=0; + if (b == 0) { return result; } + if (b == 1) { *remainder = 0; return a; } + + a1=(a.HighPart << 32) | a.LowPart; + q1=a1/b; + r1=a1-(q1*b); + if (r1 > ULONG_MAX) /*XXX */; + result.HighPart=q1 >> 32; + result.LowPart=q1 & 0xffffffff; + *remainder=r1 & 0xffffffff; + return result; +} +LARGE_INTEGER LargeIntegerDivide(LARGE_INTEGER a, LARGE_INTEGER b, LARGE_INTEGER *remainder) +{ + LARGE_INTEGER result; + ULONGLONG a1,b1,q1,r1; + + result.HighPart=0; + result.LowPart=0; + if (b.HighPart == 0 && b.LowPart == 0) { return result; } + if (b.HighPart == 0 && b.LowPart == 1) { + remainder->HighPart = 0; + remainder->LowPart = 0; + return a; + } + + a1=(a.HighPart << 32) | a.LowPart; + b1=(b.HighPart << 32) | a.LowPart; + q1=a1/b1; + r1=a1-(q1*b1); + result.HighPart=q1 >> 32; + result.LowPart=q1 & 0xffffffff; + remainder->HighPart=r1 >> 32; + remainder->LowPart=r1 & 0xffffffff; + return result; +} + +LARGE_INTEGER ConvertLongToLargeInteger(unsigned long a) +{ + LARGE_INTEGER result; + result.HighPart=0; + result.LowPart=a; + return result; +} +#endif