closer-to-vc7-support-20030528
authorChaskiel M Grundman <cg2v@andrew.cmu.edu>
Wed, 28 May 2003 19:34:38 +0000 (19:34 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 28 May 2003 19:34:38 +0000 (19:34 +0000)
FIXES 1334

VC7 dropped support for the LARGE_INTEGER functions (linking against
largeint.lib doesn't seem to have any effect)

src/WINNT/afsd/NTMakefile
src/WINNT/afsd/largeintdotnet.c [new file with mode: 0644]
src/WINNT/client_osi/osi.h
src/WINNT/client_osi/osistatl.h
src/WINNT/client_osi/osiutils.c

index 01a89c0..dd71d18 100644 (file)
@@ -77,6 +77,7 @@ AFSDOBJS=\
        $(OJT)\cm_vnodeops.obj \
        $(OJT)\cm_dir.obj \
        $(OJT)\cm_utils.obj \
+       $(OJT)\largeintdotnet.obj \
        $(OJT)\smb.obj \
        $(OJT)\smb3.obj \
        $(OJT)\smb_ioctl.obj \
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
index 7bddd9b..f4628e5 100644 (file)
 /* large int */
 #ifndef DJGPP
 #include <rpc.h>
+#if !defined(_MSC_VER) || (_MSC_VER < 1300)
 #include <largeint.h>
+#endif
 #include "osithrdnt.h"
 #else /* DJGPP */
 #include "largeint95.h"
 #endif /* !DJGPP */
 
 typedef LARGE_INTEGER osi_hyper_t;
+#if _MSC_VER >= 1300
+LARGE_INTEGER LargeIntegerAdd(LARGE_INTEGER a, LARGE_INTEGER b);
+LARGE_INTEGER LargeIntegerSubtract(LARGE_INTEGER a, LARGE_INTEGER b);
+LARGE_INTEGER ExtendedLargeIntegerDivide(LARGE_INTEGER a, unsigned long b, unsigned long *remainder);
+LARGE_INTEGER LargeIntegerDivide(LARGE_INTEGER a, LARGE_INTEGER b, LARGE_INTEGER *remainder);
+LARGE_INTEGER ConvertLongToLargeInteger(unsigned long a); 
+#define LargeIntegerGreaterThan(a, b) \
+ ((a).HighPart > (b).HighPart || \
+  ((a).HighPart == (b).HighPart && (a).LowPart > (b).LowPart))
+
+#define LargeIntegerGreaterThanOrEqualTo(a, b) \
+ ((a).HighPart > (b).HighPart || \
+  ((a).HighPart == (b).HighPart && (a).LowPart >= (b).LowPart))
+  
+#define LargeIntegerLessThan(a, b) \
+ ((a).HighPart < (b).HighPart || \
+  ((a).HighPart == (b).HighPart && (a).LowPart < (b).LowPart))
+
+#define LargeIntegerLessThanOrEqualTo(a, b) \
+ ((a).HighPart < (b).HighPart || \
+  ((a).HighPart == (b).HighPart && (a).LowPart <= (b).LowPart))
+
+#define LargeIntegerEqualTo(a, b) \
+  ((a).HighPart == (b).HighPart && (a).LowPart == (b).LowPart)
+  
+#define LargeIntegerGreaterOrEqualToZero(a) ((a).HighPart >= 0)
+  
+#define LargeIntegerLessThanZero(a) ((a).HighPart < 0)
+
+#define LargeIntegerNotEqualToZero(a) ((a).HighPart || (a).LowPart)
+#endif
 #ifndef DJGPP
 typedef GUID osi_uid_t;
 #else /* DJGPP */
index 3279d0e..ff10027 100644 (file)
@@ -13,7 +13,9 @@
 #define _OSISTATL_H_ENV_ 1
 
 #include "osibasel.h"
+#if !defined(_MSC_VER) || (_MSC_VER < 1300)
 #include <largeint.h>
+#endif
 #include "osiqueue.h"
 
 /* structure representing all information about someone holding a lock
index aab7871..c37b748 100644 (file)
@@ -16,6 +16,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <assert.h>
+#include <limits.h>
 
 #include <rpc.h>
 #include "osiutils.h"
@@ -73,3 +74,75 @@ void __RPC_API MIDL_user_free(void *p)
 {
   free(p);
 }
+
+#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