]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_cryptkit/ckutils/ckutilsPlatform.h
Security-57336.1.9.tar.gz
[apple/security.git] / OSX / libsecurity_cryptkit / ckutils / ckutilsPlatform.h
diff --git a/OSX/libsecurity_cryptkit/ckutils/ckutilsPlatform.h b/OSX/libsecurity_cryptkit/ckutils/ckutilsPlatform.h
new file mode 100644 (file)
index 0000000..66ee7bc
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * Platform-dependent stuff for ckutils
+ */
+
+#ifndef        _CKU_PLATFORM_H_
+#define _CKU_PLATFORM_H_
+
+#include <string.h>
+#include <stdlib.h>
+
+/* use this for linux compatibility testing */
+//#define linux 1
+/* end linux test */
+
+/*
+ * Make sure endianness is defined...
+ */
+#if    !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
+    #if        macintosh
+       #define __BIG_ENDIAN__          1
+    #elif defined(i386) || defined(i486) || defined(__i386__) || defined(__i486__)
+       #define __LITTLE_ENDIAN__       1
+    #else
+       #error Platform dependent work needed
+    #endif
+#endif /* endian */
+
+#ifdef NeXT
+    #import <libc.h>
+    #define SRAND(x)           srandom(x)
+    #define RAND()             random()
+#else  NeXT
+    /*
+     * Use stdlib only
+     */
+    #define SRAND(x)           srand(x)
+    #define RAND()             rand()
+    #define bcopy(s, d, l)     memmove(d, s, l)
+    #define bzero(s, l)                memset(s, 0, l)
+    #define bcmp(s, d, l)      memcmp(s, d, l)
+#endif
+       
+#ifdef CK_NT_C_ONLY
+
+/*
+ * Standard I/O redirects for WINNT.
+ */
+#define open(f, b, c)  _open(f, b, c)
+#define close(f)       _close(f)
+#define read(f, b, c)  _read(f, b, c)
+#define write(f, b, c) _write(f, b, c)
+#define        fstat(f, b)     _fstat(f, b)
+
+#define        O_RDONLY        _O_RDONLY
+#define        O_WRONLY        _O_WRONLY
+#define        O_CREAT         _O_CREAT
+#define O_TRUNC                _O_TRUNC
+
+#endif CK_NT_C_ONLY
+
+/*
+ * Platform-dependent timestamp stuff. For now we assume that each platform
+ * has some kind of struct which maintains a high-resolution clock and
+ * a function which fills that struct with the current time.
+ */
+#if            macintosh
+       
+       #include <Timer.h>
+       
+       #define PLAT_TIME               UnsignedWide
+       #define PLAT_GET_TIME(pt)       Microseconds(&pt)
+       #define PLAT_GET_US(start,end)  (end.lo - start.lo)
+
+#elif  linux
+
+       #include <sys/time.h>
+       
+       #define PLAT_TIME               struct timeval
+       #define PLAT_GET_TIME(pt)       gettimeofday(&pt, NULL)
+       #define PLAT_GET_US(start,end)                                          \
+               ( ( ( (end.tv_sec   & 0xff) * 1000000) + end.tv_usec) -         \
+                 ( ( (start.tv_sec & 0xff) * 1000000) + start.tv_usec) )
+
+#elif  NeXT
+
+       #include <kern/time_stamp.h>
+
+       #define PLAT_TIME               struct tsval
+       #define PLAT_GET_TIME(pt)       kern_timestamp(&pt)
+       #define PLAT_GET_US(start,end)  (end.low_val - start.low_val)
+       
+       
+#elif defined(__MACH__) && defined(__APPLE__)
+       #include <CoreFoundation/CoreFoundation.h>
+       /* time as a double */
+       #define PLAT_TIME                               CFAbsoluteTime
+       #define PLAT_GET_TIME(pt)               pt = CFAbsoluteTimeGetCurrent()
+       #define PLAT_GET_US(start,end)  \
+               ((end - start) * 1000000.0)
+       #define PLAT_GET_NS(start,end)  \
+               ((end - start) * 1000000000.0)
+#else
+    #error Platform dependent work needed
+#endif
+
+#endif         /* _CKU_PLATFORM_H_ */