]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE12-closer-to-vc7-support-20030528
authorChaskiel M Grundman <cg2v@andrew.cmu.edu>
Wed, 28 May 2003 19:36:05 +0000 (19:36 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 28 May 2003 19:36:05 +0000 (19:36 +0000)
FIXES 1334

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

(cherry picked from commit 5ecdab3b75c02784ae6d87e93a92d1a3f705c83d)

src/WINNT/afsd/NTMakefile
src/WINNT/afsd/afsd_service.c
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 da8bc97c1df240185a1a7bb0d32fdac682e453a3..edf83cd841b9017aa29d599a25d7c6bee2d2a9ed 100644 (file)
@@ -62,6 +62,7 @@ AFSDOBJS=\
        cm_vnodeops.obj \
        cm_dir.obj \
        cm_utils.obj \
+       largeintdotnet.obj \
        smb.obj \
        smb3.obj \
        smb_ioctl.obj \
index 65885186152ec8bd3e28bd6d4df14dc41b713d8d..ed4cedeeb2f06c5fe28491d4191ffa52bb2f0314 100644 (file)
@@ -283,7 +283,7 @@ void main()
 #else
 
 #ifdef _CRTAPI1
-void _CRTAPI1 main()
+void _CRTAPI1 main(void)
 #else
 void  main()
 #endif
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 43b9aca345e1fcbf6a6c8cbb49a152d674ed9cd5..58922d9a078cad57a515d21f88c3d64b2a292d28 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 52435ca7b132020b618842a2cc3b3dc1feeb3450..e881afb9c9c8f1c8eb8500de3516ae243456ea29 100644 (file)
@@ -12,7 +12,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 1f051fd08ea2c7711a2be0eaf6069d95f3533d34..848fe61f48e41d8bfdf1afd9ff56e093940e8b86 100644 (file)
@@ -15,6 +15,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <assert.h>
+#include <limits.h>
 
 #include <rpc.h>
 #include "osiutils.h"
@@ -72,3 +73,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