summaryrefslogtreecommitdiff
path: root/uffi/clsql_uffi.c
diff options
context:
space:
mode:
Diffstat (limited to 'uffi/clsql_uffi.c')
-rw-r--r--uffi/clsql_uffi.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/uffi/clsql_uffi.c b/uffi/clsql_uffi.c
new file mode 100644
index 0000000..95822b7
--- /dev/null
+++ b/uffi/clsql_uffi.c
@@ -0,0 +1,73 @@
+/****************************************************************************
+ * FILE IDENTIFICATION
+ *
+ * Name: clsql-uffi.c
+ * Purpose: Helper functions for common interfaces using UFFI
+ * Programmer: Kevin M. Rosenberg
+ * Date Started: Mar 2002
+ *
+ * This file, part of CLSQL, is Copyright (c) 2002-2010 by Kevin M. Rosenberg
+ *
+ * CLSQL users are granted the rights to distribute and use this software
+ * as governed by the terms of the Lisp Lesser GNU Public License
+ * (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+ ***************************************************************************/
+
+#if defined(WIN32)||defined(WIN64)
+#include <windows.h>
+
+BOOL WINAPI DllEntryPoint(HINSTANCE hinstdll, DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ return 1;
+}
+
+#define DLLEXPORT __declspec(dllexport)
+
+#else
+#define DLLEXPORT
+#endif
+
+
+const unsigned int bitmask_32bits = 0xFFFFFFFF;
+#define lower_32bits(int64) ((unsigned int) int64 & bitmask_32bits)
+#define upper_32bits(int64) ((unsigned int) (int64 >> 32))
+
+/* Reads a 64-bit integer string, returns result as two 32-bit integers */
+
+DLLEXPORT
+unsigned int
+atol64 (const unsigned char* str, unsigned int* pHigh32)
+{
+#if defined(WIN32)||defined(WIN64)
+ __int64 result = 0;
+#else
+ long long result = 0;
+#endif
+ int minus = 0;
+ int first_char = *str;
+ if (first_char == '+')
+ ++str;
+ else if (first_char == '-') {
+ minus = 1;
+ ++str;
+ }
+
+ while (*str) {
+ int i = *str - '0';
+ if (i < 0 || i > 9) /* Non-numeric character -- quit */
+ break;
+ result = i + (10 * result);
+ str++;
+ }
+ if (minus)
+ result = -result;
+
+ *pHigh32 = upper_32bits(result);
+ return lower_32bits(result);
+}
+
+
+
+
+