]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Initial revision
authorSam Hartman <hartmans@debian.org>
Wed, 30 Jul 2003 17:08:34 +0000 (17:08 +0000)
committerSam Hartman <hartmans@debian.org>
Wed, 30 Jul 2003 17:08:34 +0000 (17:08 +0000)
src/WINNT/afsd/largeintdotnet.c [new file with mode: 0644]

diff --git a/src/WINNT/afsd/largeintdotnet.c b/src/WINNT/afsd/largeintdotnet.c
new file mode 100644 (file)
index 0000000..2311823
--- /dev/null
@@ -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 <afs/param.h>
+#include <afs/stds.h>
+
+#include <windows.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <limits.h>
+
+#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