Blame UUID.h

Packit fc16e3
#if !defined __UUID_H__
Packit fc16e3
#    define  __UUID_H__
Packit fc16e3
Packit fc16e3
#include <string.h>
Packit fc16e3
#include <stdio.h>
Packit fc16e3
#include <stdlib.h>
Packit fc16e3
#ifndef _MSC_VER
Packit fc16e3
/* No unistd.h in MS VC */
Packit fc16e3
#include <unistd.h>
Packit fc16e3
#endif
Packit fc16e3
#include <time.h>
Packit fc16e3
Packit fc16e3
#if !defined INT2PTR
Packit fc16e3
#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
Packit fc16e3
#  define PTRV			UV
Packit fc16e3
#  define INT2PTR(any,d)	(any)(d)
Packit fc16e3
#else
Packit fc16e3
#  if PTRSIZE == LONGSIZE 
Packit fc16e3
#    define PTRV		unsigned long
Packit fc16e3
#  else
Packit fc16e3
#    define PTRV		unsigned
Packit fc16e3
#  endif
Packit fc16e3
#  define INT2PTR(any,d)	(any)(PTRV)(d)
Packit fc16e3
#endif
Packit fc16e3
#define NUM2PTR(any,d)	(any)(PTRV)(d)
Packit fc16e3
#define PTR2IV(p)	INT2PTR(IV,p)
Packit fc16e3
#define PTR2UV(p)	INT2PTR(UV,p)
Packit fc16e3
#define PTR2NV(p)	NUM2PTR(NV,p)
Packit fc16e3
#if PTRSIZE == LONGSIZE 
Packit fc16e3
#  define PTR2ul(p)	(unsigned long)(p)
Packit fc16e3
#else
Packit fc16e3
#  define PTR2ul(p)	INT2PTR(unsigned long,p)	
Packit fc16e3
#endif
Packit fc16e3
#endif
Packit fc16e3
Packit fc16e3
#if defined __cygwin__ || defined __mingw32__ || defined _MSC_VER
Packit fc16e3
#include <windows.h>
Packit fc16e3
#endif
Packit fc16e3
#if defined __darwin__
Packit fc16e3
#include <sys/file.h>
Packit fc16e3
#endif
Packit fc16e3
Packit fc16e3
#ifdef _MSC_VER
Packit fc16e3
#include <process.h>
Packit fc16e3
#endif
Packit fc16e3
Packit fc16e3
#if !defined _STDIR
Packit fc16e3
#    define  _STDIR			"/var/tmp"
Packit fc16e3
#endif
Packit fc16e3
#if !defined _DEFAULT_UMASK
Packit fc16e3
#    define  _DEFAULT_UMASK		0007
Packit fc16e3
#endif
Packit fc16e3
Packit fc16e3
#define UUID_STATE			".UUID_STATE"
Packit fc16e3
#define UUID_NODEID			".UUID_NODEID"
Packit fc16e3
#if defined __mingw32__ || (defined _WIN32 && !defined(__cygwin__)) || defined _MSC_VER
Packit fc16e3
#define UUID_STATE_NV_STORE		_STDIR"\\"UUID_STATE
Packit fc16e3
#define UUID_NODEID_NV_STORE		_STDIR"\\"UUID_NODEID
Packit fc16e3
#else
Packit fc16e3
#define UUID_STATE_NV_STORE		_STDIR"/"UUID_STATE
Packit fc16e3
#define UUID_NODEID_NV_STORE		_STDIR"/"UUID_NODEID
Packit fc16e3
#endif
Packit fc16e3
Packit fc16e3
#define UUIDS_PER_TICK 1024
Packit fc16e3
#ifdef _MSC_VER
Packit fc16e3
#define I64(C) C##i64
Packit fc16e3
#else
Packit fc16e3
#define I64(C) C##LL
Packit fc16e3
#endif
Packit fc16e3
Packit fc16e3
#define F_BIN 0
Packit fc16e3
#define F_STR 1
Packit fc16e3
#define F_HEX 2
Packit fc16e3
#define F_B64 3
Packit fc16e3
Packit fc16e3
#define CHECK(f1, f2) if (f1 != f2) RETVAL = f1 < f2 ? -1 : 1;
Packit fc16e3
Packit fc16e3
typedef unsigned int       unsigned32;
Packit fc16e3
typedef unsigned short     unsigned16;
Packit fc16e3
typedef unsigned char      unsigned8;
Packit fc16e3
typedef unsigned char      byte;
Packit fc16e3
#ifndef _MSC_VER
Packit fc16e3
typedef unsigned long long unsigned64_t;
Packit fc16e3
# else
Packit fc16e3
typedef __int64 int64_t;
Packit fc16e3
typedef unsigned __int64 uint64_t;
Packit fc16e3
typedef __int32 int32_t;
Packit fc16e3
typedef unsigned __int32 uint32_t;
Packit fc16e3
typedef __int16 int16_t;
Packit fc16e3
typedef unsigned __int16 uint16_t;
Packit fc16e3
typedef __int8 int8_t;
Packit fc16e3
typedef unsigned __int8 uint8_t;
Packit fc16e3
Packit fc16e3
typedef unsigned __int64 unsigned64_t;
Packit fc16e3
// http://msdn2.microsoft.com/en-us/library/296az74e.aspx - Integer Limits
Packit fc16e3
Packit fc16e3
typedef int pid_t;
Packit fc16e3
#endif /* _MSC_VER */
Packit fc16e3
typedef unsigned64_t       perl_uuid_time_t;
Packit fc16e3
Packit fc16e3
/* Android's lic provides neither lockf nor any of the related constants */
Packit fc16e3
#if   (defined __solaris__ || defined __linux__) && !defined(__android__)
Packit fc16e3
#     define LOCK(f)		lockf(fileno(f),F_LOCK,0);
Packit fc16e3
#     define UNLOCK(f)		lockf(fileno(f),F_ULOCK,0);
Packit fc16e3
#elif defined __darwin__
Packit fc16e3
#     define LOCK(f)		flock(fileno(f),LOCK_EX);
Packit fc16e3
#     define UNLOCK(f)		flock(fileno(f),LOCK_UN);
Packit fc16e3
#else
Packit fc16e3
#     define LOCK(f)
Packit fc16e3
#     define UNLOCK(f)
Packit fc16e3
#endif
Packit fc16e3
Packit fc16e3
#undef perl_uuid_t
Packit fc16e3
Packit fc16e3
typedef struct _uuid_node_t {
Packit fc16e3
   char nodeID[6];
Packit fc16e3
} uuid_node_t;
Packit fc16e3
Packit fc16e3
typedef struct _perl_uuid_t {
Packit fc16e3
   unsigned32          time_low;
Packit fc16e3
   unsigned16          time_mid;
Packit fc16e3
   unsigned16          time_hi_and_version;
Packit fc16e3
   unsigned8           clock_seq_hi_and_reserved;
Packit fc16e3
   unsigned8           clock_seq_low;
Packit fc16e3
   byte                node[6];
Packit fc16e3
} perl_uuid_t;
Packit fc16e3
Packit fc16e3
typedef struct _uuid_state_t { 
Packit fc16e3
   perl_uuid_time_t ts;
Packit fc16e3
   uuid_node_t node;
Packit fc16e3
   unsigned16  cs;  
Packit fc16e3
} uuid_state_t;
Packit fc16e3
Packit fc16e3
typedef struct _uuid_context_t {
Packit fc16e3
   uuid_state_t state;
Packit fc16e3
   uuid_node_t  nodeid;
Packit fc16e3
   perl_uuid_time_t  next_save;
Packit fc16e3
} uuid_context_t;
Packit fc16e3
Packit fc16e3
static void format_uuid_v1(
Packit fc16e3
   perl_uuid_t      *uuid, 
Packit fc16e3
   unsigned16   clockseq,
Packit fc16e3
   perl_uuid_time_t  timestamp, 
Packit fc16e3
   uuid_node_t  node
Packit fc16e3
);
Packit fc16e3
static void format_uuid_v3(
Packit fc16e3
   perl_uuid_t      *uuid, 
Packit fc16e3
   unsigned     char hash[16]
Packit fc16e3
);
Packit fc16e3
static void       get_current_time(perl_uuid_time_t * timestamp);
Packit fc16e3
static unsigned16 true_random(void);
Packit fc16e3
static void       get_system_time(perl_uuid_time_t *perl_uuid_time);
Packit fc16e3
static void       get_random_info(unsigned char seed[16]);
Packit fc16e3
static SV*        make_ret(const perl_uuid_t u, int type);
Packit fc16e3
static SV*        MD5Init(void);
Packit fc16e3
static void       MD5Update(SV* ctx, SV* data);
Packit fc16e3
static void       MD5Final(unsigned char hash[16], SV* ctx);
Packit fc16e3
Packit fc16e3
static const char base64[] =
Packit fc16e3
   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
Packit fc16e3
Packit fc16e3
static unsigned char index64[256] = {
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,62, 255,255,255,63,
Packit fc16e3
   52,53,54,55, 56,57,58,59, 60,61,255,255, 255,254,255,255,
Packit fc16e3
   255, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,
Packit fc16e3
   15,16,17,18, 19,20,21,22, 23,24,25,255, 255,255,255,255,
Packit fc16e3
   255,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
Packit fc16e3
   41,42,43,44, 45,46,47,48, 49,50,51,255, 255,255,255,255,
Packit fc16e3
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
   255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
Packit fc16e3
};
Packit fc16e3
#endif