mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 00:09:26 +02:00
* new unit uuid that follows RFC 4122
* defined version enumeration for md5 git-svn-id: trunk@5613 -
This commit is contained in:
parent
1b7f4b1e90
commit
c6fa0f9d8d
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1403,6 +1403,7 @@ packages/base/hash/md5.ref -text
|
|||||||
packages/base/hash/md5test.pp svneol=native#text/plain
|
packages/base/hash/md5test.pp svneol=native#text/plain
|
||||||
packages/base/hash/ntlm.pas svneol=native#text/plain
|
packages/base/hash/ntlm.pas svneol=native#text/plain
|
||||||
packages/base/hash/unixcrypt.pas -text
|
packages/base/hash/unixcrypt.pas -text
|
||||||
|
packages/base/hash/uuid.pas svneol=native#text/plain
|
||||||
packages/base/httpd/Makefile svneol=native#text/plain
|
packages/base/httpd/Makefile svneol=native#text/plain
|
||||||
packages/base/httpd/Makefile.fpc svneol=native#text/plain
|
packages/base/httpd/Makefile.fpc svneol=native#text/plain
|
||||||
packages/base/httpd/examples/Makefile svneol=native#text/plain
|
packages/base/httpd/examples/Makefile svneol=native#text/plain
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#
|
#
|
||||||
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/11/20]
|
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/12/16]
|
||||||
#
|
#
|
||||||
default: all
|
default: all
|
||||||
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd x86_64-win64 arm-linux arm-palmos arm-wince arm-gba powerpc64-linux
|
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded powerpc64-linux powerpc64-embedded
|
||||||
BSDs = freebsd netbsd openbsd darwin
|
BSDs = freebsd netbsd openbsd darwin
|
||||||
UNIXs = linux $(BSDs) solaris qnx
|
UNIXs = linux $(BSDs) solaris qnx
|
||||||
LIMIT83fs = go32v2 os2 emx watcom
|
LIMIT83fs = go32v2 os2 emx watcom
|
||||||
@ -233,127 +233,151 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/ext
|
|||||||
override PACKAGE_NAME=hash
|
override PACKAGE_NAME=hash
|
||||||
override PACKAGE_VERSION=2.0.0
|
override PACKAGE_VERSION=2.0.0
|
||||||
ifeq ($(FULL_TARGET),i386-linux)
|
ifeq ($(FULL_TARGET),i386-linux)
|
||||||
override TARGET_UNITS+=md5 crc ntlm unixcrypt
|
override TARGET_UNITS+=md5 crc ntlm uuid unixcrypt
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-go32v2)
|
ifeq ($(FULL_TARGET),i386-go32v2)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-win32)
|
ifeq ($(FULL_TARGET),i386-win32)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-os2)
|
ifeq ($(FULL_TARGET),i386-os2)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-freebsd)
|
ifeq ($(FULL_TARGET),i386-freebsd)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-beos)
|
ifeq ($(FULL_TARGET),i386-beos)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-netbsd)
|
ifeq ($(FULL_TARGET),i386-netbsd)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-solaris)
|
ifeq ($(FULL_TARGET),i386-solaris)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-qnx)
|
ifeq ($(FULL_TARGET),i386-qnx)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-netware)
|
ifeq ($(FULL_TARGET),i386-netware)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-openbsd)
|
ifeq ($(FULL_TARGET),i386-openbsd)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-wdosx)
|
ifeq ($(FULL_TARGET),i386-wdosx)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-darwin)
|
ifeq ($(FULL_TARGET),i386-darwin)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-emx)
|
ifeq ($(FULL_TARGET),i386-emx)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-watcom)
|
ifeq ($(FULL_TARGET),i386-watcom)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-netwlibc)
|
ifeq ($(FULL_TARGET),i386-netwlibc)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-wince)
|
ifeq ($(FULL_TARGET),i386-wince)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),i386-embedded)
|
||||||
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-linux)
|
ifeq ($(FULL_TARGET),m68k-linux)
|
||||||
override TARGET_UNITS+=md5 crc ntlm unixcrypt
|
override TARGET_UNITS+=md5 crc ntlm uuid unixcrypt
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-freebsd)
|
ifeq ($(FULL_TARGET),m68k-freebsd)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-netbsd)
|
ifeq ($(FULL_TARGET),m68k-netbsd)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-amiga)
|
ifeq ($(FULL_TARGET),m68k-amiga)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-atari)
|
ifeq ($(FULL_TARGET),m68k-atari)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-openbsd)
|
ifeq ($(FULL_TARGET),m68k-openbsd)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
ifeq ($(FULL_TARGET),m68k-palmos)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||||
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
ifeq ($(FULL_TARGET),powerpc-linux)
|
||||||
override TARGET_UNITS+=md5 crc ntlm unixcrypt
|
override TARGET_UNITS+=md5 crc ntlm uuid unixcrypt
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-amiga)
|
ifeq ($(FULL_TARGET),powerpc-amiga)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-macos)
|
ifeq ($(FULL_TARGET),powerpc-macos)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-darwin)
|
ifeq ($(FULL_TARGET),powerpc-darwin)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
ifeq ($(FULL_TARGET),powerpc-morphos)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||||
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-linux)
|
ifeq ($(FULL_TARGET),sparc-linux)
|
||||||
override TARGET_UNITS+=md5 crc ntlm unixcrypt
|
override TARGET_UNITS+=md5 crc ntlm uuid unixcrypt
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-netbsd)
|
ifeq ($(FULL_TARGET),sparc-netbsd)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
ifeq ($(FULL_TARGET),sparc-solaris)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||||
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
ifeq ($(FULL_TARGET),x86_64-linux)
|
||||||
override TARGET_UNITS+=md5 crc ntlm unixcrypt
|
override TARGET_UNITS+=md5 crc ntlm uuid unixcrypt
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
ifeq ($(FULL_TARGET),x86_64-win64)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||||
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-linux)
|
ifeq ($(FULL_TARGET),arm-linux)
|
||||||
override TARGET_UNITS+=md5 crc ntlm unixcrypt
|
override TARGET_UNITS+=md5 crc ntlm uuid unixcrypt
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-palmos)
|
ifeq ($(FULL_TARGET),arm-palmos)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-wince)
|
ifeq ($(FULL_TARGET),arm-wince)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-gba)
|
ifeq ($(FULL_TARGET),arm-gba)
|
||||||
override TARGET_UNITS+=md5 crc ntlm
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),arm-nds)
|
||||||
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),arm-embedded)
|
||||||
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
ifeq ($(FULL_TARGET),powerpc64-linux)
|
||||||
override TARGET_UNITS+=md5 crc ntlm unixcrypt
|
override TARGET_UNITS+=md5 crc ntlm uuid unixcrypt
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||||
|
override TARGET_UNITS+=md5 crc ntlm uuid
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-linux)
|
ifeq ($(FULL_TARGET),i386-linux)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
@ -406,6 +430,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),i386-wince)
|
ifeq ($(FULL_TARGET),i386-wince)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),i386-embedded)
|
||||||
|
override TARGET_EXAMPLES+=md5test
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-linux)
|
ifeq ($(FULL_TARGET),m68k-linux)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
@ -427,6 +454,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
ifeq ($(FULL_TARGET),m68k-palmos)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||||
|
override TARGET_EXAMPLES+=md5test
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
ifeq ($(FULL_TARGET),powerpc-linux)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
@ -445,6 +475,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
ifeq ($(FULL_TARGET),powerpc-morphos)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||||
|
override TARGET_EXAMPLES+=md5test
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-linux)
|
ifeq ($(FULL_TARGET),sparc-linux)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
@ -454,6 +487,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
ifeq ($(FULL_TARGET),sparc-solaris)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||||
|
override TARGET_EXAMPLES+=md5test
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
ifeq ($(FULL_TARGET),x86_64-linux)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
@ -463,6 +499,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
ifeq ($(FULL_TARGET),x86_64-win64)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||||
|
override TARGET_EXAMPLES+=md5test
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-linux)
|
ifeq ($(FULL_TARGET),arm-linux)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
@ -475,9 +514,18 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),arm-gba)
|
ifeq ($(FULL_TARGET),arm-gba)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),arm-nds)
|
||||||
|
override TARGET_EXAMPLES+=md5test
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),arm-embedded)
|
||||||
|
override TARGET_EXAMPLES+=md5test
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
ifeq ($(FULL_TARGET),powerpc64-linux)
|
||||||
override TARGET_EXAMPLES+=md5test
|
override TARGET_EXAMPLES+=md5test
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||||
|
override TARGET_EXAMPLES+=md5test
|
||||||
|
endif
|
||||||
override INSTALL_FPCPACKAGE=y
|
override INSTALL_FPCPACKAGE=y
|
||||||
ifdef REQUIRE_UNITSDIR
|
ifdef REQUIRE_UNITSDIR
|
||||||
override UNITSDIR+=$(REQUIRE_UNITSDIR)
|
override UNITSDIR+=$(REQUIRE_UNITSDIR)
|
||||||
@ -1274,6 +1322,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),i386-wince)
|
ifeq ($(FULL_TARGET),i386-wince)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),i386-embedded)
|
||||||
|
REQUIRE_PACKAGES_RTL=1
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-linux)
|
ifeq ($(FULL_TARGET),m68k-linux)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
@ -1295,6 +1346,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
ifeq ($(FULL_TARGET),m68k-palmos)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||||
|
REQUIRE_PACKAGES_RTL=1
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
ifeq ($(FULL_TARGET),powerpc-linux)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
@ -1313,6 +1367,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
ifeq ($(FULL_TARGET),powerpc-morphos)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||||
|
REQUIRE_PACKAGES_RTL=1
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-linux)
|
ifeq ($(FULL_TARGET),sparc-linux)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
@ -1322,6 +1379,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
ifeq ($(FULL_TARGET),sparc-solaris)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||||
|
REQUIRE_PACKAGES_RTL=1
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
ifeq ($(FULL_TARGET),x86_64-linux)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
@ -1331,6 +1391,9 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
ifeq ($(FULL_TARGET),x86_64-win64)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||||
|
REQUIRE_PACKAGES_RTL=1
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-linux)
|
ifeq ($(FULL_TARGET),arm-linux)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
@ -1343,9 +1406,18 @@ endif
|
|||||||
ifeq ($(FULL_TARGET),arm-gba)
|
ifeq ($(FULL_TARGET),arm-gba)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),arm-nds)
|
||||||
|
REQUIRE_PACKAGES_RTL=1
|
||||||
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),arm-embedded)
|
||||||
|
REQUIRE_PACKAGES_RTL=1
|
||||||
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
ifeq ($(FULL_TARGET),powerpc64-linux)
|
||||||
REQUIRE_PACKAGES_RTL=1
|
REQUIRE_PACKAGES_RTL=1
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||||
|
REQUIRE_PACKAGES_RTL=1
|
||||||
|
endif
|
||||||
ifdef REQUIRE_PACKAGES_RTL
|
ifdef REQUIRE_PACKAGES_RTL
|
||||||
PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
|
PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
|
||||||
ifneq ($(PACKAGEDIR_RTL),)
|
ifneq ($(PACKAGEDIR_RTL),)
|
||||||
|
@ -7,7 +7,7 @@ name=hash
|
|||||||
version=2.0.0
|
version=2.0.0
|
||||||
|
|
||||||
[target]
|
[target]
|
||||||
units=md5 crc ntlm
|
units=md5 crc ntlm uuid
|
||||||
units_linux=unixcrypt
|
units_linux=unixcrypt
|
||||||
examples=md5test
|
examples=md5test
|
||||||
|
|
||||||
|
@ -25,15 +25,25 @@ unit md5;
|
|||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
||||||
|
(******************************************************************************
|
||||||
|
* types and constants
|
||||||
|
******************************************************************************)
|
||||||
|
|
||||||
const
|
const
|
||||||
DefBufSize = 1024;
|
MDDefBufSize = 1024;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
TMDVersion = (
|
||||||
|
MD_VERSION_4,
|
||||||
|
MD_VERSION_5
|
||||||
|
);
|
||||||
|
|
||||||
PMDDigest = ^TMDDigest;
|
PMDDigest = ^TMDDigest;
|
||||||
TMDDigest = array[0..15] of Byte;
|
TMDDigest = array[0..15] of Byte;
|
||||||
|
|
||||||
TMDContext = packed record
|
TMDContext = record
|
||||||
Version : Cardinal;
|
Version : TMDVersion;
|
||||||
State : array[0..3] of Cardinal;
|
State : array[0..3] of Cardinal;
|
||||||
Length : PtrUInt;
|
Length : PtrUInt;
|
||||||
BufCnt : PtrUInt;
|
BufCnt : PtrUInt;
|
||||||
@ -41,17 +51,24 @@ type
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ Raw methods }
|
|
||||||
|
|
||||||
procedure MDInit(var Context: TMDContext; const Version: Cardinal);
|
(******************************************************************************
|
||||||
|
* Raw functions
|
||||||
|
******************************************************************************)
|
||||||
|
|
||||||
|
procedure MDInit(var Context: TMDContext; const Version: TMDVersion);
|
||||||
procedure MDUpdate(var Context: TMDContext; var Buf; const BufLen: PtrUInt);
|
procedure MDUpdate(var Context: TMDContext; var Buf; const BufLen: PtrUInt);
|
||||||
procedure MDFinal(var Context: TMDContext; var Digest: TMDDigest);
|
procedure MDFinal(var Context: TMDContext; var Digest: TMDDigest);
|
||||||
|
|
||||||
{ Auxiliary methods }
|
|
||||||
|
|
||||||
function MDString(const S: String; const Version: Cardinal): TMDDigest;
|
|
||||||
function MDBuffer(var Buf; const BufLen: PtrUInt; const Version: Cardinal): TMDDigest;
|
(******************************************************************************
|
||||||
function MDFile(const Filename: String; const Version: Cardinal; const Bufsize: PtrUInt = DefBufSize): TMDDigest;
|
* Auxilary functions
|
||||||
|
******************************************************************************)
|
||||||
|
|
||||||
|
function MDString(const S: String; const Version: TMDVersion): TMDDigest;
|
||||||
|
function MDBuffer(var Buf; const BufLen: PtrUInt; const Version: TMDVersion): TMDDigest;
|
||||||
|
function MDFile(const Filename: String; const Version: TMDVersion; const Bufsize: PtrUInt = MDDefBufSize): TMDDigest;
|
||||||
function MDPrint(const Digest: TMDDigest): String;
|
function MDPrint(const Digest: TMDDigest): String;
|
||||||
function MDMatch(const Digest1, Digest2: TMDDigest): Boolean;
|
function MDMatch(const Digest1, Digest2: TMDDigest): Boolean;
|
||||||
|
|
||||||
@ -206,7 +223,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure MDInit(var Context: TMDContext; const Version: Cardinal);
|
procedure MDInit(var Context: TMDContext; const Version: TMDVersion);
|
||||||
begin
|
begin
|
||||||
Context.Version := Version;
|
Context.Version := Version;
|
||||||
Context.State[0] := $67452301;
|
Context.State[0] := $67452301;
|
||||||
@ -242,8 +259,8 @@ begin
|
|||||||
if Context.BufCnt = 64 then
|
if Context.BufCnt = 64 then
|
||||||
begin
|
begin
|
||||||
case Context.Version of
|
case Context.Version of
|
||||||
4: MD4Transform(Context, @Context.Buffer);
|
MD_VERSION_4: MD4Transform(Context, @Context.Buffer);
|
||||||
5: MD5Transform(Context, @Context.Buffer);
|
MD_VERSION_5: MD5Transform(Context, @Context.Buffer);
|
||||||
end;
|
end;
|
||||||
Context.BufCnt := 0;
|
Context.BufCnt := 0;
|
||||||
end;
|
end;
|
||||||
@ -254,8 +271,8 @@ begin
|
|||||||
while Num >= 64 do
|
while Num >= 64 do
|
||||||
begin
|
begin
|
||||||
case Context.Version of
|
case Context.Version of
|
||||||
4: MD4Transform(Context, Src);
|
MD_VERSION_4: MD4Transform(Context, Src);
|
||||||
5: MD5Transform(Context, Src);
|
MD_VERSION_5: MD5Transform(Context, Src);
|
||||||
end;
|
end;
|
||||||
Src := Pointer(PtrUInt(Src) + 64);
|
Src := Pointer(PtrUInt(Src) + 64);
|
||||||
Num := Num - 64;
|
Num := Num - 64;
|
||||||
@ -296,7 +313,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function MDString(const S: String; const Version: Cardinal): TMDDigest;
|
function MDString(const S: String; const Version: TMDVersion): TMDDigest;
|
||||||
var
|
var
|
||||||
Context: TMDContext;
|
Context: TMDContext;
|
||||||
begin
|
begin
|
||||||
@ -306,7 +323,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function MDBuffer(var Buf; const BufLen: PtrUInt; const Version: Cardinal): TMDDigest;
|
function MDBuffer(var Buf; const BufLen: PtrUInt; const Version: TMDVersion): TMDDigest;
|
||||||
var
|
var
|
||||||
Context: TMDContext;
|
Context: TMDContext;
|
||||||
begin
|
begin
|
||||||
@ -316,7 +333,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function MDFile(const Filename: String; const Version: Cardinal; const BufSize: PtrUInt): TMDDigest;
|
function MDFile(const Filename: String; const Version: TMDVersion; const BufSize: PtrUInt): TMDDigest;
|
||||||
var
|
var
|
||||||
F: File;
|
F: File;
|
||||||
Buf: Pchar;
|
Buf: Pchar;
|
||||||
|
@ -366,7 +366,7 @@ begin
|
|||||||
inc(pos);
|
inc(pos);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Result := MDBuffer(wpwd, 2*pos, 4);
|
Result := MDBuffer(wpwd, 2*pos, MD_VERSION_4);
|
||||||
FillChar(wpwd, Sizeof(wpwd), 0);
|
FillChar(wpwd, Sizeof(wpwd), 0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
390
packages/base/hash/uuid.pas
Normal file
390
packages/base/hash/uuid.pas
Normal file
@ -0,0 +1,390 @@
|
|||||||
|
{
|
||||||
|
This file is part of the Free Pascal packages.
|
||||||
|
Copyright (c) 1999-2006 by the Free Pascal development team
|
||||||
|
|
||||||
|
Implements a UUID generation algorithm (RFC 4122)
|
||||||
|
|
||||||
|
See the file COPYING.FPC, included in this distribution,
|
||||||
|
for details about the copyright.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
**********************************************************************}
|
||||||
|
|
||||||
|
unit uuid;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
{$mode objfpc}
|
||||||
|
{$h+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
SysUtils, DateUtils, md5, sockets;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(******************************************************************************
|
||||||
|
* types and constants
|
||||||
|
******************************************************************************)
|
||||||
|
|
||||||
|
type
|
||||||
|
uuid_t = TGuid;
|
||||||
|
uuid_time_t = qword;
|
||||||
|
uuid_node_t = array[0..5] of byte;
|
||||||
|
unsigned16 = word;
|
||||||
|
|
||||||
|
uuid_state = record
|
||||||
|
ts : uuid_time_t; // saved timestamp
|
||||||
|
node : uuid_node_t; // saved node ID
|
||||||
|
cs : unsigned16; // saved clock sequence
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
UUID_VERSION_1 = $1; // The time-based version specified in this document.
|
||||||
|
UUID_VERSION_2 = $2; // DCE Security version, with embedded POSIX UIDs.
|
||||||
|
UUID_VERSION_3 = $3; // The name-based version specified in this document that uses MD5 hashing.
|
||||||
|
UUID_VERSION_4 = $4; // The randomly or pseudo-randomly generated version specified in this document.
|
||||||
|
UUID_VERSION_5 = $5; // The name-based version specified in this document that uses SHA-1 hashing.
|
||||||
|
|
||||||
|
{ set the following to the number of 100ns ticks of the actual resolution of your system's clock }
|
||||||
|
UUIDS_PER_TICK = 1024;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(******************************************************************************
|
||||||
|
* core uuid functions
|
||||||
|
******************************************************************************)
|
||||||
|
|
||||||
|
{ uuid_create -- generator a UUID }
|
||||||
|
function uuid_create(var uuid: uuid_t): boolean;
|
||||||
|
|
||||||
|
{ uuid_create_md5_from_name -- create a version 3 (MD5) UUID using a "name" from a "name space" }
|
||||||
|
procedure uuid_create_md5_from_name(var uuid: uuid_t; const nsid: uuid_t; const name: string);
|
||||||
|
|
||||||
|
{ uuid_create_sha1_from_name -- create a version 5 (SHA-1) UUID using a "name" from a "name space" }
|
||||||
|
procedure uuid_create_sha1_from_name(var uuid: uuid_t; const nsid: uuid_t; const name: string);
|
||||||
|
|
||||||
|
{ uuid_compare -- Compare two UUID's "lexically" }
|
||||||
|
function uuid_compare(const u1, u2: uuid_t): integer;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(******************************************************************************
|
||||||
|
* auxilary functions
|
||||||
|
******************************************************************************)
|
||||||
|
|
||||||
|
{ read_state -- read UUID generator state from non-volatile store }
|
||||||
|
function read_state(var clockseq: unsigned16; var timestamp: uuid_time_t; var node: uuid_node_t): boolean;
|
||||||
|
|
||||||
|
{ write_state -- save UUID generator state back to non-volatile storage }
|
||||||
|
procedure write_state(var clockseq: unsigned16; const timestamp: uuid_time_t; const node: uuid_node_t);
|
||||||
|
|
||||||
|
{ format_uuid_v1 -- make a UUID from the timestamp, clockseq, and node ID }
|
||||||
|
procedure format_uuid_v1(var uuid: uuid_t; const clockseq: unsigned16; const timestamp: uuid_time_t; const node: uuid_node_t);
|
||||||
|
|
||||||
|
{ format_uuid_v3or5 -- make a UUID from a (pseudo)random 128-bit number }
|
||||||
|
procedure format_uuid_v3or5(var uuid: uuid_t; const hash: pointer; const v: integer);
|
||||||
|
|
||||||
|
{ get_current_time -- get time as 60-bit 100ns ticks since UUID epoch. Compensate for the fact that real clock resolution is less than 100ns. }
|
||||||
|
procedure get_current_time(var timestamp: uuid_time_t);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(******************************************************************************
|
||||||
|
* system functions
|
||||||
|
******************************************************************************)
|
||||||
|
|
||||||
|
{ get_system_time -- system dependent call to get the current system time. Returned as 100ns ticks since UUID epoch, but resolution may be less than 100ns. }
|
||||||
|
procedure get_system_time(var timestamp: uuid_time_t);
|
||||||
|
|
||||||
|
{ get_system_node_identifier -- system dependent call to get IEEE node ID }
|
||||||
|
procedure get_system_node_identifier(var node: uuid_node_t);
|
||||||
|
|
||||||
|
{ true_random -- generate a crypto-quality random number. }
|
||||||
|
function true_random: unsigned16;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
{ uuid_create }
|
||||||
|
|
||||||
|
function uuid_create(var uuid: TGuid): boolean;
|
||||||
|
var
|
||||||
|
timestamp: uuid_time_t;
|
||||||
|
last_time: uuid_time_t;
|
||||||
|
clockseq: unsigned16;
|
||||||
|
node: uuid_node_t;
|
||||||
|
last_node: uuid_node_t;
|
||||||
|
f: boolean;
|
||||||
|
begin
|
||||||
|
(* acquire system-wide lock so we're alone *)
|
||||||
|
// LOCK;
|
||||||
|
|
||||||
|
(* get time, node ID, saved state from non-volatile storage *)
|
||||||
|
get_current_time(timestamp);
|
||||||
|
get_system_node_identifier(node);
|
||||||
|
f := read_state(clockseq, last_time, last_node);
|
||||||
|
|
||||||
|
(* if no NV state, or if clock went backwards, or node ID
|
||||||
|
changed (e.g., new network card) change clockseq *)
|
||||||
|
if not f or CompareMem(@node, @last_node, sizeof(node)) then
|
||||||
|
clockseq := true_random() else
|
||||||
|
if timestamp < last_time then
|
||||||
|
clockseq := clockseq + 1;
|
||||||
|
|
||||||
|
(* save the state for next time *)
|
||||||
|
write_state(clockseq, timestamp, node);
|
||||||
|
|
||||||
|
// UNLOCK;
|
||||||
|
|
||||||
|
(* stuff fields into the UUID *)
|
||||||
|
format_uuid_v1(uuid, clockseq, timestamp, node);
|
||||||
|
|
||||||
|
Result := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ uuid_create_md5_from_name -- create a version 3 (MD5) UUID using a "name" from a "name space" }
|
||||||
|
|
||||||
|
procedure uuid_create_md5_from_name(var uuid: uuid_t; const nsid: uuid_t; const name: string);
|
||||||
|
var
|
||||||
|
net_nsid: uuid_t;
|
||||||
|
c: TMDContext;
|
||||||
|
hash: TMDDigest;
|
||||||
|
begin
|
||||||
|
(* put name space ID in network byte order so it hashes the same
|
||||||
|
no matter what endian machine we're on *)
|
||||||
|
net_nsid := nsid;
|
||||||
|
net_nsid.time_low := htonl(net_nsid.time_low);
|
||||||
|
net_nsid.time_mid := htons(net_nsid.time_mid);
|
||||||
|
net_nsid.time_hi_and_version := htons(net_nsid.time_hi_and_version);
|
||||||
|
|
||||||
|
MDInit(c, MD_VERSION_4);
|
||||||
|
MDUpdate(c, net_nsid, sizeof(net_nsid));
|
||||||
|
MDUpdate(c, pchar(name)^, Length(name));
|
||||||
|
MDFinal(c, hash);
|
||||||
|
|
||||||
|
(* the hash is in network byte order at this point *)
|
||||||
|
format_uuid_v3or5(uuid, @hash, UUID_VERSION_3);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ uuid_create_sha1_from_name }
|
||||||
|
|
||||||
|
procedure uuid_create_sha1_from_name(var uuid: uuid_t; const nsid: uuid_t; const name: string);
|
||||||
|
var
|
||||||
|
net_nsid: uuid_t;
|
||||||
|
{ c: TMDContext;
|
||||||
|
hash: TMDDigest;}
|
||||||
|
begin
|
||||||
|
(* put name space ID in network byte order so it hashes the same
|
||||||
|
no matter what endian machine we're on *)
|
||||||
|
net_nsid := nsid;
|
||||||
|
net_nsid.time_low := htonl(net_nsid.time_low);
|
||||||
|
net_nsid.time_mid := htons(net_nsid.time_mid);
|
||||||
|
net_nsid.time_hi_and_version := htons(net_nsid.time_hi_and_version);
|
||||||
|
|
||||||
|
{SHAInit(c, SHA_VERSION_1);
|
||||||
|
SHAUpdate(c, net_nsid, sizeof(net_nsid));
|
||||||
|
SHAUpdate(c, pchar(name)^, Length(name));
|
||||||
|
SHAFinal(c, hash);}
|
||||||
|
|
||||||
|
(* the hash is in network byte order at this point *)
|
||||||
|
format_uuid_v3or5(uuid, @hash, UUID_VERSION_5);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ uuid_compare }
|
||||||
|
|
||||||
|
function uuid_compare(const u1, u2: uuid_t): integer;
|
||||||
|
begin
|
||||||
|
Result := pinteger(@u1)[0] - pinteger(@u2)[0];
|
||||||
|
if Result <> 0 then Exit;
|
||||||
|
Result := pinteger(@u1)[1] - pinteger(@u2)[1];
|
||||||
|
if Result <> 0 then Exit;
|
||||||
|
Result := pinteger(@u1)[2] - pinteger(@u2)[2];
|
||||||
|
if Result <> 0 then Exit;
|
||||||
|
Result := pinteger(@u1)[3] - pinteger(@u2)[3];
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ read_state }
|
||||||
|
|
||||||
|
var
|
||||||
|
read_state_inited: boolean = false;
|
||||||
|
st: uuid_state;
|
||||||
|
|
||||||
|
function read_state(var clockseq: unsigned16; var timestamp: uuid_time_t; var node: uuid_node_t): boolean;
|
||||||
|
begin
|
||||||
|
(* only need to read state once per boot *)
|
||||||
|
if not read_state_inited then
|
||||||
|
begin
|
||||||
|
{fp = fopen("state", "rb");
|
||||||
|
if (fp == NULL)
|
||||||
|
return 0;
|
||||||
|
fread(&st, sizeof st, 1, fp);
|
||||||
|
fclose(fp);}
|
||||||
|
read_state_inited := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
clockseq := st.cs;
|
||||||
|
timestamp := st.ts;
|
||||||
|
node := st.node;
|
||||||
|
|
||||||
|
Result := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ write_state }
|
||||||
|
|
||||||
|
var
|
||||||
|
write_state_inited: boolean = false;
|
||||||
|
next_save: uuid_time_t;
|
||||||
|
|
||||||
|
procedure write_state(var clockseq: unsigned16; const timestamp: uuid_time_t; const node: uuid_node_t);
|
||||||
|
begin
|
||||||
|
if not write_state_inited then
|
||||||
|
begin
|
||||||
|
next_save := timestamp;
|
||||||
|
write_state_inited := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
(* always save state to volatile shared state *)
|
||||||
|
st.cs := clockseq;
|
||||||
|
st.ts := timestamp;
|
||||||
|
st.node := node;
|
||||||
|
|
||||||
|
if timestamp >= next_save then
|
||||||
|
begin
|
||||||
|
{fp = fopen("state", "wb");
|
||||||
|
fwrite(&st, sizeof st, 1, fp);
|
||||||
|
fclose(fp);}
|
||||||
|
|
||||||
|
(* schedule next save for 10 seconds from now *)
|
||||||
|
next_save := timestamp + (10 * 10 * 1000 * 1000);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ format_uuid_v1 }
|
||||||
|
|
||||||
|
procedure format_uuid_v1(var uuid: uuid_t; const clockseq: unsigned16; const timestamp: uuid_time_t; const node: uuid_node_t);
|
||||||
|
begin
|
||||||
|
uuid.time_low := timestamp and $FFFFFFFF;
|
||||||
|
uuid.time_mid := (timestamp shr 32) and $FFFF;
|
||||||
|
uuid.time_hi_and_version := (timestamp shr 48) and $0FFF;
|
||||||
|
uuid.time_hi_and_version := uuid.time_hi_and_version or (UUID_VERSION_1 shl 12);
|
||||||
|
uuid.clock_seq_low := clockseq and $FF;
|
||||||
|
uuid.clock_seq_hi_and_reserved := (clockseq shr 8) and $3F;
|
||||||
|
uuid.clock_seq_hi_and_reserved := uuid.clock_seq_hi_and_reserved or $80;
|
||||||
|
uuid.node := node;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ format_uuid_v3or5 }
|
||||||
|
|
||||||
|
procedure format_uuid_v3or5(var uuid: uuid_t; const hash: pointer; const v: integer);
|
||||||
|
begin
|
||||||
|
(* convert UUID to local byte order *)
|
||||||
|
move(hash^, uuid, sizeof(uuid));
|
||||||
|
uuid.time_low := ntohl(uuid.time_low);
|
||||||
|
uuid.time_mid := ntohs(uuid.time_mid);
|
||||||
|
uuid.time_hi_and_version := ntohs(uuid.time_hi_and_version);
|
||||||
|
|
||||||
|
(* put in the variant and version bits *)
|
||||||
|
uuid.time_hi_and_version := uuid.time_hi_and_version and $0FFF;
|
||||||
|
uuid.time_hi_and_version := uuid.time_hi_and_version or (v shl 12);
|
||||||
|
uuid.clock_seq_hi_and_reserved := $3F;
|
||||||
|
uuid.clock_seq_hi_and_reserved := uuid.clock_seq_hi_and_reserved or $80;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ get_current_time }
|
||||||
|
|
||||||
|
var
|
||||||
|
get_current_time_inited: boolean = false;
|
||||||
|
time_last: uuid_time_t;
|
||||||
|
uuids_this_tick: unsigned16;
|
||||||
|
|
||||||
|
procedure get_current_time(var timestamp: uuid_time_t);
|
||||||
|
var
|
||||||
|
time_now: uuid_time_t;
|
||||||
|
begin
|
||||||
|
if not get_current_time_inited then
|
||||||
|
begin
|
||||||
|
get_system_time(time_now);
|
||||||
|
uuids_this_tick := UUIDS_PER_TICK;
|
||||||
|
get_current_time_inited := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
while true do
|
||||||
|
begin
|
||||||
|
get_system_time(time_now);
|
||||||
|
|
||||||
|
(* if clock reading changed since last UUID generated, *)
|
||||||
|
if time_last <> time_now then
|
||||||
|
begin
|
||||||
|
(* reset count of uuids gen'd with this clock reading *)
|
||||||
|
uuids_this_tick := 0;
|
||||||
|
time_last := time_now;
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if uuids_this_tick < UUIDS_PER_TICK then
|
||||||
|
begin
|
||||||
|
uuids_this_tick := uuids_this_tick + 1;
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
(* going too fast for our clock; spin *)
|
||||||
|
end;
|
||||||
|
|
||||||
|
(* add the count of uuids to low order bits of the clock reading *)
|
||||||
|
timestamp := time_now + uuids_this_tick;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ get_system_time }
|
||||||
|
|
||||||
|
procedure get_system_time(var timestamp: uuid_time_t);
|
||||||
|
var
|
||||||
|
Epoch:TDateTime;
|
||||||
|
begin
|
||||||
|
Epoch := EncodeDateTime(1582, 10, 15, 0, 0, 0, 0);
|
||||||
|
timestamp := 10000*MilliSecondsBetween(Epoch, Now);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ get_system_node_identifier }
|
||||||
|
|
||||||
|
var
|
||||||
|
get_system_node_identifier_inited: boolean = false;
|
||||||
|
saved_node: uuid_node_t;
|
||||||
|
|
||||||
|
procedure get_system_node_identifier(var node: uuid_node_t);
|
||||||
|
begin
|
||||||
|
if not get_system_node_identifier_inited then
|
||||||
|
begin
|
||||||
|
saved_node[0] := Random($100);
|
||||||
|
saved_node[1] := Random($100);
|
||||||
|
saved_node[2] := Random($100);
|
||||||
|
saved_node[3] := Random($100);
|
||||||
|
saved_node[4] := Random($100);
|
||||||
|
saved_node[5] := Random($100);
|
||||||
|
|
||||||
|
get_system_node_identifier_inited := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
node := saved_node;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ true_random }
|
||||||
|
|
||||||
|
function true_random: unsigned16;
|
||||||
|
begin
|
||||||
|
Result := Random($10000);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user