X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=interfaces%2Fclsql-uffi%2Fclsql-uffi.c;fp=interfaces%2Fclsql-uffi%2Fclsql-uffi.c;h=fc404cc38375e7f81a485c41dcea1a2d1d862eb5;hb=f1930020ce73039b8627af801722c28afff5d31d;hp=0000000000000000000000000000000000000000;hpb=35a6150bba27d78ccc452aa1c0fc0701def46be2;p=clsql.git diff --git a/interfaces/clsql-uffi/clsql-uffi.c b/interfaces/clsql-uffi/clsql-uffi.c new file mode 100644 index 0000000..fc404cc --- /dev/null +++ b/interfaces/clsql-uffi/clsql-uffi.c @@ -0,0 +1,71 @@ +/**************************************************************************** + * FILE IDENTIFICATION + * + * Name: clsql-uffi.c + * Purpose: Helper functions for common interfaces using UFFI + * Programmer: Kevin M. Rosenberg + * Date Started: Mar 2002 + * + * $Id: clsql-uffi.c,v 1.1 2002/03/27 08:09:25 kevin Exp $ + * + * This file, part of CLSQL, is Copyright (c) 2002 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. + ***************************************************************************/ + +#ifdef WIN32 +#include + +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, int* pHigh32) +{ + long long result = 0; + 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); +} + + + + +