added libuuid
This commit is contained in:
		
							
								
								
									
										5
									
								
								uuid/COPYING
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								uuid/COPYING
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
This library is free software; you can redistribute it and/or
 | 
			
		||||
modify it under the terms of the Modified BSD License.
 | 
			
		||||
 | 
			
		||||
The complete text of the license is available at the
 | 
			
		||||
Documentation/licenses/COPYING.BSD-3 file.
 | 
			
		||||
							
								
								
									
										40
									
								
								uuid/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								uuid/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
check_PROGRAMS = test_uuid
 | 
			
		||||
test_uuid_SOURCES = test_uuid.c
 | 
			
		||||
test_uuid_LDADD = libuuid.la $(SOCKET_LIBS)
 | 
			
		||||
test_uuid_CFLAGS = -I$(top_srcdir)
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = uuid.pc.in
 | 
			
		||||
pkgconfigdir = $(libdir)/pkgconfig
 | 
			
		||||
pkgconfig_DATA = uuid.pc
 | 
			
		||||
 | 
			
		||||
# includes
 | 
			
		||||
uuidincdir = $(includedir)/uuid
 | 
			
		||||
uuidinc_HEADERS = uuid.h
 | 
			
		||||
 | 
			
		||||
lib_LTLIBRARIES = libuuid.la
 | 
			
		||||
 | 
			
		||||
libuuid_la_SOURCES = \
 | 
			
		||||
	clear.c \
 | 
			
		||||
	compare.c \
 | 
			
		||||
	copy.c \
 | 
			
		||||
	gen_uuid.c \
 | 
			
		||||
	isnull.c \
 | 
			
		||||
	pack.c \
 | 
			
		||||
	parse.c \
 | 
			
		||||
	unpack.c \
 | 
			
		||||
	unparse.c \
 | 
			
		||||
	uuidd.h \
 | 
			
		||||
	uuidd.h \
 | 
			
		||||
	uuidP.h \
 | 
			
		||||
	uuid_time.c \
 | 
			
		||||
	randutils.c \
 | 
			
		||||
	$(uuidinc_HEADERS)
 | 
			
		||||
 | 
			
		||||
noinst_HEADERS = \
 | 
			
		||||
	all-io.h \
 | 
			
		||||
	c.h \
 | 
			
		||||
	randutils.h
 | 
			
		||||
 | 
			
		||||
libuuid_la_LIBADD  = $(SOCKET_LIBS)
 | 
			
		||||
libuuid_la_CFLAGS  = -I$(top_srcdir)
 | 
			
		||||
libuuid_la_LDFLAGS = -version-info $(LIBUUID_VERSION_INFO)
 | 
			
		||||
							
								
								
									
										1030
									
								
								uuid/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1030
									
								
								uuid/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										9636
									
								
								uuid/aclocal.m4
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9636
									
								
								uuid/aclocal.m4
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										82
									
								
								uuid/all-io.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								uuid/all-io.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
/*
 | 
			
		||||
 * No copyright is claimed.  This code is in the public domain; do with
 | 
			
		||||
 * it what you wish.
 | 
			
		||||
 *
 | 
			
		||||
 * Written by Karel Zak <kzak@redhat.com>
 | 
			
		||||
 *            Petr Uzel <petr.uzel@suse.cz>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef UTIL_LINUX_ALL_IO_H
 | 
			
		||||
#define UTIL_LINUX_ALL_IO_H
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#include "c.h"
 | 
			
		||||
 | 
			
		||||
static inline int write_all(int fd, const void *buf, size_t count)
 | 
			
		||||
{
 | 
			
		||||
	while (count) {
 | 
			
		||||
		ssize_t tmp;
 | 
			
		||||
 | 
			
		||||
		errno = 0;
 | 
			
		||||
		tmp = write(fd, buf, count);
 | 
			
		||||
		if (tmp > 0) {
 | 
			
		||||
			count -= tmp;
 | 
			
		||||
			if (count)
 | 
			
		||||
				buf = (void *) ((char *) buf + tmp);
 | 
			
		||||
		} else if (errno != EINTR && errno != EAGAIN)
 | 
			
		||||
			return -1;
 | 
			
		||||
		if (errno == EAGAIN)	/* Try later, *sigh* */
 | 
			
		||||
			usleep(10000);
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int fwrite_all(const void *ptr, size_t size,
 | 
			
		||||
			     size_t nmemb, FILE *stream)
 | 
			
		||||
{
 | 
			
		||||
	while (nmemb) {
 | 
			
		||||
		size_t tmp;
 | 
			
		||||
 | 
			
		||||
		errno = 0;
 | 
			
		||||
		tmp = fwrite(ptr, size, nmemb, stream);
 | 
			
		||||
		if (tmp > 0) {
 | 
			
		||||
			nmemb -= tmp;
 | 
			
		||||
			if (nmemb)
 | 
			
		||||
				ptr = (void *) ((char *) ptr + (tmp * size));
 | 
			
		||||
		} else if (errno != EINTR && errno != EAGAIN)
 | 
			
		||||
			return -1;
 | 
			
		||||
		if (errno == EAGAIN)	/* Try later, *sigh* */
 | 
			
		||||
			usleep(10000);
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline ssize_t read_all(int fd, char *buf, size_t count)
 | 
			
		||||
{
 | 
			
		||||
	ssize_t ret;
 | 
			
		||||
	ssize_t c = 0;
 | 
			
		||||
	int tries = 0;
 | 
			
		||||
 | 
			
		||||
	memset(buf, 0, count);
 | 
			
		||||
	while (count > 0) {
 | 
			
		||||
		ret = read(fd, buf, count);
 | 
			
		||||
		if (ret <= 0) {
 | 
			
		||||
			if ((errno == EAGAIN || errno == EINTR || ret == 0) &&
 | 
			
		||||
			    (tries++ < 5))
 | 
			
		||||
				continue;
 | 
			
		||||
			return c ? c : -1;
 | 
			
		||||
		}
 | 
			
		||||
		if (ret > 0)
 | 
			
		||||
			tries = 0;
 | 
			
		||||
		count -= ret;
 | 
			
		||||
		buf += ret;
 | 
			
		||||
		c += ret;
 | 
			
		||||
	}
 | 
			
		||||
	return c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* UTIL_LINUX_ALL_IO_H */
 | 
			
		||||
							
								
								
									
										317
									
								
								uuid/c.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										317
									
								
								uuid/c.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,317 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Fundamental C definitions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef UTIL_LINUX_C_H
 | 
			
		||||
#define UTIL_LINUX_C_H
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_STDINT_H
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#else
 | 
			
		||||
# ifdef HAVE_INTTYPES_H
 | 
			
		||||
# include <inttypes.h>
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_ERR_H
 | 
			
		||||
# include <err.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_USLEEP
 | 
			
		||||
# include <time.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Compiler specific stuff
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __GNUC_PREREQ
 | 
			
		||||
# if defined __GNUC__ && defined __GNUC_MINOR__
 | 
			
		||||
#  define __GNUC_PREREQ(maj, min) \
 | 
			
		||||
	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
 | 
			
		||||
# else
 | 
			
		||||
#  define __GNUC_PREREQ(maj, min) 0
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUC__
 | 
			
		||||
 | 
			
		||||
/* &a[0] degrades to a pointer: a different type from an array */
 | 
			
		||||
# define __must_be_array(a) \
 | 
			
		||||
	UL_BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(__typeof__(a), __typeof__(&a[0])))
 | 
			
		||||
 | 
			
		||||
# define ignore_result(x) ({ \
 | 
			
		||||
	__typeof__(x) __dummy __attribute__((__unused__)) = (x); (void) __dummy; \
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
#else /* !__GNUC__ */
 | 
			
		||||
# define __must_be_array(a)	0
 | 
			
		||||
# define __attribute__(_arg_)
 | 
			
		||||
# define ignore_result(x) ((void) (x))
 | 
			
		||||
#endif /* !__GNUC__ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Function attributes
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __ul_alloc_size
 | 
			
		||||
# if __GNUC_PREREQ (4, 3)
 | 
			
		||||
#  define __ul_alloc_size(s) __attribute__((alloc_size(s)))
 | 
			
		||||
# else
 | 
			
		||||
#  define __ul_alloc_size(s)
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __ul_calloc_size
 | 
			
		||||
# if __GNUC_PREREQ (4, 3)
 | 
			
		||||
#  define __ul_calloc_size(n, s) __attribute__((alloc_size(n, s)))
 | 
			
		||||
# else
 | 
			
		||||
#  define __ul_calloc_size(n, s)
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Force a compilation error if condition is true, but also produce a
 | 
			
		||||
 * result (of value 0 and type size_t), so the expression can be used
 | 
			
		||||
 * e.g. in a structure initializer (or where-ever else comma expressions
 | 
			
		||||
 * aren't permitted).
 | 
			
		||||
 */
 | 
			
		||||
#define UL_BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
 | 
			
		||||
#define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))
 | 
			
		||||
 | 
			
		||||
#ifndef ARRAY_SIZE
 | 
			
		||||
# define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PATH_MAX
 | 
			
		||||
# define PATH_MAX 4096
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef TRUE
 | 
			
		||||
# define TRUE 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef FALSE
 | 
			
		||||
# define FALSE 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef min
 | 
			
		||||
# define min(x, y) ({				\
 | 
			
		||||
	__typeof__(x) _min1 = (x);		\
 | 
			
		||||
	__typeof__(y) _min2 = (y);		\
 | 
			
		||||
	(void) (&_min1 == &_min2);		\
 | 
			
		||||
	_min1 < _min2 ? _min1 : _min2; })
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef max
 | 
			
		||||
# define max(x, y) ({				\
 | 
			
		||||
	__typeof__(x) _max1 = (x);		\
 | 
			
		||||
	__typeof__(y) _max2 = (y);		\
 | 
			
		||||
	(void) (&_max1 == &_max2);		\
 | 
			
		||||
	_max1 > _max2 ? _max1 : _max2; })
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef offsetof
 | 
			
		||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef container_of
 | 
			
		||||
#define container_of(ptr, type, member) ({                       \
 | 
			
		||||
	const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
 | 
			
		||||
	(type *)( (char *)__mptr - offsetof(type,member) );})
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME
 | 
			
		||||
# ifdef HAVE___PROGNAME
 | 
			
		||||
extern char *__progname;
 | 
			
		||||
#  define program_invocation_short_name __progname
 | 
			
		||||
# else
 | 
			
		||||
#  ifdef HAVE_GETEXECNAME
 | 
			
		||||
#   define program_invocation_short_name \
 | 
			
		||||
		prog_inv_sh_nm_from_file(getexecname(), 0)
 | 
			
		||||
#  else
 | 
			
		||||
#   define program_invocation_short_name \
 | 
			
		||||
		prog_inv_sh_nm_from_file(__FILE__, 1)
 | 
			
		||||
#  endif
 | 
			
		||||
static char prog_inv_sh_nm_buf[256];
 | 
			
		||||
static inline char *
 | 
			
		||||
prog_inv_sh_nm_from_file(char *f, char stripext)
 | 
			
		||||
{
 | 
			
		||||
	char *t;
 | 
			
		||||
 | 
			
		||||
	if ((t = strrchr(f, '/')) != NULL)
 | 
			
		||||
		t++;
 | 
			
		||||
	else
 | 
			
		||||
		t = f;
 | 
			
		||||
 | 
			
		||||
	strncpy(prog_inv_sh_nm_buf, t, sizeof(prog_inv_sh_nm_buf) - 1);
 | 
			
		||||
	prog_inv_sh_nm_buf[sizeof(prog_inv_sh_nm_buf) - 1] = '\0';
 | 
			
		||||
 | 
			
		||||
	if (stripext && (t = strrchr(prog_inv_sh_nm_buf, '.')) != NULL)
 | 
			
		||||
		*t = '\0';
 | 
			
		||||
 | 
			
		||||
	return prog_inv_sh_nm_buf;
 | 
			
		||||
}
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_ERR_H
 | 
			
		||||
static inline void
 | 
			
		||||
errmsg(char doexit, int excode, char adderr, const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	fprintf(stderr, "%s: ", program_invocation_short_name);
 | 
			
		||||
	if (fmt != NULL) {
 | 
			
		||||
		va_list argp;
 | 
			
		||||
		va_start(argp, fmt);
 | 
			
		||||
		vfprintf(stderr, fmt, argp);
 | 
			
		||||
		va_end(argp);
 | 
			
		||||
		if (adderr)
 | 
			
		||||
			fprintf(stderr, ": ");
 | 
			
		||||
	}
 | 
			
		||||
	if (adderr)
 | 
			
		||||
		fprintf(stderr, "%m");
 | 
			
		||||
	fprintf(stderr, "\n");
 | 
			
		||||
	if (doexit)
 | 
			
		||||
		exit(excode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_ERR
 | 
			
		||||
# define err(E, FMT...) errmsg(1, E, 1, FMT)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_ERRX
 | 
			
		||||
# define errx(E, FMT...) errmsg(1, E, 0, FMT)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_WARN
 | 
			
		||||
# define warn(FMT...) errmsg(0, 0, 1, FMT)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_WARNX
 | 
			
		||||
# define warnx(FMT...) errmsg(0, 0, 0, FMT)
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* !HAVE_ERR_H */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static inline __attribute__((const)) int is_power_of_2(unsigned long num)
 | 
			
		||||
{
 | 
			
		||||
	return (num != 0 && ((num & (num - 1)) == 0));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_LOFF_T
 | 
			
		||||
typedef int64_t loff_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(HAVE_DIRFD) && (!defined(HAVE_DECL_DIRFD) || HAVE_DECL_DIRFD == 0) && defined(HAVE_DIR_DD_FD)
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
static inline int dirfd(DIR *d)
 | 
			
		||||
{
 | 
			
		||||
	return d->dd_fd;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Fallback defines for old versions of glibc
 | 
			
		||||
 */
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
 | 
			
		||||
#ifdef O_CLOEXEC
 | 
			
		||||
#define UL_CLOEXECSTR	"e"
 | 
			
		||||
#else
 | 
			
		||||
#define UL_CLOEXECSTR	""
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef O_CLOEXEC
 | 
			
		||||
#define O_CLOEXEC 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef AI_ADDRCONFIG
 | 
			
		||||
#define AI_ADDRCONFIG 0x0020
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef IUTF8
 | 
			
		||||
#define IUTF8 0040000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * MAXHOSTNAMELEN replacement
 | 
			
		||||
 */
 | 
			
		||||
static inline size_t get_hostname_max(void)
 | 
			
		||||
{
 | 
			
		||||
#if HAVE_DECL__SC_HOST_NAME_MAX
 | 
			
		||||
	long len = sysconf(_SC_HOST_NAME_MAX);
 | 
			
		||||
 | 
			
		||||
	if (0 < len)
 | 
			
		||||
		return len;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef MAXHOSTNAMELEN
 | 
			
		||||
	return MAXHOSTNAMELEN;
 | 
			
		||||
#elif HOST_NAME_MAX
 | 
			
		||||
	return HOST_NAME_MAX;
 | 
			
		||||
#endif
 | 
			
		||||
	return 64;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_USLEEP
 | 
			
		||||
/*
 | 
			
		||||
 * This function is marked obsolete in POSIX.1-2001 and removed in
 | 
			
		||||
 * POSIX.1-2008. It is replaced with nanosleep().
 | 
			
		||||
 */
 | 
			
		||||
static inline int usleep(useconds_t usec)
 | 
			
		||||
{
 | 
			
		||||
	struct timespec waittime = {
 | 
			
		||||
		.tv_sec   =  usec / 1000000L,
 | 
			
		||||
		.tv_nsec  = (usec % 1000000L) * 1000
 | 
			
		||||
	};
 | 
			
		||||
	return nanosleep(&waittime, NULL);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Constant strings for usage() functions. For more info see
 | 
			
		||||
 * Documentation/howto-usage-function.txt and disk-utils/delpart.c
 | 
			
		||||
 */
 | 
			
		||||
#define USAGE_HEADER     _("\nUsage:\n")
 | 
			
		||||
#define USAGE_OPTIONS    _("\nOptions:\n")
 | 
			
		||||
#define USAGE_SEPARATOR  _("\n")
 | 
			
		||||
#define USAGE_HELP       _(" -h, --help     display this help and exit\n")
 | 
			
		||||
#define USAGE_VERSION    _(" -V, --version  output version information and exit\n")
 | 
			
		||||
#define USAGE_MAN_TAIL(_man)   _("\nFor more details see %s.\n"), _man
 | 
			
		||||
 | 
			
		||||
#define UTIL_LINUX_VERSION _("%s from %s\n"), program_invocation_short_name, PACKAGE_STRING
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * scanf modifiers for "strings allocation"
 | 
			
		||||
 */
 | 
			
		||||
#ifdef HAVE_SCANF_MS_MODIFIER
 | 
			
		||||
#define UL_SCNsA	"%ms"
 | 
			
		||||
#elif defined(HAVE_SCANF_AS_MODIFIER)
 | 
			
		||||
#define UL_SCNsA	"%as"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * seek stuff
 | 
			
		||||
 */
 | 
			
		||||
#ifndef SEEK_DATA
 | 
			
		||||
# define SEEK_DATA	3
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef SEEK_HOLE
 | 
			
		||||
# define SEEK_HOLE	4
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* UTIL_LINUX_C_H */
 | 
			
		||||
							
								
								
									
										43
									
								
								uuid/clear.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								uuid/clear.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
/*
 | 
			
		||||
 * clear.c -- Clear a UUID
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "string.h"
 | 
			
		||||
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
 | 
			
		||||
void uuid_clear(uuid_t uu)
 | 
			
		||||
{
 | 
			
		||||
	memset(uu, 0, 16);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										55
									
								
								uuid/compare.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								uuid/compare.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
/*
 | 
			
		||||
 * compare.c --- compare whether or not two UUIDs are the same
 | 
			
		||||
 *
 | 
			
		||||
 * Returns 0 if the two UUIDs are different, and 1 if they are the same.
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#define UUCMP(u1,u2) if (u1 != u2) return((u1 < u2) ? -1 : 1);
 | 
			
		||||
 | 
			
		||||
int uuid_compare(const uuid_t uu1, const uuid_t uu2)
 | 
			
		||||
{
 | 
			
		||||
	struct uuid	uuid1, uuid2;
 | 
			
		||||
 | 
			
		||||
	uuid_unpack(uu1, &uuid1);
 | 
			
		||||
	uuid_unpack(uu2, &uuid2);
 | 
			
		||||
 | 
			
		||||
	UUCMP(uuid1.time_low, uuid2.time_low);
 | 
			
		||||
	UUCMP(uuid1.time_mid, uuid2.time_mid);
 | 
			
		||||
	UUCMP(uuid1.time_hi_and_version, uuid2.time_hi_and_version);
 | 
			
		||||
	UUCMP(uuid1.clock_seq, uuid2.clock_seq);
 | 
			
		||||
	return memcmp(uuid1.node, uuid2.node, 6);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1535
									
								
								uuid/config.guess
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1535
									
								
								uuid/config.guess
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										152
									
								
								uuid/config.h.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								uuid/config.h.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,152 @@
 | 
			
		||||
/* config.h.in.  Generated from configure.ac by autoheader.  */
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the declaration of `_SC_HOST_NAME_MAX', and to 0 if
 | 
			
		||||
   you don't. */
 | 
			
		||||
#undef HAVE_DECL__SC_HOST_NAME_MAX
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <dlfcn.h> header file. */
 | 
			
		||||
#undef HAVE_DLFCN_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <fcntl.h> header file. */
 | 
			
		||||
#undef HAVE_FCNTL_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the `ftruncate' function. */
 | 
			
		||||
#undef HAVE_FTRUNCATE
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the `gettimeofday' function. */
 | 
			
		||||
#undef HAVE_GETTIMEOFDAY
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <inttypes.h> header file. */
 | 
			
		||||
#undef HAVE_INTTYPES_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <limits.h> header file. */
 | 
			
		||||
#undef HAVE_LIMITS_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <memory.h> header file. */
 | 
			
		||||
#undef HAVE_MEMORY_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the `memset' function. */
 | 
			
		||||
#undef HAVE_MEMSET
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <netinet/in.h> header file. */
 | 
			
		||||
#undef HAVE_NETINET_IN_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the `socket' function. */
 | 
			
		||||
#undef HAVE_SOCKET
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the `srandom' function. */
 | 
			
		||||
#undef HAVE_SRANDOM
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <stdint.h> header file. */
 | 
			
		||||
#undef HAVE_STDINT_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <stdlib.h> header file. */
 | 
			
		||||
#undef HAVE_STDLIB_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <strings.h> header file. */
 | 
			
		||||
#undef HAVE_STRINGS_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <string.h> header file. */
 | 
			
		||||
#undef HAVE_STRING_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the `strtoul' function. */
 | 
			
		||||
#undef HAVE_STRTOUL
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <sys/file.h> header file. */
 | 
			
		||||
#undef HAVE_SYS_FILE_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <sys/ioctl.h> header file. */
 | 
			
		||||
#undef HAVE_SYS_IOCTL_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <sys/socket.h> header file. */
 | 
			
		||||
#undef HAVE_SYS_SOCKET_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <sys/stat.h> header file. */
 | 
			
		||||
#undef HAVE_SYS_STAT_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <sys/time.h> header file. */
 | 
			
		||||
#undef HAVE_SYS_TIME_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <sys/types.h> header file. */
 | 
			
		||||
#undef HAVE_SYS_TYPES_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the <unistd.h> header file. */
 | 
			
		||||
#undef HAVE_UNISTD_H
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the `usleep' function. */
 | 
			
		||||
#undef HAVE_USLEEP
 | 
			
		||||
 | 
			
		||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
 | 
			
		||||
   */
 | 
			
		||||
#undef LT_OBJDIR
 | 
			
		||||
 | 
			
		||||
/* Name of package */
 | 
			
		||||
#undef PACKAGE
 | 
			
		||||
 | 
			
		||||
/* Define to the address where bug reports for this package should be sent. */
 | 
			
		||||
#undef PACKAGE_BUGREPORT
 | 
			
		||||
 | 
			
		||||
/* Define to the full name of this package. */
 | 
			
		||||
#undef PACKAGE_NAME
 | 
			
		||||
 | 
			
		||||
/* Define to the full name and version of this package. */
 | 
			
		||||
#undef PACKAGE_STRING
 | 
			
		||||
 | 
			
		||||
/* Define to the one symbol short name of this package. */
 | 
			
		||||
#undef PACKAGE_TARNAME
 | 
			
		||||
 | 
			
		||||
/* Define to the home page for this package. */
 | 
			
		||||
#undef PACKAGE_URL
 | 
			
		||||
 | 
			
		||||
/* Define to the version of this package. */
 | 
			
		||||
#undef PACKAGE_VERSION
 | 
			
		||||
 | 
			
		||||
/* Define to 1 if you have the ANSI C header files. */
 | 
			
		||||
#undef STDC_HEADERS
 | 
			
		||||
 | 
			
		||||
/* Version number of package */
 | 
			
		||||
#undef VERSION
 | 
			
		||||
 | 
			
		||||
/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
 | 
			
		||||
   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
 | 
			
		||||
   #define below would cause a syntax error. */
 | 
			
		||||
#undef _UINT32_T
 | 
			
		||||
 | 
			
		||||
/* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>,
 | 
			
		||||
   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
 | 
			
		||||
   #define below would cause a syntax error. */
 | 
			
		||||
#undef _UINT64_T
 | 
			
		||||
 | 
			
		||||
/* Define for Solaris 2.5.1 so the uint8_t typedef from <sys/synch.h>,
 | 
			
		||||
   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
 | 
			
		||||
   #define below would cause a syntax error. */
 | 
			
		||||
#undef _UINT8_T
 | 
			
		||||
 | 
			
		||||
/* Define to the type of a signed integer type of width exactly 32 bits if
 | 
			
		||||
   such a type exists and the standard includes do not define it. */
 | 
			
		||||
#undef int32_t
 | 
			
		||||
 | 
			
		||||
/* Define to `int' if <sys/types.h> does not define. */
 | 
			
		||||
#undef mode_t
 | 
			
		||||
 | 
			
		||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
 | 
			
		||||
#undef size_t
 | 
			
		||||
 | 
			
		||||
/* Define to `int' if <sys/types.h> does not define. */
 | 
			
		||||
#undef ssize_t
 | 
			
		||||
 | 
			
		||||
/* Define to the type of an unsigned integer type of width exactly 16 bits if
 | 
			
		||||
   such a type exists and the standard includes do not define it. */
 | 
			
		||||
#undef uint16_t
 | 
			
		||||
 | 
			
		||||
/* Define to the type of an unsigned integer type of width exactly 32 bits if
 | 
			
		||||
   such a type exists and the standard includes do not define it. */
 | 
			
		||||
#undef uint32_t
 | 
			
		||||
 | 
			
		||||
/* Define to the type of an unsigned integer type of width exactly 64 bits if
 | 
			
		||||
   such a type exists and the standard includes do not define it. */
 | 
			
		||||
#undef uint64_t
 | 
			
		||||
 | 
			
		||||
/* Define to the type of an unsigned integer type of width exactly 8 bits if
 | 
			
		||||
   such a type exists and the standard includes do not define it. */
 | 
			
		||||
#undef uint8_t
 | 
			
		||||
							
								
								
									
										1790
									
								
								uuid/config.sub
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1790
									
								
								uuid/config.sub
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										14828
									
								
								uuid/configure
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14828
									
								
								uuid/configure
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										56
									
								
								uuid/configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								uuid/configure.ac
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
# Process this file with autoconf to produce a configure script.
 | 
			
		||||
 | 
			
		||||
AC_PREREQ([2.69])
 | 
			
		||||
AC_INIT([libuuid], [1.0.3], [sloowfranklin@gmail.com])
 | 
			
		||||
AC_CONFIG_SRCDIR([compare.c])
 | 
			
		||||
AC_CONFIG_HEADERS([config.h])
 | 
			
		||||
AM_INIT_AUTOMAKE([foreign])
 | 
			
		||||
LT_INIT
 | 
			
		||||
 | 
			
		||||
# Checks for programs.
 | 
			
		||||
AC_PROG_CC
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Checks for libraries.
 | 
			
		||||
SOCKET_LIBS=
 | 
			
		||||
AC_SEARCH_LIBS([socket], [socket],
 | 
			
		||||
    [if test x"$ac_cv_search_socket" != x"none required"; then
 | 
			
		||||
        SOCKET_LIBS="$SOCKET_LIBS -lsocket";
 | 
			
		||||
    fi])
 | 
			
		||||
AC_SUBST([SOCKET_LIBS])
 | 
			
		||||
 | 
			
		||||
# Checks for header files.
 | 
			
		||||
AC_CHECK_HEADERS([fcntl.h inttypes.h limits.h netinet/in.h stdlib.h string.h sys/file.h sys/ioctl.h sys/socket.h sys/time.h unistd.h])
 | 
			
		||||
AC_CHECK_DECLS([_SC_HOST_NAME_MAX])
 | 
			
		||||
 | 
			
		||||
# Checks for typedefs, structures, and compiler characteristics.
 | 
			
		||||
AC_TYPE_INT32_T
 | 
			
		||||
AC_TYPE_MODE_T
 | 
			
		||||
AC_TYPE_SIZE_T
 | 
			
		||||
AC_TYPE_SSIZE_T
 | 
			
		||||
AC_TYPE_UINT16_T
 | 
			
		||||
AC_TYPE_UINT32_T
 | 
			
		||||
AC_TYPE_UINT64_T
 | 
			
		||||
AC_TYPE_UINT8_T
 | 
			
		||||
 | 
			
		||||
# Checks for library functions.
 | 
			
		||||
AC_CHECK_FUNCS([ftruncate gettimeofday memset socket strtoul usleep srandom])
 | 
			
		||||
 | 
			
		||||
dnl version details from <major>.<minor>.<release>
 | 
			
		||||
PACKAGE_VERSION_MAJOR=$(echo $PACKAGE_VERSION | awk -F. '{print $1}')
 | 
			
		||||
PACKAGE_VERSION_MINOR=$(echo $PACKAGE_VERSION | awk -F. '{print $2}')
 | 
			
		||||
PACKAGE_VERSION_RELEASE=$(echo $PACKAGE_VERSION | awk -F. '{print $3}')
 | 
			
		||||
 | 
			
		||||
LIBUUID_VERSION="$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_RELEASE"
 | 
			
		||||
LIBUUID_LT_MAJOR=1
 | 
			
		||||
LIBUUID_LT_MINOR=0
 | 
			
		||||
LIBUUID_LT_MICRO=0
 | 
			
		||||
LIBUUID_VERSION_INFO=`expr $LIBUUID_LT_MAJOR + $LIBUUID_LT_MINOR`:$LIBUUID_LT_MICRO:$LIBUUID_LT_MINOR
 | 
			
		||||
AC_SUBST([LIBUUID_VERSION])
 | 
			
		||||
AC_SUBST([LIBUUID_VERSION_INFO])
 | 
			
		||||
 | 
			
		||||
AC_CONFIG_FILES(
 | 
			
		||||
  [Makefile]
 | 
			
		||||
  [uuid.pc]
 | 
			
		||||
)
 | 
			
		||||
AC_OUTPUT
 | 
			
		||||
							
								
								
									
										45
									
								
								uuid/copy.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								uuid/copy.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
/*
 | 
			
		||||
 * copy.c --- copy UUIDs
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
 | 
			
		||||
void uuid_copy(uuid_t dst, const uuid_t src)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char		*cp1;
 | 
			
		||||
	const unsigned char	*cp2;
 | 
			
		||||
	int			i;
 | 
			
		||||
 | 
			
		||||
	for (i=0, cp1 = dst, cp2 = src; i < 16; i++)
 | 
			
		||||
		*cp1++ = *cp2++;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										791
									
								
								uuid/depcomp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										791
									
								
								uuid/depcomp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,791 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
# depcomp - compile a program generating dependencies as side-effects
 | 
			
		||||
 | 
			
		||||
scriptversion=2013-05-30.07; # UTC
 | 
			
		||||
 | 
			
		||||
# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 | 
			
		||||
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation; either version 2, or (at your option)
 | 
			
		||||
# any later version.
 | 
			
		||||
 | 
			
		||||
# 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.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
# As a special exception to the GNU General Public License, if you
 | 
			
		||||
# distribute this file as part of a program that contains a
 | 
			
		||||
# configuration script generated by Autoconf, you may include it under
 | 
			
		||||
# the same distribution terms that you use for the rest of that program.
 | 
			
		||||
 | 
			
		||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
 | 
			
		||||
 | 
			
		||||
case $1 in
 | 
			
		||||
  '')
 | 
			
		||||
    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
 | 
			
		||||
    exit 1;
 | 
			
		||||
    ;;
 | 
			
		||||
  -h | --h*)
 | 
			
		||||
    cat <<\EOF
 | 
			
		||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
 | 
			
		||||
 | 
			
		||||
Run PROGRAMS ARGS to compile a file, generating dependencies
 | 
			
		||||
as side-effects.
 | 
			
		||||
 | 
			
		||||
Environment variables:
 | 
			
		||||
  depmode     Dependency tracking mode.
 | 
			
		||||
  source      Source file read by 'PROGRAMS ARGS'.
 | 
			
		||||
  object      Object file output by 'PROGRAMS ARGS'.
 | 
			
		||||
  DEPDIR      directory where to store dependencies.
 | 
			
		||||
  depfile     Dependency file to output.
 | 
			
		||||
  tmpdepfile  Temporary file to use when outputting dependencies.
 | 
			
		||||
  libtool     Whether libtool is used (yes/no).
 | 
			
		||||
 | 
			
		||||
Report bugs to <bug-automake@gnu.org>.
 | 
			
		||||
EOF
 | 
			
		||||
    exit $?
 | 
			
		||||
    ;;
 | 
			
		||||
  -v | --v*)
 | 
			
		||||
    echo "depcomp $scriptversion"
 | 
			
		||||
    exit $?
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# Get the directory component of the given path, and save it in the
 | 
			
		||||
# global variables '$dir'.  Note that this directory component will
 | 
			
		||||
# be either empty or ending with a '/' character.  This is deliberate.
 | 
			
		||||
set_dir_from ()
 | 
			
		||||
{
 | 
			
		||||
  case $1 in
 | 
			
		||||
    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
 | 
			
		||||
      *) dir=;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Get the suffix-stripped basename of the given path, and save it the
 | 
			
		||||
# global variable '$base'.
 | 
			
		||||
set_base_from ()
 | 
			
		||||
{
 | 
			
		||||
  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# If no dependency file was actually created by the compiler invocation,
 | 
			
		||||
# we still have to create a dummy depfile, to avoid errors with the
 | 
			
		||||
# Makefile "include basename.Plo" scheme.
 | 
			
		||||
make_dummy_depfile ()
 | 
			
		||||
{
 | 
			
		||||
  echo "#dummy" > "$depfile"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Factor out some common post-processing of the generated depfile.
 | 
			
		||||
# Requires the auxiliary global variable '$tmpdepfile' to be set.
 | 
			
		||||
aix_post_process_depfile ()
 | 
			
		||||
{
 | 
			
		||||
  # If the compiler actually managed to produce a dependency file,
 | 
			
		||||
  # post-process it.
 | 
			
		||||
  if test -f "$tmpdepfile"; then
 | 
			
		||||
    # Each line is of the form 'foo.o: dependency.h'.
 | 
			
		||||
    # Do two passes, one to just change these to
 | 
			
		||||
    #   $object: dependency.h
 | 
			
		||||
    # and one to simply output
 | 
			
		||||
    #   dependency.h:
 | 
			
		||||
    # which is needed to avoid the deleted-header problem.
 | 
			
		||||
    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
 | 
			
		||||
      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
 | 
			
		||||
    } > "$depfile"
 | 
			
		||||
    rm -f "$tmpdepfile"
 | 
			
		||||
  else
 | 
			
		||||
    make_dummy_depfile
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# A tabulation character.
 | 
			
		||||
tab='	'
 | 
			
		||||
# A newline character.
 | 
			
		||||
nl='
 | 
			
		||||
'
 | 
			
		||||
# Character ranges might be problematic outside the C locale.
 | 
			
		||||
# These definitions help.
 | 
			
		||||
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
 | 
			
		||||
lower=abcdefghijklmnopqrstuvwxyz
 | 
			
		||||
digits=0123456789
 | 
			
		||||
alpha=${upper}${lower}
 | 
			
		||||
 | 
			
		||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
 | 
			
		||||
  echo "depcomp: Variables source, object and depmode must be set" 1>&2
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
 | 
			
		||||
depfile=${depfile-`echo "$object" |
 | 
			
		||||
  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
 | 
			
		||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
 | 
			
		||||
 | 
			
		||||
rm -f "$tmpdepfile"
 | 
			
		||||
 | 
			
		||||
# Avoid interferences from the environment.
 | 
			
		||||
gccflag= dashmflag=
 | 
			
		||||
 | 
			
		||||
# Some modes work just like other modes, but use different flags.  We
 | 
			
		||||
# parameterize here, but still list the modes in the big case below,
 | 
			
		||||
# to make depend.m4 easier to write.  Note that we *cannot* use a case
 | 
			
		||||
# here, because this file can only contain one case statement.
 | 
			
		||||
if test "$depmode" = hp; then
 | 
			
		||||
  # HP compiler uses -M and no extra arg.
 | 
			
		||||
  gccflag=-M
 | 
			
		||||
  depmode=gcc
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$depmode" = dashXmstdout; then
 | 
			
		||||
  # This is just like dashmstdout with a different argument.
 | 
			
		||||
  dashmflag=-xM
 | 
			
		||||
  depmode=dashmstdout
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
cygpath_u="cygpath -u -f -"
 | 
			
		||||
if test "$depmode" = msvcmsys; then
 | 
			
		||||
  # This is just like msvisualcpp but w/o cygpath translation.
 | 
			
		||||
  # Just convert the backslash-escaped backslashes to single forward
 | 
			
		||||
  # slashes to satisfy depend.m4
 | 
			
		||||
  cygpath_u='sed s,\\\\,/,g'
 | 
			
		||||
  depmode=msvisualcpp
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$depmode" = msvc7msys; then
 | 
			
		||||
  # This is just like msvc7 but w/o cygpath translation.
 | 
			
		||||
  # Just convert the backslash-escaped backslashes to single forward
 | 
			
		||||
  # slashes to satisfy depend.m4
 | 
			
		||||
  cygpath_u='sed s,\\\\,/,g'
 | 
			
		||||
  depmode=msvc7
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$depmode" = xlc; then
 | 
			
		||||
  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
 | 
			
		||||
  gccflag=-qmakedep=gcc,-MF
 | 
			
		||||
  depmode=gcc
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "$depmode" in
 | 
			
		||||
gcc3)
 | 
			
		||||
## gcc 3 implements dependency tracking that does exactly what
 | 
			
		||||
## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
 | 
			
		||||
## it if -MD -MP comes after the -MF stuff.  Hmm.
 | 
			
		||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
 | 
			
		||||
## the command line argument order; so add the flags where they
 | 
			
		||||
## appear in depend2.am.  Note that the slowdown incurred here
 | 
			
		||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
 | 
			
		||||
  for arg
 | 
			
		||||
  do
 | 
			
		||||
    case $arg in
 | 
			
		||||
    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
 | 
			
		||||
    *)  set fnord "$@" "$arg" ;;
 | 
			
		||||
    esac
 | 
			
		||||
    shift # fnord
 | 
			
		||||
    shift # $arg
 | 
			
		||||
  done
 | 
			
		||||
  "$@"
 | 
			
		||||
  stat=$?
 | 
			
		||||
  if test $stat -ne 0; then
 | 
			
		||||
    rm -f "$tmpdepfile"
 | 
			
		||||
    exit $stat
 | 
			
		||||
  fi
 | 
			
		||||
  mv "$tmpdepfile" "$depfile"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
gcc)
 | 
			
		||||
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
 | 
			
		||||
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
 | 
			
		||||
## (see the conditional assignment to $gccflag above).
 | 
			
		||||
## There are various ways to get dependency output from gcc.  Here's
 | 
			
		||||
## why we pick this rather obscure method:
 | 
			
		||||
## - Don't want to use -MD because we'd like the dependencies to end
 | 
			
		||||
##   up in a subdir.  Having to rename by hand is ugly.
 | 
			
		||||
##   (We might end up doing this anyway to support other compilers.)
 | 
			
		||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
 | 
			
		||||
##   -MM, not -M (despite what the docs say).  Also, it might not be
 | 
			
		||||
##   supported by the other compilers which use the 'gcc' depmode.
 | 
			
		||||
## - Using -M directly means running the compiler twice (even worse
 | 
			
		||||
##   than renaming).
 | 
			
		||||
  if test -z "$gccflag"; then
 | 
			
		||||
    gccflag=-MD,
 | 
			
		||||
  fi
 | 
			
		||||
  "$@" -Wp,"$gccflag$tmpdepfile"
 | 
			
		||||
  stat=$?
 | 
			
		||||
  if test $stat -ne 0; then
 | 
			
		||||
    rm -f "$tmpdepfile"
 | 
			
		||||
    exit $stat
 | 
			
		||||
  fi
 | 
			
		||||
  rm -f "$depfile"
 | 
			
		||||
  echo "$object : \\" > "$depfile"
 | 
			
		||||
  # The second -e expression handles DOS-style file names with drive
 | 
			
		||||
  # letters.
 | 
			
		||||
  sed -e 's/^[^:]*: / /' \
 | 
			
		||||
      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
 | 
			
		||||
## This next piece of magic avoids the "deleted header file" problem.
 | 
			
		||||
## The problem is that when a header file which appears in a .P file
 | 
			
		||||
## is deleted, the dependency causes make to die (because there is
 | 
			
		||||
## typically no way to rebuild the header).  We avoid this by adding
 | 
			
		||||
## dummy dependencies for each header file.  Too bad gcc doesn't do
 | 
			
		||||
## this for us directly.
 | 
			
		||||
## Some versions of gcc put a space before the ':'.  On the theory
 | 
			
		||||
## that the space means something, we add a space to the output as
 | 
			
		||||
## well.  hp depmode also adds that space, but also prefixes the VPATH
 | 
			
		||||
## to the object.  Take care to not repeat it in the output.
 | 
			
		||||
## Some versions of the HPUX 10.20 sed can't process this invocation
 | 
			
		||||
## correctly.  Breaking it into two sed invocations is a workaround.
 | 
			
		||||
  tr ' ' "$nl" < "$tmpdepfile" \
 | 
			
		||||
    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
 | 
			
		||||
    | sed -e 's/$/ :/' >> "$depfile"
 | 
			
		||||
  rm -f "$tmpdepfile"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
hp)
 | 
			
		||||
  # This case exists only to let depend.m4 do its work.  It works by
 | 
			
		||||
  # looking at the text of this script.  This case will never be run,
 | 
			
		||||
  # since it is checked for above.
 | 
			
		||||
  exit 1
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
sgi)
 | 
			
		||||
  if test "$libtool" = yes; then
 | 
			
		||||
    "$@" "-Wp,-MDupdate,$tmpdepfile"
 | 
			
		||||
  else
 | 
			
		||||
    "$@" -MDupdate "$tmpdepfile"
 | 
			
		||||
  fi
 | 
			
		||||
  stat=$?
 | 
			
		||||
  if test $stat -ne 0; then
 | 
			
		||||
    rm -f "$tmpdepfile"
 | 
			
		||||
    exit $stat
 | 
			
		||||
  fi
 | 
			
		||||
  rm -f "$depfile"
 | 
			
		||||
 | 
			
		||||
  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
 | 
			
		||||
    echo "$object : \\" > "$depfile"
 | 
			
		||||
    # Clip off the initial element (the dependent).  Don't try to be
 | 
			
		||||
    # clever and replace this with sed code, as IRIX sed won't handle
 | 
			
		||||
    # lines with more than a fixed number of characters (4096 in
 | 
			
		||||
    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
 | 
			
		||||
    # the IRIX cc adds comments like '#:fec' to the end of the
 | 
			
		||||
    # dependency line.
 | 
			
		||||
    tr ' ' "$nl" < "$tmpdepfile" \
 | 
			
		||||
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
 | 
			
		||||
      | tr "$nl" ' ' >> "$depfile"
 | 
			
		||||
    echo >> "$depfile"
 | 
			
		||||
    # The second pass generates a dummy entry for each header file.
 | 
			
		||||
    tr ' ' "$nl" < "$tmpdepfile" \
 | 
			
		||||
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
 | 
			
		||||
      >> "$depfile"
 | 
			
		||||
  else
 | 
			
		||||
    make_dummy_depfile
 | 
			
		||||
  fi
 | 
			
		||||
  rm -f "$tmpdepfile"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
xlc)
 | 
			
		||||
  # This case exists only to let depend.m4 do its work.  It works by
 | 
			
		||||
  # looking at the text of this script.  This case will never be run,
 | 
			
		||||
  # since it is checked for above.
 | 
			
		||||
  exit 1
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
aix)
 | 
			
		||||
  # The C for AIX Compiler uses -M and outputs the dependencies
 | 
			
		||||
  # in a .u file.  In older versions, this file always lives in the
 | 
			
		||||
  # current directory.  Also, the AIX compiler puts '$object:' at the
 | 
			
		||||
  # start of each line; $object doesn't have directory information.
 | 
			
		||||
  # Version 6 uses the directory in both cases.
 | 
			
		||||
  set_dir_from "$object"
 | 
			
		||||
  set_base_from "$object"
 | 
			
		||||
  if test "$libtool" = yes; then
 | 
			
		||||
    tmpdepfile1=$dir$base.u
 | 
			
		||||
    tmpdepfile2=$base.u
 | 
			
		||||
    tmpdepfile3=$dir.libs/$base.u
 | 
			
		||||
    "$@" -Wc,-M
 | 
			
		||||
  else
 | 
			
		||||
    tmpdepfile1=$dir$base.u
 | 
			
		||||
    tmpdepfile2=$dir$base.u
 | 
			
		||||
    tmpdepfile3=$dir$base.u
 | 
			
		||||
    "$@" -M
 | 
			
		||||
  fi
 | 
			
		||||
  stat=$?
 | 
			
		||||
  if test $stat -ne 0; then
 | 
			
		||||
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
 | 
			
		||||
    exit $stat
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
 | 
			
		||||
  do
 | 
			
		||||
    test -f "$tmpdepfile" && break
 | 
			
		||||
  done
 | 
			
		||||
  aix_post_process_depfile
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
tcc)
 | 
			
		||||
  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
 | 
			
		||||
  # FIXME: That version still under development at the moment of writing.
 | 
			
		||||
  #        Make that this statement remains true also for stable, released
 | 
			
		||||
  #        versions.
 | 
			
		||||
  # It will wrap lines (doesn't matter whether long or short) with a
 | 
			
		||||
  # trailing '\', as in:
 | 
			
		||||
  #
 | 
			
		||||
  #   foo.o : \
 | 
			
		||||
  #    foo.c \
 | 
			
		||||
  #    foo.h \
 | 
			
		||||
  #
 | 
			
		||||
  # It will put a trailing '\' even on the last line, and will use leading
 | 
			
		||||
  # spaces rather than leading tabs (at least since its commit 0394caf7
 | 
			
		||||
  # "Emit spaces for -MD").
 | 
			
		||||
  "$@" -MD -MF "$tmpdepfile"
 | 
			
		||||
  stat=$?
 | 
			
		||||
  if test $stat -ne 0; then
 | 
			
		||||
    rm -f "$tmpdepfile"
 | 
			
		||||
    exit $stat
 | 
			
		||||
  fi
 | 
			
		||||
  rm -f "$depfile"
 | 
			
		||||
  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
 | 
			
		||||
  # We have to change lines of the first kind to '$object: \'.
 | 
			
		||||
  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
 | 
			
		||||
  # And for each line of the second kind, we have to emit a 'dep.h:'
 | 
			
		||||
  # dummy dependency, to avoid the deleted-header problem.
 | 
			
		||||
  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
 | 
			
		||||
  rm -f "$tmpdepfile"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
## The order of this option in the case statement is important, since the
 | 
			
		||||
## shell code in configure will try each of these formats in the order
 | 
			
		||||
## listed in this file.  A plain '-MD' option would be understood by many
 | 
			
		||||
## compilers, so we must ensure this comes after the gcc and icc options.
 | 
			
		||||
pgcc)
 | 
			
		||||
  # Portland's C compiler understands '-MD'.
 | 
			
		||||
  # Will always output deps to 'file.d' where file is the root name of the
 | 
			
		||||
  # source file under compilation, even if file resides in a subdirectory.
 | 
			
		||||
  # The object file name does not affect the name of the '.d' file.
 | 
			
		||||
  # pgcc 10.2 will output
 | 
			
		||||
  #    foo.o: sub/foo.c sub/foo.h
 | 
			
		||||
  # and will wrap long lines using '\' :
 | 
			
		||||
  #    foo.o: sub/foo.c ... \
 | 
			
		||||
  #     sub/foo.h ... \
 | 
			
		||||
  #     ...
 | 
			
		||||
  set_dir_from "$object"
 | 
			
		||||
  # Use the source, not the object, to determine the base name, since
 | 
			
		||||
  # that's sadly what pgcc will do too.
 | 
			
		||||
  set_base_from "$source"
 | 
			
		||||
  tmpdepfile=$base.d
 | 
			
		||||
 | 
			
		||||
  # For projects that build the same source file twice into different object
 | 
			
		||||
  # files, the pgcc approach of using the *source* file root name can cause
 | 
			
		||||
  # problems in parallel builds.  Use a locking strategy to avoid stomping on
 | 
			
		||||
  # the same $tmpdepfile.
 | 
			
		||||
  lockdir=$base.d-lock
 | 
			
		||||
  trap "
 | 
			
		||||
    echo '$0: caught signal, cleaning up...' >&2
 | 
			
		||||
    rmdir '$lockdir'
 | 
			
		||||
    exit 1
 | 
			
		||||
  " 1 2 13 15
 | 
			
		||||
  numtries=100
 | 
			
		||||
  i=$numtries
 | 
			
		||||
  while test $i -gt 0; do
 | 
			
		||||
    # mkdir is a portable test-and-set.
 | 
			
		||||
    if mkdir "$lockdir" 2>/dev/null; then
 | 
			
		||||
      # This process acquired the lock.
 | 
			
		||||
      "$@" -MD
 | 
			
		||||
      stat=$?
 | 
			
		||||
      # Release the lock.
 | 
			
		||||
      rmdir "$lockdir"
 | 
			
		||||
      break
 | 
			
		||||
    else
 | 
			
		||||
      # If the lock is being held by a different process, wait
 | 
			
		||||
      # until the winning process is done or we timeout.
 | 
			
		||||
      while test -d "$lockdir" && test $i -gt 0; do
 | 
			
		||||
        sleep 1
 | 
			
		||||
        i=`expr $i - 1`
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
    i=`expr $i - 1`
 | 
			
		||||
  done
 | 
			
		||||
  trap - 1 2 13 15
 | 
			
		||||
  if test $i -le 0; then
 | 
			
		||||
    echo "$0: failed to acquire lock after $numtries attempts" >&2
 | 
			
		||||
    echo "$0: check lockdir '$lockdir'" >&2
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if test $stat -ne 0; then
 | 
			
		||||
    rm -f "$tmpdepfile"
 | 
			
		||||
    exit $stat
 | 
			
		||||
  fi
 | 
			
		||||
  rm -f "$depfile"
 | 
			
		||||
  # Each line is of the form `foo.o: dependent.h',
 | 
			
		||||
  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
 | 
			
		||||
  # Do two passes, one to just change these to
 | 
			
		||||
  # `$object: dependent.h' and one to simply `dependent.h:'.
 | 
			
		||||
  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
 | 
			
		||||
  # Some versions of the HPUX 10.20 sed can't process this invocation
 | 
			
		||||
  # correctly.  Breaking it into two sed invocations is a workaround.
 | 
			
		||||
  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
 | 
			
		||||
    | sed -e 's/$/ :/' >> "$depfile"
 | 
			
		||||
  rm -f "$tmpdepfile"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
hp2)
 | 
			
		||||
  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
 | 
			
		||||
  # compilers, which have integrated preprocessors.  The correct option
 | 
			
		||||
  # to use with these is +Maked; it writes dependencies to a file named
 | 
			
		||||
  # 'foo.d', which lands next to the object file, wherever that
 | 
			
		||||
  # happens to be.
 | 
			
		||||
  # Much of this is similar to the tru64 case; see comments there.
 | 
			
		||||
  set_dir_from  "$object"
 | 
			
		||||
  set_base_from "$object"
 | 
			
		||||
  if test "$libtool" = yes; then
 | 
			
		||||
    tmpdepfile1=$dir$base.d
 | 
			
		||||
    tmpdepfile2=$dir.libs/$base.d
 | 
			
		||||
    "$@" -Wc,+Maked
 | 
			
		||||
  else
 | 
			
		||||
    tmpdepfile1=$dir$base.d
 | 
			
		||||
    tmpdepfile2=$dir$base.d
 | 
			
		||||
    "$@" +Maked
 | 
			
		||||
  fi
 | 
			
		||||
  stat=$?
 | 
			
		||||
  if test $stat -ne 0; then
 | 
			
		||||
     rm -f "$tmpdepfile1" "$tmpdepfile2"
 | 
			
		||||
     exit $stat
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
 | 
			
		||||
  do
 | 
			
		||||
    test -f "$tmpdepfile" && break
 | 
			
		||||
  done
 | 
			
		||||
  if test -f "$tmpdepfile"; then
 | 
			
		||||
    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
 | 
			
		||||
    # Add 'dependent.h:' lines.
 | 
			
		||||
    sed -ne '2,${
 | 
			
		||||
               s/^ *//
 | 
			
		||||
               s/ \\*$//
 | 
			
		||||
               s/$/:/
 | 
			
		||||
               p
 | 
			
		||||
             }' "$tmpdepfile" >> "$depfile"
 | 
			
		||||
  else
 | 
			
		||||
    make_dummy_depfile
 | 
			
		||||
  fi
 | 
			
		||||
  rm -f "$tmpdepfile" "$tmpdepfile2"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
tru64)
 | 
			
		||||
  # The Tru64 compiler uses -MD to generate dependencies as a side
 | 
			
		||||
  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
 | 
			
		||||
  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
 | 
			
		||||
  # dependencies in 'foo.d' instead, so we check for that too.
 | 
			
		||||
  # Subdirectories are respected.
 | 
			
		||||
  set_dir_from  "$object"
 | 
			
		||||
  set_base_from "$object"
 | 
			
		||||
 | 
			
		||||
  if test "$libtool" = yes; then
 | 
			
		||||
    # Libtool generates 2 separate objects for the 2 libraries.  These
 | 
			
		||||
    # two compilations output dependencies in $dir.libs/$base.o.d and
 | 
			
		||||
    # in $dir$base.o.d.  We have to check for both files, because
 | 
			
		||||
    # one of the two compilations can be disabled.  We should prefer
 | 
			
		||||
    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
 | 
			
		||||
    # automatically cleaned when .libs/ is deleted, while ignoring
 | 
			
		||||
    # the former would cause a distcleancheck panic.
 | 
			
		||||
    tmpdepfile1=$dir$base.o.d          # libtool 1.5
 | 
			
		||||
    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
 | 
			
		||||
    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
 | 
			
		||||
    "$@" -Wc,-MD
 | 
			
		||||
  else
 | 
			
		||||
    tmpdepfile1=$dir$base.d
 | 
			
		||||
    tmpdepfile2=$dir$base.d
 | 
			
		||||
    tmpdepfile3=$dir$base.d
 | 
			
		||||
    "$@" -MD
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  stat=$?
 | 
			
		||||
  if test $stat -ne 0; then
 | 
			
		||||
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
 | 
			
		||||
    exit $stat
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
 | 
			
		||||
  do
 | 
			
		||||
    test -f "$tmpdepfile" && break
 | 
			
		||||
  done
 | 
			
		||||
  # Same post-processing that is required for AIX mode.
 | 
			
		||||
  aix_post_process_depfile
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
msvc7)
 | 
			
		||||
  if test "$libtool" = yes; then
 | 
			
		||||
    showIncludes=-Wc,-showIncludes
 | 
			
		||||
  else
 | 
			
		||||
    showIncludes=-showIncludes
 | 
			
		||||
  fi
 | 
			
		||||
  "$@" $showIncludes > "$tmpdepfile"
 | 
			
		||||
  stat=$?
 | 
			
		||||
  grep -v '^Note: including file: ' "$tmpdepfile"
 | 
			
		||||
  if test $stat -ne 0; then
 | 
			
		||||
    rm -f "$tmpdepfile"
 | 
			
		||||
    exit $stat
 | 
			
		||||
  fi
 | 
			
		||||
  rm -f "$depfile"
 | 
			
		||||
  echo "$object : \\" > "$depfile"
 | 
			
		||||
  # The first sed program below extracts the file names and escapes
 | 
			
		||||
  # backslashes for cygpath.  The second sed program outputs the file
 | 
			
		||||
  # name when reading, but also accumulates all include files in the
 | 
			
		||||
  # hold buffer in order to output them again at the end.  This only
 | 
			
		||||
  # works with sed implementations that can handle large buffers.
 | 
			
		||||
  sed < "$tmpdepfile" -n '
 | 
			
		||||
/^Note: including file:  *\(.*\)/ {
 | 
			
		||||
  s//\1/
 | 
			
		||||
  s/\\/\\\\/g
 | 
			
		||||
  p
 | 
			
		||||
}' | $cygpath_u | sort -u | sed -n '
 | 
			
		||||
s/ /\\ /g
 | 
			
		||||
s/\(.*\)/'"$tab"'\1 \\/p
 | 
			
		||||
s/.\(.*\) \\/\1:/
 | 
			
		||||
H
 | 
			
		||||
$ {
 | 
			
		||||
  s/.*/'"$tab"'/
 | 
			
		||||
  G
 | 
			
		||||
  p
 | 
			
		||||
}' >> "$depfile"
 | 
			
		||||
  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
 | 
			
		||||
  rm -f "$tmpdepfile"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
msvc7msys)
 | 
			
		||||
  # This case exists only to let depend.m4 do its work.  It works by
 | 
			
		||||
  # looking at the text of this script.  This case will never be run,
 | 
			
		||||
  # since it is checked for above.
 | 
			
		||||
  exit 1
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
#nosideeffect)
 | 
			
		||||
  # This comment above is used by automake to tell side-effect
 | 
			
		||||
  # dependency tracking mechanisms from slower ones.
 | 
			
		||||
 | 
			
		||||
dashmstdout)
 | 
			
		||||
  # Important note: in order to support this mode, a compiler *must*
 | 
			
		||||
  # always write the preprocessed file to stdout, regardless of -o.
 | 
			
		||||
  "$@" || exit $?
 | 
			
		||||
 | 
			
		||||
  # Remove the call to Libtool.
 | 
			
		||||
  if test "$libtool" = yes; then
 | 
			
		||||
    while test "X$1" != 'X--mode=compile'; do
 | 
			
		||||
      shift
 | 
			
		||||
    done
 | 
			
		||||
    shift
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Remove '-o $object'.
 | 
			
		||||
  IFS=" "
 | 
			
		||||
  for arg
 | 
			
		||||
  do
 | 
			
		||||
    case $arg in
 | 
			
		||||
    -o)
 | 
			
		||||
      shift
 | 
			
		||||
      ;;
 | 
			
		||||
    $object)
 | 
			
		||||
      shift
 | 
			
		||||
      ;;
 | 
			
		||||
    *)
 | 
			
		||||
      set fnord "$@" "$arg"
 | 
			
		||||
      shift # fnord
 | 
			
		||||
      shift # $arg
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  test -z "$dashmflag" && dashmflag=-M
 | 
			
		||||
  # Require at least two characters before searching for ':'
 | 
			
		||||
  # in the target name.  This is to cope with DOS-style filenames:
 | 
			
		||||
  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
 | 
			
		||||
  "$@" $dashmflag |
 | 
			
		||||
    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
 | 
			
		||||
  rm -f "$depfile"
 | 
			
		||||
  cat < "$tmpdepfile" > "$depfile"
 | 
			
		||||
  # Some versions of the HPUX 10.20 sed can't process this sed invocation
 | 
			
		||||
  # correctly.  Breaking it into two sed invocations is a workaround.
 | 
			
		||||
  tr ' ' "$nl" < "$tmpdepfile" \
 | 
			
		||||
    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
 | 
			
		||||
    | sed -e 's/$/ :/' >> "$depfile"
 | 
			
		||||
  rm -f "$tmpdepfile"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
dashXmstdout)
 | 
			
		||||
  # This case only exists to satisfy depend.m4.  It is never actually
 | 
			
		||||
  # run, as this mode is specially recognized in the preamble.
 | 
			
		||||
  exit 1
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
makedepend)
 | 
			
		||||
  "$@" || exit $?
 | 
			
		||||
  # Remove any Libtool call
 | 
			
		||||
  if test "$libtool" = yes; then
 | 
			
		||||
    while test "X$1" != 'X--mode=compile'; do
 | 
			
		||||
      shift
 | 
			
		||||
    done
 | 
			
		||||
    shift
 | 
			
		||||
  fi
 | 
			
		||||
  # X makedepend
 | 
			
		||||
  shift
 | 
			
		||||
  cleared=no eat=no
 | 
			
		||||
  for arg
 | 
			
		||||
  do
 | 
			
		||||
    case $cleared in
 | 
			
		||||
    no)
 | 
			
		||||
      set ""; shift
 | 
			
		||||
      cleared=yes ;;
 | 
			
		||||
    esac
 | 
			
		||||
    if test $eat = yes; then
 | 
			
		||||
      eat=no
 | 
			
		||||
      continue
 | 
			
		||||
    fi
 | 
			
		||||
    case "$arg" in
 | 
			
		||||
    -D*|-I*)
 | 
			
		||||
      set fnord "$@" "$arg"; shift ;;
 | 
			
		||||
    # Strip any option that makedepend may not understand.  Remove
 | 
			
		||||
    # the object too, otherwise makedepend will parse it as a source file.
 | 
			
		||||
    -arch)
 | 
			
		||||
      eat=yes ;;
 | 
			
		||||
    -*|$object)
 | 
			
		||||
      ;;
 | 
			
		||||
    *)
 | 
			
		||||
      set fnord "$@" "$arg"; shift ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
  obj_suffix=`echo "$object" | sed 's/^.*\././'`
 | 
			
		||||
  touch "$tmpdepfile"
 | 
			
		||||
  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
 | 
			
		||||
  rm -f "$depfile"
 | 
			
		||||
  # makedepend may prepend the VPATH from the source file name to the object.
 | 
			
		||||
  # No need to regex-escape $object, excess matching of '.' is harmless.
 | 
			
		||||
  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
 | 
			
		||||
  # Some versions of the HPUX 10.20 sed can't process the last invocation
 | 
			
		||||
  # correctly.  Breaking it into two sed invocations is a workaround.
 | 
			
		||||
  sed '1,2d' "$tmpdepfile" \
 | 
			
		||||
    | tr ' ' "$nl" \
 | 
			
		||||
    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
 | 
			
		||||
    | sed -e 's/$/ :/' >> "$depfile"
 | 
			
		||||
  rm -f "$tmpdepfile" "$tmpdepfile".bak
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
cpp)
 | 
			
		||||
  # Important note: in order to support this mode, a compiler *must*
 | 
			
		||||
  # always write the preprocessed file to stdout.
 | 
			
		||||
  "$@" || exit $?
 | 
			
		||||
 | 
			
		||||
  # Remove the call to Libtool.
 | 
			
		||||
  if test "$libtool" = yes; then
 | 
			
		||||
    while test "X$1" != 'X--mode=compile'; do
 | 
			
		||||
      shift
 | 
			
		||||
    done
 | 
			
		||||
    shift
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Remove '-o $object'.
 | 
			
		||||
  IFS=" "
 | 
			
		||||
  for arg
 | 
			
		||||
  do
 | 
			
		||||
    case $arg in
 | 
			
		||||
    -o)
 | 
			
		||||
      shift
 | 
			
		||||
      ;;
 | 
			
		||||
    $object)
 | 
			
		||||
      shift
 | 
			
		||||
      ;;
 | 
			
		||||
    *)
 | 
			
		||||
      set fnord "$@" "$arg"
 | 
			
		||||
      shift # fnord
 | 
			
		||||
      shift # $arg
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  "$@" -E \
 | 
			
		||||
    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
 | 
			
		||||
             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
 | 
			
		||||
    | sed '$ s: \\$::' > "$tmpdepfile"
 | 
			
		||||
  rm -f "$depfile"
 | 
			
		||||
  echo "$object : \\" > "$depfile"
 | 
			
		||||
  cat < "$tmpdepfile" >> "$depfile"
 | 
			
		||||
  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
 | 
			
		||||
  rm -f "$tmpdepfile"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
msvisualcpp)
 | 
			
		||||
  # Important note: in order to support this mode, a compiler *must*
 | 
			
		||||
  # always write the preprocessed file to stdout.
 | 
			
		||||
  "$@" || exit $?
 | 
			
		||||
 | 
			
		||||
  # Remove the call to Libtool.
 | 
			
		||||
  if test "$libtool" = yes; then
 | 
			
		||||
    while test "X$1" != 'X--mode=compile'; do
 | 
			
		||||
      shift
 | 
			
		||||
    done
 | 
			
		||||
    shift
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  IFS=" "
 | 
			
		||||
  for arg
 | 
			
		||||
  do
 | 
			
		||||
    case "$arg" in
 | 
			
		||||
    -o)
 | 
			
		||||
      shift
 | 
			
		||||
      ;;
 | 
			
		||||
    $object)
 | 
			
		||||
      shift
 | 
			
		||||
      ;;
 | 
			
		||||
    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
 | 
			
		||||
        set fnord "$@"
 | 
			
		||||
        shift
 | 
			
		||||
        shift
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        set fnord "$@" "$arg"
 | 
			
		||||
        shift
 | 
			
		||||
        shift
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
  "$@" -E 2>/dev/null |
 | 
			
		||||
  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
 | 
			
		||||
  rm -f "$depfile"
 | 
			
		||||
  echo "$object : \\" > "$depfile"
 | 
			
		||||
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
 | 
			
		||||
  echo "$tab" >> "$depfile"
 | 
			
		||||
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
 | 
			
		||||
  rm -f "$tmpdepfile"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
msvcmsys)
 | 
			
		||||
  # This case exists only to let depend.m4 do its work.  It works by
 | 
			
		||||
  # looking at the text of this script.  This case will never be run,
 | 
			
		||||
  # since it is checked for above.
 | 
			
		||||
  exit 1
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
none)
 | 
			
		||||
  exec "$@"
 | 
			
		||||
  ;;
 | 
			
		||||
 | 
			
		||||
*)
 | 
			
		||||
  echo "Unknown depmode $depmode" 1>&2
 | 
			
		||||
  exit 1
 | 
			
		||||
  ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
 | 
			
		||||
# Local Variables:
 | 
			
		||||
# mode: shell-script
 | 
			
		||||
# sh-indentation: 2
 | 
			
		||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
 | 
			
		||||
# time-stamp-start: "scriptversion="
 | 
			
		||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
 | 
			
		||||
# time-stamp-time-zone: "UTC"
 | 
			
		||||
# time-stamp-end: "; # UTC"
 | 
			
		||||
# End:
 | 
			
		||||
							
								
								
									
										595
									
								
								uuid/gen_uuid.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										595
									
								
								uuid/gen_uuid.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,595 @@
 | 
			
		||||
/*
 | 
			
		||||
 * gen_uuid.c --- generate a DCE-compatible uuid
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997, 1998, 1999 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Force inclusion of SVID stuff since we need it if we're compiling in
 | 
			
		||||
 * gcc-wall wall mode
 | 
			
		||||
 */
 | 
			
		||||
#define _SVID_SOURCE
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#define _WIN32_WINNT 0x0500
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#define UUID MYUUID
 | 
			
		||||
#endif
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_STDLIB_H
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#ifdef HAVE_SYS_FILE_H
 | 
			
		||||
#include <sys/file.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_IOCTL_H
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_UN_H
 | 
			
		||||
#include <sys/un.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKIO_H
 | 
			
		||||
#include <sys/sockio.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NET_IF_H
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NET_IF_DL_H
 | 
			
		||||
#include <net/if_dl.h>
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(__linux__) && defined(HAVE_SYS_SYSCALL_H)
 | 
			
		||||
#include <sys/syscall.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "all-io.h"
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
#include "uuidd.h"
 | 
			
		||||
#include "randutils.h"
 | 
			
		||||
#include "c.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_TLS
 | 
			
		||||
#define THREAD_LOCAL static __thread
 | 
			
		||||
#else
 | 
			
		||||
#define THREAD_LOCAL static
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef LOCK_EX
 | 
			
		||||
/* flock() replacement */
 | 
			
		||||
#define LOCK_EX 1
 | 
			
		||||
#define LOCK_SH 2
 | 
			
		||||
#define LOCK_UN 3
 | 
			
		||||
#define LOCK_NB 4
 | 
			
		||||
 | 
			
		||||
static int flock(int fd, int op)
 | 
			
		||||
{
 | 
			
		||||
    int rc = 0;
 | 
			
		||||
 | 
			
		||||
#if defined(F_SETLK) && defined(F_SETLKW)
 | 
			
		||||
    struct flock fl = {0};
 | 
			
		||||
 | 
			
		||||
    switch (op & (LOCK_EX|LOCK_SH|LOCK_UN)) {
 | 
			
		||||
    case LOCK_EX:
 | 
			
		||||
        fl.l_type = F_WRLCK;
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    case LOCK_SH:
 | 
			
		||||
        fl.l_type = F_RDLCK;
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    case LOCK_UN:
 | 
			
		||||
        fl.l_type = F_UNLCK;
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
        errno = EINVAL;
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fl.l_whence = SEEK_SET;
 | 
			
		||||
    rc = fcntl (fd, op & LOCK_NB ? F_SETLK : F_SETLKW, &fl);
 | 
			
		||||
 | 
			
		||||
    if (rc && (errno == EAGAIN))
 | 
			
		||||
        errno = EWOULDBLOCK;
 | 
			
		||||
#endif /* defined(F_SETLK) && defined(F_SETLKW)  */
 | 
			
		||||
 | 
			
		||||
    return rc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* LOCK_EX */
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
static void gettimeofday (struct timeval *tv, void *dummy)
 | 
			
		||||
{
 | 
			
		||||
	FILETIME	ftime;
 | 
			
		||||
	uint64_t	n;
 | 
			
		||||
 | 
			
		||||
	GetSystemTimeAsFileTime (&ftime);
 | 
			
		||||
	n = (((uint64_t) ftime.dwHighDateTime << 32)
 | 
			
		||||
	     + (uint64_t) ftime.dwLowDateTime);
 | 
			
		||||
	if (n) {
 | 
			
		||||
		n /= 10;
 | 
			
		||||
		n -= ((369 * 365 + 89) * (uint64_t) 86400) * 1000000;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tv->tv_sec = n / 1000000;
 | 
			
		||||
	tv->tv_usec = n % 1000000;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int getuid (void)
 | 
			
		||||
{
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Get the ethernet hardware address, if we can find it...
 | 
			
		||||
 *
 | 
			
		||||
 * XXX for a windows version, probably should use GetAdaptersInfo:
 | 
			
		||||
 * http://www.codeguru.com/cpp/i-n/network/networkinformation/article.php/c5451
 | 
			
		||||
 * commenting out get_node_id just to get gen_uuid to compile under windows
 | 
			
		||||
 * is not the right way to go!
 | 
			
		||||
 */
 | 
			
		||||
static int get_node_id(unsigned char *node_id)
 | 
			
		||||
{
 | 
			
		||||
#ifdef HAVE_NET_IF_H
 | 
			
		||||
	int		sd;
 | 
			
		||||
	struct ifreq	ifr, *ifrp;
 | 
			
		||||
	struct ifconf	ifc;
 | 
			
		||||
	char buf[1024];
 | 
			
		||||
	int		n, i;
 | 
			
		||||
	unsigned char	*a;
 | 
			
		||||
#ifdef HAVE_NET_IF_DL_H
 | 
			
		||||
	struct sockaddr_dl *sdlp;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * BSD 4.4 defines the size of an ifreq to be
 | 
			
		||||
 * max(sizeof(ifreq), sizeof(ifreq.ifr_name)+ifreq.ifr_addr.sa_len
 | 
			
		||||
 * However, under earlier systems, sa_len isn't present, so the size is
 | 
			
		||||
 * just sizeof(struct ifreq)
 | 
			
		||||
 */
 | 
			
		||||
#ifdef HAVE_SA_LEN
 | 
			
		||||
#define ifreq_size(i) max(sizeof(struct ifreq),\
 | 
			
		||||
     sizeof((i).ifr_name)+(i).ifr_addr.sa_len)
 | 
			
		||||
#else
 | 
			
		||||
#define ifreq_size(i) sizeof(struct ifreq)
 | 
			
		||||
#endif /* HAVE_SA_LEN */
 | 
			
		||||
 | 
			
		||||
	sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
 | 
			
		||||
	if (sd < 0) {
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
	memset(buf, 0, sizeof(buf));
 | 
			
		||||
	ifc.ifc_len = sizeof(buf);
 | 
			
		||||
	ifc.ifc_buf = buf;
 | 
			
		||||
	if (ioctl (sd, SIOCGIFCONF, (char *)&ifc) < 0) {
 | 
			
		||||
		close(sd);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
	n = ifc.ifc_len;
 | 
			
		||||
	for (i = 0; i < n; i+= ifreq_size(*ifrp) ) {
 | 
			
		||||
		ifrp = (struct ifreq *)((char *) ifc.ifc_buf+i);
 | 
			
		||||
		strncpy(ifr.ifr_name, ifrp->ifr_name, IFNAMSIZ);
 | 
			
		||||
#ifdef SIOCGIFHWADDR
 | 
			
		||||
		if (ioctl(sd, SIOCGIFHWADDR, &ifr) < 0)
 | 
			
		||||
			continue;
 | 
			
		||||
		a = (unsigned char *) &ifr.ifr_hwaddr.sa_data;
 | 
			
		||||
#else
 | 
			
		||||
#ifdef SIOCGENADDR
 | 
			
		||||
		if (ioctl(sd, SIOCGENADDR, &ifr) < 0)
 | 
			
		||||
			continue;
 | 
			
		||||
		a = (unsigned char *) ifr.ifr_enaddr;
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_NET_IF_DL_H
 | 
			
		||||
		sdlp = (struct sockaddr_dl *) &ifrp->ifr_addr;
 | 
			
		||||
		if ((sdlp->sdl_family != AF_LINK) || (sdlp->sdl_alen != 6))
 | 
			
		||||
			continue;
 | 
			
		||||
		a = (unsigned char *) &sdlp->sdl_data[sdlp->sdl_nlen];
 | 
			
		||||
#else
 | 
			
		||||
		/*
 | 
			
		||||
		 * XXX we don't have a way of getting the hardware
 | 
			
		||||
		 * address
 | 
			
		||||
		 */
 | 
			
		||||
		close(sd);
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif /* HAVE_NET_IF_DL_H */
 | 
			
		||||
#endif /* SIOCGENADDR */
 | 
			
		||||
#endif /* SIOCGIFHWADDR */
 | 
			
		||||
		if (!a[0] && !a[1] && !a[2] && !a[3] && !a[4] && !a[5])
 | 
			
		||||
			continue;
 | 
			
		||||
		if (node_id) {
 | 
			
		||||
			memcpy(node_id, a, 6);
 | 
			
		||||
			close(sd);
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	close(sd);
 | 
			
		||||
#endif
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Assume that the gettimeofday() has microsecond granularity */
 | 
			
		||||
#define MAX_ADJUSTMENT 10
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Get clock from global sequence clock counter.
 | 
			
		||||
 *
 | 
			
		||||
 * Return -1 if the clock counter could not be opened/locked (in this case
 | 
			
		||||
 * pseudorandom value is returned in @ret_clock_seq), otherwise return 0.
 | 
			
		||||
 */
 | 
			
		||||
static int get_clock(uint32_t *clock_high, uint32_t *clock_low,
 | 
			
		||||
		     uint16_t *ret_clock_seq, int *num)
 | 
			
		||||
{
 | 
			
		||||
	THREAD_LOCAL int		adjustment = 0;
 | 
			
		||||
	THREAD_LOCAL struct timeval	last = {0, 0};
 | 
			
		||||
	THREAD_LOCAL int		state_fd = -2;
 | 
			
		||||
	THREAD_LOCAL FILE		*state_f;
 | 
			
		||||
	THREAD_LOCAL uint16_t		clock_seq;
 | 
			
		||||
	struct timeval			tv;
 | 
			
		||||
	uint64_t			clock_reg;
 | 
			
		||||
	mode_t				save_umask;
 | 
			
		||||
	int				len;
 | 
			
		||||
	int				ret = 0;
 | 
			
		||||
 | 
			
		||||
	if (state_fd == -2) {
 | 
			
		||||
		save_umask = umask(0);
 | 
			
		||||
		state_fd = open(LIBUUID_CLOCK_FILE, O_RDWR|O_CREAT|O_CLOEXEC, 0660);
 | 
			
		||||
		(void) umask(save_umask);
 | 
			
		||||
		if (state_fd != -1) {
 | 
			
		||||
			state_f = fdopen(state_fd, "r+" UL_CLOEXECSTR);
 | 
			
		||||
			if (!state_f) {
 | 
			
		||||
				close(state_fd);
 | 
			
		||||
				state_fd = -1;
 | 
			
		||||
				ret = -1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			ret = -1;
 | 
			
		||||
	}
 | 
			
		||||
	if (state_fd >= 0) {
 | 
			
		||||
		rewind(state_f);
 | 
			
		||||
		while (flock(state_fd, LOCK_EX) < 0) {
 | 
			
		||||
			if ((errno == EAGAIN) || (errno == EINTR))
 | 
			
		||||
				continue;
 | 
			
		||||
			fclose(state_f);
 | 
			
		||||
			close(state_fd);
 | 
			
		||||
			state_fd = -1;
 | 
			
		||||
			ret = -1;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (state_fd >= 0) {
 | 
			
		||||
		unsigned int cl;
 | 
			
		||||
		unsigned long tv1, tv2;
 | 
			
		||||
		int a;
 | 
			
		||||
 | 
			
		||||
		if (fscanf(state_f, "clock: %04x tv: %lu %lu adj: %d\n",
 | 
			
		||||
			   &cl, &tv1, &tv2, &a) == 4) {
 | 
			
		||||
			clock_seq = cl & 0x3FFF;
 | 
			
		||||
			last.tv_sec = tv1;
 | 
			
		||||
			last.tv_usec = tv2;
 | 
			
		||||
			adjustment = a;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((last.tv_sec == 0) && (last.tv_usec == 0)) {
 | 
			
		||||
		random_get_bytes(&clock_seq, sizeof(clock_seq));
 | 
			
		||||
		clock_seq &= 0x3FFF;
 | 
			
		||||
		gettimeofday(&last, 0);
 | 
			
		||||
		last.tv_sec--;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
try_again:
 | 
			
		||||
	gettimeofday(&tv, 0);
 | 
			
		||||
	if ((tv.tv_sec < last.tv_sec) ||
 | 
			
		||||
	    ((tv.tv_sec == last.tv_sec) &&
 | 
			
		||||
	     (tv.tv_usec < last.tv_usec))) {
 | 
			
		||||
		clock_seq = (clock_seq+1) & 0x3FFF;
 | 
			
		||||
		adjustment = 0;
 | 
			
		||||
		last = tv;
 | 
			
		||||
	} else if ((tv.tv_sec == last.tv_sec) &&
 | 
			
		||||
	    (tv.tv_usec == last.tv_usec)) {
 | 
			
		||||
		if (adjustment >= MAX_ADJUSTMENT)
 | 
			
		||||
			goto try_again;
 | 
			
		||||
		adjustment++;
 | 
			
		||||
	} else {
 | 
			
		||||
		adjustment = 0;
 | 
			
		||||
		last = tv;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	clock_reg = tv.tv_usec*10 + adjustment;
 | 
			
		||||
	clock_reg += ((uint64_t) tv.tv_sec)*10000000;
 | 
			
		||||
	clock_reg += (((uint64_t) 0x01B21DD2) << 32) + 0x13814000;
 | 
			
		||||
 | 
			
		||||
	if (num && (*num > 1)) {
 | 
			
		||||
		adjustment += *num - 1;
 | 
			
		||||
		last.tv_usec += adjustment / 10;
 | 
			
		||||
		adjustment = adjustment % 10;
 | 
			
		||||
		last.tv_sec += last.tv_usec / 1000000;
 | 
			
		||||
		last.tv_usec = last.tv_usec % 1000000;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (state_fd >= 0) {
 | 
			
		||||
		rewind(state_f);
 | 
			
		||||
		len = fprintf(state_f,
 | 
			
		||||
			      "clock: %04x tv: %016lu %08lu adj: %08d\n",
 | 
			
		||||
			      clock_seq, last.tv_sec, last.tv_usec, adjustment);
 | 
			
		||||
		fflush(state_f);
 | 
			
		||||
		if (ftruncate(state_fd, len) < 0) {
 | 
			
		||||
			fprintf(state_f, "                   \n");
 | 
			
		||||
			fflush(state_f);
 | 
			
		||||
		}
 | 
			
		||||
		rewind(state_f);
 | 
			
		||||
		flock(state_fd, LOCK_UN);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	*clock_high = clock_reg >> 32;
 | 
			
		||||
	*clock_low = clock_reg;
 | 
			
		||||
	*ret_clock_seq = clock_seq;
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(HAVE_UUIDD) && defined(HAVE_SYS_UN_H)
 | 
			
		||||
/*
 | 
			
		||||
 * Try using the uuidd daemon to generate the UUID
 | 
			
		||||
 *
 | 
			
		||||
 * Returns 0 on success, non-zero on failure.
 | 
			
		||||
 */
 | 
			
		||||
static int get_uuid_via_daemon(int op, uuid_t out, int *num)
 | 
			
		||||
{
 | 
			
		||||
	char op_buf[64];
 | 
			
		||||
	int op_len;
 | 
			
		||||
	int s;
 | 
			
		||||
	ssize_t ret;
 | 
			
		||||
	int32_t reply_len = 0, expected = 16;
 | 
			
		||||
	struct sockaddr_un srv_addr;
 | 
			
		||||
 | 
			
		||||
	if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	srv_addr.sun_family = AF_UNIX;
 | 
			
		||||
	strcpy(srv_addr.sun_path, UUIDD_SOCKET_PATH);
 | 
			
		||||
 | 
			
		||||
	if (connect(s, (const struct sockaddr *) &srv_addr,
 | 
			
		||||
		    sizeof(struct sockaddr_un)) < 0)
 | 
			
		||||
		goto fail;
 | 
			
		||||
 | 
			
		||||
	op_buf[0] = op;
 | 
			
		||||
	op_len = 1;
 | 
			
		||||
	if (op == UUIDD_OP_BULK_TIME_UUID) {
 | 
			
		||||
		memcpy(op_buf+1, num, sizeof(*num));
 | 
			
		||||
		op_len += sizeof(*num);
 | 
			
		||||
		expected += sizeof(*num);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = write(s, op_buf, op_len);
 | 
			
		||||
	if (ret < 1)
 | 
			
		||||
		goto fail;
 | 
			
		||||
 | 
			
		||||
	ret = read_all(s, (char *) &reply_len, sizeof(reply_len));
 | 
			
		||||
	if (ret < 0)
 | 
			
		||||
		goto fail;
 | 
			
		||||
 | 
			
		||||
	if (reply_len != expected)
 | 
			
		||||
		goto fail;
 | 
			
		||||
 | 
			
		||||
	ret = read_all(s, op_buf, reply_len);
 | 
			
		||||
 | 
			
		||||
	if (op == UUIDD_OP_BULK_TIME_UUID)
 | 
			
		||||
		memcpy(op_buf+16, num, sizeof(int));
 | 
			
		||||
 | 
			
		||||
	memcpy(out, op_buf, 16);
 | 
			
		||||
 | 
			
		||||
	close(s);
 | 
			
		||||
	return ((ret == expected) ? 0 : -1);
 | 
			
		||||
 | 
			
		||||
fail:
 | 
			
		||||
	close(s);
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else /* !defined(HAVE_UUIDD) && defined(HAVE_SYS_UN_H) */
 | 
			
		||||
static int get_uuid_via_daemon(int op, uuid_t out, int *num)
 | 
			
		||||
{
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int __uuid_generate_time(uuid_t out, int *num)
 | 
			
		||||
{
 | 
			
		||||
	static unsigned char node_id[6];
 | 
			
		||||
	static int has_init = 0;
 | 
			
		||||
	struct uuid uu;
 | 
			
		||||
	uint32_t	clock_mid;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	if (!has_init) {
 | 
			
		||||
		if (get_node_id(node_id) <= 0) {
 | 
			
		||||
			random_get_bytes(node_id, 6);
 | 
			
		||||
			/*
 | 
			
		||||
			 * Set multicast bit, to prevent conflicts
 | 
			
		||||
			 * with IEEE 802 addresses obtained from
 | 
			
		||||
			 * network cards
 | 
			
		||||
			 */
 | 
			
		||||
			node_id[0] |= 0x01;
 | 
			
		||||
		}
 | 
			
		||||
		has_init = 1;
 | 
			
		||||
	}
 | 
			
		||||
	ret = get_clock(&clock_mid, &uu.time_low, &uu.clock_seq, num);
 | 
			
		||||
	uu.clock_seq |= 0x8000;
 | 
			
		||||
	uu.time_mid = (uint16_t) clock_mid;
 | 
			
		||||
	uu.time_hi_and_version = ((clock_mid >> 16) & 0x0FFF) | 0x1000;
 | 
			
		||||
	memcpy(uu.node, node_id, 6);
 | 
			
		||||
	uuid_pack(&uu, out);
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Generate time-based UUID and store it to @out
 | 
			
		||||
 *
 | 
			
		||||
 * Tries to guarantee uniqueness of the generated UUIDs by obtaining them from the uuidd daemon,
 | 
			
		||||
 * or, if uuidd is not usable, by using the global clock state counter (see get_clock()).
 | 
			
		||||
 * If neither of these is possible (e.g. because of insufficient permissions), it generates
 | 
			
		||||
 * the UUID anyway, but returns -1. Otherwise, returns 0.
 | 
			
		||||
 */
 | 
			
		||||
static int uuid_generate_time_generic(uuid_t out) {
 | 
			
		||||
#ifdef HAVE_TLS
 | 
			
		||||
	THREAD_LOCAL int		num = 0;
 | 
			
		||||
	THREAD_LOCAL struct uuid	uu;
 | 
			
		||||
	THREAD_LOCAL time_t		last_time = 0;
 | 
			
		||||
	time_t				now;
 | 
			
		||||
 | 
			
		||||
	if (num > 0) {
 | 
			
		||||
		now = time(0);
 | 
			
		||||
		if (now > last_time+1)
 | 
			
		||||
			num = 0;
 | 
			
		||||
	}
 | 
			
		||||
	if (num <= 0) {
 | 
			
		||||
		num = 1000;
 | 
			
		||||
		if (get_uuid_via_daemon(UUIDD_OP_BULK_TIME_UUID,
 | 
			
		||||
					out, &num) == 0) {
 | 
			
		||||
			last_time = time(0);
 | 
			
		||||
			uuid_unpack(out, &uu);
 | 
			
		||||
			num--;
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
		num = 0;
 | 
			
		||||
	}
 | 
			
		||||
	if (num > 0) {
 | 
			
		||||
		uu.time_low++;
 | 
			
		||||
		if (uu.time_low == 0) {
 | 
			
		||||
			uu.time_mid++;
 | 
			
		||||
			if (uu.time_mid == 0)
 | 
			
		||||
				uu.time_hi_and_version++;
 | 
			
		||||
		}
 | 
			
		||||
		num--;
 | 
			
		||||
		uuid_pack(&uu, out);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
#else
 | 
			
		||||
	if (get_uuid_via_daemon(UUIDD_OP_TIME_UUID, out, 0) == 0)
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return __uuid_generate_time(out, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Generate time-based UUID and store it to @out.
 | 
			
		||||
 *
 | 
			
		||||
 * Discards return value from uuid_generate_time_generic()
 | 
			
		||||
 */
 | 
			
		||||
void uuid_generate_time(uuid_t out)
 | 
			
		||||
{
 | 
			
		||||
	(void)uuid_generate_time_generic(out);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int uuid_generate_time_safe(uuid_t out)
 | 
			
		||||
{
 | 
			
		||||
	return uuid_generate_time_generic(out);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void __uuid_generate_random(uuid_t out, int *num)
 | 
			
		||||
{
 | 
			
		||||
	uuid_t	buf;
 | 
			
		||||
	struct uuid uu;
 | 
			
		||||
	int i, n;
 | 
			
		||||
 | 
			
		||||
	if (!num || !*num)
 | 
			
		||||
		n = 1;
 | 
			
		||||
	else
 | 
			
		||||
		n = *num;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < n; i++) {
 | 
			
		||||
		random_get_bytes(buf, sizeof(buf));
 | 
			
		||||
		uuid_unpack(buf, &uu);
 | 
			
		||||
 | 
			
		||||
		uu.clock_seq = (uu.clock_seq & 0x3FFF) | 0x8000;
 | 
			
		||||
		uu.time_hi_and_version = (uu.time_hi_and_version & 0x0FFF)
 | 
			
		||||
			| 0x4000;
 | 
			
		||||
		uuid_pack(&uu, out);
 | 
			
		||||
		out += sizeof(uuid_t);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void uuid_generate_random(uuid_t out)
 | 
			
		||||
{
 | 
			
		||||
	int	num = 1;
 | 
			
		||||
	/* No real reason to use the daemon for random uuid's -- yet */
 | 
			
		||||
 | 
			
		||||
	__uuid_generate_random(out, &num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Check whether good random source (/dev/random or /dev/urandom)
 | 
			
		||||
 * is available.
 | 
			
		||||
 */
 | 
			
		||||
static int have_random_source(void)
 | 
			
		||||
{
 | 
			
		||||
	struct stat s;
 | 
			
		||||
 | 
			
		||||
	return (!stat("/dev/random", &s) || !stat("/dev/urandom", &s));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the generic front-end to uuid_generate_random and
 | 
			
		||||
 * uuid_generate_time.  It uses uuid_generate_random only if
 | 
			
		||||
 * /dev/urandom is available, since otherwise we won't have
 | 
			
		||||
 * high-quality randomness.
 | 
			
		||||
 */
 | 
			
		||||
void uuid_generate(uuid_t out)
 | 
			
		||||
{
 | 
			
		||||
	if (have_random_source())
 | 
			
		||||
		uuid_generate_random(out);
 | 
			
		||||
	else
 | 
			
		||||
		uuid_generate_time(out);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										527
									
								
								uuid/install-sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										527
									
								
								uuid/install-sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,527 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# install - install a program, script, or datafile
 | 
			
		||||
 | 
			
		||||
scriptversion=2011-11-20.07; # UTC
 | 
			
		||||
 | 
			
		||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
 | 
			
		||||
# later released in X11R6 (xc/config/util/install.sh) with the
 | 
			
		||||
# following copyright and license.
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 1994 X Consortium
 | 
			
		||||
#
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to
 | 
			
		||||
# deal in the Software without restriction, including without limitation the
 | 
			
		||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 | 
			
		||||
# sell copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
#
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
#
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 | 
			
		||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
			
		||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
 | 
			
		||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#
 | 
			
		||||
# Except as contained in this notice, the name of the X Consortium shall not
 | 
			
		||||
# be used in advertising or otherwise to promote the sale, use or other deal-
 | 
			
		||||
# ings in this Software without prior written authorization from the X Consor-
 | 
			
		||||
# tium.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# FSF changes to this file are in the public domain.
 | 
			
		||||
#
 | 
			
		||||
# Calling this script install-sh is preferred over install.sh, to prevent
 | 
			
		||||
# 'make' implicit rules from creating a file called install from it
 | 
			
		||||
# when there is no Makefile.
 | 
			
		||||
#
 | 
			
		||||
# This script is compatible with the BSD install script, but was written
 | 
			
		||||
# from scratch.
 | 
			
		||||
 | 
			
		||||
nl='
 | 
			
		||||
'
 | 
			
		||||
IFS=" ""	$nl"
 | 
			
		||||
 | 
			
		||||
# set DOITPROG to echo to test this script
 | 
			
		||||
 | 
			
		||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
 | 
			
		||||
doit=${DOITPROG-}
 | 
			
		||||
if test -z "$doit"; then
 | 
			
		||||
  doit_exec=exec
 | 
			
		||||
else
 | 
			
		||||
  doit_exec=$doit
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Put in absolute file names if you don't have them in your path;
 | 
			
		||||
# or use environment vars.
 | 
			
		||||
 | 
			
		||||
chgrpprog=${CHGRPPROG-chgrp}
 | 
			
		||||
chmodprog=${CHMODPROG-chmod}
 | 
			
		||||
chownprog=${CHOWNPROG-chown}
 | 
			
		||||
cmpprog=${CMPPROG-cmp}
 | 
			
		||||
cpprog=${CPPROG-cp}
 | 
			
		||||
mkdirprog=${MKDIRPROG-mkdir}
 | 
			
		||||
mvprog=${MVPROG-mv}
 | 
			
		||||
rmprog=${RMPROG-rm}
 | 
			
		||||
stripprog=${STRIPPROG-strip}
 | 
			
		||||
 | 
			
		||||
posix_glob='?'
 | 
			
		||||
initialize_posix_glob='
 | 
			
		||||
  test "$posix_glob" != "?" || {
 | 
			
		||||
    if (set -f) 2>/dev/null; then
 | 
			
		||||
      posix_glob=
 | 
			
		||||
    else
 | 
			
		||||
      posix_glob=:
 | 
			
		||||
    fi
 | 
			
		||||
  }
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
posix_mkdir=
 | 
			
		||||
 | 
			
		||||
# Desired mode of installed file.
 | 
			
		||||
mode=0755
 | 
			
		||||
 | 
			
		||||
chgrpcmd=
 | 
			
		||||
chmodcmd=$chmodprog
 | 
			
		||||
chowncmd=
 | 
			
		||||
mvcmd=$mvprog
 | 
			
		||||
rmcmd="$rmprog -f"
 | 
			
		||||
stripcmd=
 | 
			
		||||
 | 
			
		||||
src=
 | 
			
		||||
dst=
 | 
			
		||||
dir_arg=
 | 
			
		||||
dst_arg=
 | 
			
		||||
 | 
			
		||||
copy_on_change=false
 | 
			
		||||
no_target_directory=
 | 
			
		||||
 | 
			
		||||
usage="\
 | 
			
		||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
 | 
			
		||||
   or: $0 [OPTION]... SRCFILES... DIRECTORY
 | 
			
		||||
   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
 | 
			
		||||
   or: $0 [OPTION]... -d DIRECTORIES...
 | 
			
		||||
 | 
			
		||||
In the 1st form, copy SRCFILE to DSTFILE.
 | 
			
		||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
 | 
			
		||||
In the 4th, create DIRECTORIES.
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
     --help     display this help and exit.
 | 
			
		||||
     --version  display version info and exit.
 | 
			
		||||
 | 
			
		||||
  -c            (ignored)
 | 
			
		||||
  -C            install only if different (preserve the last data modification time)
 | 
			
		||||
  -d            create directories instead of installing files.
 | 
			
		||||
  -g GROUP      $chgrpprog installed files to GROUP.
 | 
			
		||||
  -m MODE       $chmodprog installed files to MODE.
 | 
			
		||||
  -o USER       $chownprog installed files to USER.
 | 
			
		||||
  -s            $stripprog installed files.
 | 
			
		||||
  -t DIRECTORY  install into DIRECTORY.
 | 
			
		||||
  -T            report an error if DSTFILE is a directory.
 | 
			
		||||
 | 
			
		||||
Environment variables override the default commands:
 | 
			
		||||
  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
 | 
			
		||||
  RMPROG STRIPPROG
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
while test $# -ne 0; do
 | 
			
		||||
  case $1 in
 | 
			
		||||
    -c) ;;
 | 
			
		||||
 | 
			
		||||
    -C) copy_on_change=true;;
 | 
			
		||||
 | 
			
		||||
    -d) dir_arg=true;;
 | 
			
		||||
 | 
			
		||||
    -g) chgrpcmd="$chgrpprog $2"
 | 
			
		||||
	shift;;
 | 
			
		||||
 | 
			
		||||
    --help) echo "$usage"; exit $?;;
 | 
			
		||||
 | 
			
		||||
    -m) mode=$2
 | 
			
		||||
	case $mode in
 | 
			
		||||
	  *' '* | *'	'* | *'
 | 
			
		||||
'*	  | *'*'* | *'?'* | *'['*)
 | 
			
		||||
	    echo "$0: invalid mode: $mode" >&2
 | 
			
		||||
	    exit 1;;
 | 
			
		||||
	esac
 | 
			
		||||
	shift;;
 | 
			
		||||
 | 
			
		||||
    -o) chowncmd="$chownprog $2"
 | 
			
		||||
	shift;;
 | 
			
		||||
 | 
			
		||||
    -s) stripcmd=$stripprog;;
 | 
			
		||||
 | 
			
		||||
    -t) dst_arg=$2
 | 
			
		||||
	# Protect names problematic for 'test' and other utilities.
 | 
			
		||||
	case $dst_arg in
 | 
			
		||||
	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
 | 
			
		||||
	esac
 | 
			
		||||
	shift;;
 | 
			
		||||
 | 
			
		||||
    -T) no_target_directory=true;;
 | 
			
		||||
 | 
			
		||||
    --version) echo "$0 $scriptversion"; exit $?;;
 | 
			
		||||
 | 
			
		||||
    --)	shift
 | 
			
		||||
	break;;
 | 
			
		||||
 | 
			
		||||
    -*)	echo "$0: invalid option: $1" >&2
 | 
			
		||||
	exit 1;;
 | 
			
		||||
 | 
			
		||||
    *)  break;;
 | 
			
		||||
  esac
 | 
			
		||||
  shift
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
 | 
			
		||||
  # When -d is used, all remaining arguments are directories to create.
 | 
			
		||||
  # When -t is used, the destination is already specified.
 | 
			
		||||
  # Otherwise, the last argument is the destination.  Remove it from $@.
 | 
			
		||||
  for arg
 | 
			
		||||
  do
 | 
			
		||||
    if test -n "$dst_arg"; then
 | 
			
		||||
      # $@ is not empty: it contains at least $arg.
 | 
			
		||||
      set fnord "$@" "$dst_arg"
 | 
			
		||||
      shift # fnord
 | 
			
		||||
    fi
 | 
			
		||||
    shift # arg
 | 
			
		||||
    dst_arg=$arg
 | 
			
		||||
    # Protect names problematic for 'test' and other utilities.
 | 
			
		||||
    case $dst_arg in
 | 
			
		||||
      -* | [=\(\)!]) dst_arg=./$dst_arg;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test $# -eq 0; then
 | 
			
		||||
  if test -z "$dir_arg"; then
 | 
			
		||||
    echo "$0: no input file specified." >&2
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  # It's OK to call 'install-sh -d' without argument.
 | 
			
		||||
  # This can happen when creating conditional directories.
 | 
			
		||||
  exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test -z "$dir_arg"; then
 | 
			
		||||
  do_exit='(exit $ret); exit $ret'
 | 
			
		||||
  trap "ret=129; $do_exit" 1
 | 
			
		||||
  trap "ret=130; $do_exit" 2
 | 
			
		||||
  trap "ret=141; $do_exit" 13
 | 
			
		||||
  trap "ret=143; $do_exit" 15
 | 
			
		||||
 | 
			
		||||
  # Set umask so as not to create temps with too-generous modes.
 | 
			
		||||
  # However, 'strip' requires both read and write access to temps.
 | 
			
		||||
  case $mode in
 | 
			
		||||
    # Optimize common cases.
 | 
			
		||||
    *644) cp_umask=133;;
 | 
			
		||||
    *755) cp_umask=22;;
 | 
			
		||||
 | 
			
		||||
    *[0-7])
 | 
			
		||||
      if test -z "$stripcmd"; then
 | 
			
		||||
	u_plus_rw=
 | 
			
		||||
      else
 | 
			
		||||
	u_plus_rw='% 200'
 | 
			
		||||
      fi
 | 
			
		||||
      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
 | 
			
		||||
    *)
 | 
			
		||||
      if test -z "$stripcmd"; then
 | 
			
		||||
	u_plus_rw=
 | 
			
		||||
      else
 | 
			
		||||
	u_plus_rw=,u+rw
 | 
			
		||||
      fi
 | 
			
		||||
      cp_umask=$mode$u_plus_rw;;
 | 
			
		||||
  esac
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
for src
 | 
			
		||||
do
 | 
			
		||||
  # Protect names problematic for 'test' and other utilities.
 | 
			
		||||
  case $src in
 | 
			
		||||
    -* | [=\(\)!]) src=./$src;;
 | 
			
		||||
  esac
 | 
			
		||||
 | 
			
		||||
  if test -n "$dir_arg"; then
 | 
			
		||||
    dst=$src
 | 
			
		||||
    dstdir=$dst
 | 
			
		||||
    test -d "$dstdir"
 | 
			
		||||
    dstdir_status=$?
 | 
			
		||||
  else
 | 
			
		||||
 | 
			
		||||
    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
 | 
			
		||||
    # might cause directories to be created, which would be especially bad
 | 
			
		||||
    # if $src (and thus $dsttmp) contains '*'.
 | 
			
		||||
    if test ! -f "$src" && test ! -d "$src"; then
 | 
			
		||||
      echo "$0: $src does not exist." >&2
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if test -z "$dst_arg"; then
 | 
			
		||||
      echo "$0: no destination specified." >&2
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    dst=$dst_arg
 | 
			
		||||
 | 
			
		||||
    # If destination is a directory, append the input filename; won't work
 | 
			
		||||
    # if double slashes aren't ignored.
 | 
			
		||||
    if test -d "$dst"; then
 | 
			
		||||
      if test -n "$no_target_directory"; then
 | 
			
		||||
	echo "$0: $dst_arg: Is a directory" >&2
 | 
			
		||||
	exit 1
 | 
			
		||||
      fi
 | 
			
		||||
      dstdir=$dst
 | 
			
		||||
      dst=$dstdir/`basename "$src"`
 | 
			
		||||
      dstdir_status=0
 | 
			
		||||
    else
 | 
			
		||||
      # Prefer dirname, but fall back on a substitute if dirname fails.
 | 
			
		||||
      dstdir=`
 | 
			
		||||
	(dirname "$dst") 2>/dev/null ||
 | 
			
		||||
	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 | 
			
		||||
	     X"$dst" : 'X\(//\)[^/]' \| \
 | 
			
		||||
	     X"$dst" : 'X\(//\)$' \| \
 | 
			
		||||
	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
 | 
			
		||||
	echo X"$dst" |
 | 
			
		||||
	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 | 
			
		||||
		   s//\1/
 | 
			
		||||
		   q
 | 
			
		||||
		 }
 | 
			
		||||
		 /^X\(\/\/\)[^/].*/{
 | 
			
		||||
		   s//\1/
 | 
			
		||||
		   q
 | 
			
		||||
		 }
 | 
			
		||||
		 /^X\(\/\/\)$/{
 | 
			
		||||
		   s//\1/
 | 
			
		||||
		   q
 | 
			
		||||
		 }
 | 
			
		||||
		 /^X\(\/\).*/{
 | 
			
		||||
		   s//\1/
 | 
			
		||||
		   q
 | 
			
		||||
		 }
 | 
			
		||||
		 s/.*/./; q'
 | 
			
		||||
      `
 | 
			
		||||
 | 
			
		||||
      test -d "$dstdir"
 | 
			
		||||
      dstdir_status=$?
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  obsolete_mkdir_used=false
 | 
			
		||||
 | 
			
		||||
  if test $dstdir_status != 0; then
 | 
			
		||||
    case $posix_mkdir in
 | 
			
		||||
      '')
 | 
			
		||||
	# Create intermediate dirs using mode 755 as modified by the umask.
 | 
			
		||||
	# This is like FreeBSD 'install' as of 1997-10-28.
 | 
			
		||||
	umask=`umask`
 | 
			
		||||
	case $stripcmd.$umask in
 | 
			
		||||
	  # Optimize common cases.
 | 
			
		||||
	  *[2367][2367]) mkdir_umask=$umask;;
 | 
			
		||||
	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
 | 
			
		||||
 | 
			
		||||
	  *[0-7])
 | 
			
		||||
	    mkdir_umask=`expr $umask + 22 \
 | 
			
		||||
	      - $umask % 100 % 40 + $umask % 20 \
 | 
			
		||||
	      - $umask % 10 % 4 + $umask % 2
 | 
			
		||||
	    `;;
 | 
			
		||||
	  *) mkdir_umask=$umask,go-w;;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	# With -d, create the new directory with the user-specified mode.
 | 
			
		||||
	# Otherwise, rely on $mkdir_umask.
 | 
			
		||||
	if test -n "$dir_arg"; then
 | 
			
		||||
	  mkdir_mode=-m$mode
 | 
			
		||||
	else
 | 
			
		||||
	  mkdir_mode=
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	posix_mkdir=false
 | 
			
		||||
	case $umask in
 | 
			
		||||
	  *[123567][0-7][0-7])
 | 
			
		||||
	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
 | 
			
		||||
	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
 | 
			
		||||
	    ;;
 | 
			
		||||
	  *)
 | 
			
		||||
	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
 | 
			
		||||
	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
 | 
			
		||||
 | 
			
		||||
	    if (umask $mkdir_umask &&
 | 
			
		||||
		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
 | 
			
		||||
	    then
 | 
			
		||||
	      if test -z "$dir_arg" || {
 | 
			
		||||
		   # Check for POSIX incompatibilities with -m.
 | 
			
		||||
		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
 | 
			
		||||
		   # other-writable bit of parent directory when it shouldn't.
 | 
			
		||||
		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
 | 
			
		||||
		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
 | 
			
		||||
		   case $ls_ld_tmpdir in
 | 
			
		||||
		     d????-?r-*) different_mode=700;;
 | 
			
		||||
		     d????-?--*) different_mode=755;;
 | 
			
		||||
		     *) false;;
 | 
			
		||||
		   esac &&
 | 
			
		||||
		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
 | 
			
		||||
		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
 | 
			
		||||
		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
 | 
			
		||||
		   }
 | 
			
		||||
		 }
 | 
			
		||||
	      then posix_mkdir=:
 | 
			
		||||
	      fi
 | 
			
		||||
	      rmdir "$tmpdir/d" "$tmpdir"
 | 
			
		||||
	    else
 | 
			
		||||
	      # Remove any dirs left behind by ancient mkdir implementations.
 | 
			
		||||
	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
 | 
			
		||||
	    fi
 | 
			
		||||
	    trap '' 0;;
 | 
			
		||||
	esac;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    if
 | 
			
		||||
      $posix_mkdir && (
 | 
			
		||||
	umask $mkdir_umask &&
 | 
			
		||||
	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
 | 
			
		||||
      )
 | 
			
		||||
    then :
 | 
			
		||||
    else
 | 
			
		||||
 | 
			
		||||
      # The umask is ridiculous, or mkdir does not conform to POSIX,
 | 
			
		||||
      # or it failed possibly due to a race condition.  Create the
 | 
			
		||||
      # directory the slow way, step by step, checking for races as we go.
 | 
			
		||||
 | 
			
		||||
      case $dstdir in
 | 
			
		||||
	/*) prefix='/';;
 | 
			
		||||
	[-=\(\)!]*) prefix='./';;
 | 
			
		||||
	*)  prefix='';;
 | 
			
		||||
      esac
 | 
			
		||||
 | 
			
		||||
      eval "$initialize_posix_glob"
 | 
			
		||||
 | 
			
		||||
      oIFS=$IFS
 | 
			
		||||
      IFS=/
 | 
			
		||||
      $posix_glob set -f
 | 
			
		||||
      set fnord $dstdir
 | 
			
		||||
      shift
 | 
			
		||||
      $posix_glob set +f
 | 
			
		||||
      IFS=$oIFS
 | 
			
		||||
 | 
			
		||||
      prefixes=
 | 
			
		||||
 | 
			
		||||
      for d
 | 
			
		||||
      do
 | 
			
		||||
	test X"$d" = X && continue
 | 
			
		||||
 | 
			
		||||
	prefix=$prefix$d
 | 
			
		||||
	if test -d "$prefix"; then
 | 
			
		||||
	  prefixes=
 | 
			
		||||
	else
 | 
			
		||||
	  if $posix_mkdir; then
 | 
			
		||||
	    (umask=$mkdir_umask &&
 | 
			
		||||
	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
 | 
			
		||||
	    # Don't fail if two instances are running concurrently.
 | 
			
		||||
	    test -d "$prefix" || exit 1
 | 
			
		||||
	  else
 | 
			
		||||
	    case $prefix in
 | 
			
		||||
	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
 | 
			
		||||
	      *) qprefix=$prefix;;
 | 
			
		||||
	    esac
 | 
			
		||||
	    prefixes="$prefixes '$qprefix'"
 | 
			
		||||
	  fi
 | 
			
		||||
	fi
 | 
			
		||||
	prefix=$prefix/
 | 
			
		||||
      done
 | 
			
		||||
 | 
			
		||||
      if test -n "$prefixes"; then
 | 
			
		||||
	# Don't fail if two instances are running concurrently.
 | 
			
		||||
	(umask $mkdir_umask &&
 | 
			
		||||
	 eval "\$doit_exec \$mkdirprog $prefixes") ||
 | 
			
		||||
	  test -d "$dstdir" || exit 1
 | 
			
		||||
	obsolete_mkdir_used=true
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if test -n "$dir_arg"; then
 | 
			
		||||
    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
 | 
			
		||||
    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
 | 
			
		||||
    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
 | 
			
		||||
      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
 | 
			
		||||
  else
 | 
			
		||||
 | 
			
		||||
    # Make a couple of temp file names in the proper directory.
 | 
			
		||||
    dsttmp=$dstdir/_inst.$$_
 | 
			
		||||
    rmtmp=$dstdir/_rm.$$_
 | 
			
		||||
 | 
			
		||||
    # Trap to clean up those temp files at exit.
 | 
			
		||||
    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
 | 
			
		||||
 | 
			
		||||
    # Copy the file name to the temp name.
 | 
			
		||||
    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
 | 
			
		||||
 | 
			
		||||
    # and set any options; do chmod last to preserve setuid bits.
 | 
			
		||||
    #
 | 
			
		||||
    # If any of these fail, we abort the whole thing.  If we want to
 | 
			
		||||
    # ignore errors from any of these, just make sure not to ignore
 | 
			
		||||
    # errors from the above "$doit $cpprog $src $dsttmp" command.
 | 
			
		||||
    #
 | 
			
		||||
    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
 | 
			
		||||
    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
 | 
			
		||||
    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
 | 
			
		||||
    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
 | 
			
		||||
 | 
			
		||||
    # If -C, don't bother to copy if it wouldn't change the file.
 | 
			
		||||
    if $copy_on_change &&
 | 
			
		||||
       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
 | 
			
		||||
       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
 | 
			
		||||
 | 
			
		||||
       eval "$initialize_posix_glob" &&
 | 
			
		||||
       $posix_glob set -f &&
 | 
			
		||||
       set X $old && old=:$2:$4:$5:$6 &&
 | 
			
		||||
       set X $new && new=:$2:$4:$5:$6 &&
 | 
			
		||||
       $posix_glob set +f &&
 | 
			
		||||
 | 
			
		||||
       test "$old" = "$new" &&
 | 
			
		||||
       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
 | 
			
		||||
    then
 | 
			
		||||
      rm -f "$dsttmp"
 | 
			
		||||
    else
 | 
			
		||||
      # Rename the file to the real destination.
 | 
			
		||||
      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
 | 
			
		||||
 | 
			
		||||
      # The rename failed, perhaps because mv can't rename something else
 | 
			
		||||
      # to itself, or perhaps because mv is so ancient that it does not
 | 
			
		||||
      # support -f.
 | 
			
		||||
      {
 | 
			
		||||
	# Now remove or move aside any old file at destination location.
 | 
			
		||||
	# We try this two ways since rm can't unlink itself on some
 | 
			
		||||
	# systems and the destination file might be busy for other
 | 
			
		||||
	# reasons.  In this case, the final cleanup might fail but the new
 | 
			
		||||
	# file should still install successfully.
 | 
			
		||||
	{
 | 
			
		||||
	  test ! -f "$dst" ||
 | 
			
		||||
	  $doit $rmcmd -f "$dst" 2>/dev/null ||
 | 
			
		||||
	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
 | 
			
		||||
	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
 | 
			
		||||
	  } ||
 | 
			
		||||
	  { echo "$0: cannot unlink or rename $dst" >&2
 | 
			
		||||
	    (exit 1); exit 1
 | 
			
		||||
	  }
 | 
			
		||||
	} &&
 | 
			
		||||
 | 
			
		||||
	# Now rename the file to the real destination.
 | 
			
		||||
	$doit $mvcmd "$dsttmp" "$dst"
 | 
			
		||||
      }
 | 
			
		||||
    fi || exit 1
 | 
			
		||||
 | 
			
		||||
    trap '' 0
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Local variables:
 | 
			
		||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
 | 
			
		||||
# time-stamp-start: "scriptversion="
 | 
			
		||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
 | 
			
		||||
# time-stamp-time-zone: "UTC"
 | 
			
		||||
# time-stamp-end: "; # UTC"
 | 
			
		||||
# End:
 | 
			
		||||
							
								
								
									
										48
									
								
								uuid/isnull.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								uuid/isnull.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
/*
 | 
			
		||||
 * isnull.c --- Check whether or not the UUID is null
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
 | 
			
		||||
/* Returns 1 if the uuid is the NULL uuid */
 | 
			
		||||
int uuid_is_null(const uuid_t uu)
 | 
			
		||||
{
 | 
			
		||||
	const unsigned char 	*cp;
 | 
			
		||||
	int			i;
 | 
			
		||||
 | 
			
		||||
	for (i=0, cp = uu; i < 16; i++)
 | 
			
		||||
		if (*cp++)
 | 
			
		||||
			return 0;
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9655
									
								
								uuid/ltmain.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9655
									
								
								uuid/ltmain.sh
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										215
									
								
								uuid/missing
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								uuid/missing
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,215 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
# Common wrapper for a few potentially missing GNU programs.
 | 
			
		||||
 | 
			
		||||
scriptversion=2012-06-26.16; # UTC
 | 
			
		||||
 | 
			
		||||
# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 | 
			
		||||
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 | 
			
		||||
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation; either version 2, or (at your option)
 | 
			
		||||
# any later version.
 | 
			
		||||
 | 
			
		||||
# 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.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
# As a special exception to the GNU General Public License, if you
 | 
			
		||||
# distribute this file as part of a program that contains a
 | 
			
		||||
# configuration script generated by Autoconf, you may include it under
 | 
			
		||||
# the same distribution terms that you use for the rest of that program.
 | 
			
		||||
 | 
			
		||||
if test $# -eq 0; then
 | 
			
		||||
  echo 1>&2 "Try '$0 --help' for more information"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case $1 in
 | 
			
		||||
 | 
			
		||||
  --is-lightweight)
 | 
			
		||||
    # Used by our autoconf macros to check whether the available missing
 | 
			
		||||
    # script is modern enough.
 | 
			
		||||
    exit 0
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
  --run)
 | 
			
		||||
    # Back-compat with the calling convention used by older automake.
 | 
			
		||||
    shift
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
  -h|--h|--he|--hel|--help)
 | 
			
		||||
    echo "\
 | 
			
		||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
 | 
			
		||||
 | 
			
		||||
Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
 | 
			
		||||
to PROGRAM being missing or too old.
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
  -h, --help      display this help and exit
 | 
			
		||||
  -v, --version   output version information and exit
 | 
			
		||||
 | 
			
		||||
Supported PROGRAM values:
 | 
			
		||||
  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
 | 
			
		||||
  bison     yacc      flex         lex       help2man
 | 
			
		||||
 | 
			
		||||
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
 | 
			
		||||
'g' are ignored when checking the name.
 | 
			
		||||
 | 
			
		||||
Send bug reports to <bug-automake@gnu.org>."
 | 
			
		||||
    exit $?
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
 | 
			
		||||
    echo "missing $scriptversion (GNU Automake)"
 | 
			
		||||
    exit $?
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
  -*)
 | 
			
		||||
    echo 1>&2 "$0: unknown '$1' option"
 | 
			
		||||
    echo 1>&2 "Try '$0 --help' for more information"
 | 
			
		||||
    exit 1
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# Run the given program, remember its exit status.
 | 
			
		||||
"$@"; st=$?
 | 
			
		||||
 | 
			
		||||
# If it succeeded, we are done.
 | 
			
		||||
test $st -eq 0 && exit 0
 | 
			
		||||
 | 
			
		||||
# Also exit now if we it failed (or wasn't found), and '--version' was
 | 
			
		||||
# passed; such an option is passed most likely to detect whether the
 | 
			
		||||
# program is present and works.
 | 
			
		||||
case $2 in --version|--help) exit $st;; esac
 | 
			
		||||
 | 
			
		||||
# Exit code 63 means version mismatch.  This often happens when the user
 | 
			
		||||
# tries to use an ancient version of a tool on a file that requires a
 | 
			
		||||
# minimum version.
 | 
			
		||||
if test $st -eq 63; then
 | 
			
		||||
  msg="probably too old"
 | 
			
		||||
elif test $st -eq 127; then
 | 
			
		||||
  # Program was missing.
 | 
			
		||||
  msg="missing on your system"
 | 
			
		||||
else
 | 
			
		||||
  # Program was found and executed, but failed.  Give up.
 | 
			
		||||
  exit $st
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
perl_URL=http://www.perl.org/
 | 
			
		||||
flex_URL=http://flex.sourceforge.net/
 | 
			
		||||
gnu_software_URL=http://www.gnu.org/software
 | 
			
		||||
 | 
			
		||||
program_details ()
 | 
			
		||||
{
 | 
			
		||||
  case $1 in
 | 
			
		||||
    aclocal|automake)
 | 
			
		||||
      echo "The '$1' program is part of the GNU Automake package:"
 | 
			
		||||
      echo "<$gnu_software_URL/automake>"
 | 
			
		||||
      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
 | 
			
		||||
      echo "<$gnu_software_URL/autoconf>"
 | 
			
		||||
      echo "<$gnu_software_URL/m4/>"
 | 
			
		||||
      echo "<$perl_URL>"
 | 
			
		||||
      ;;
 | 
			
		||||
    autoconf|autom4te|autoheader)
 | 
			
		||||
      echo "The '$1' program is part of the GNU Autoconf package:"
 | 
			
		||||
      echo "<$gnu_software_URL/autoconf/>"
 | 
			
		||||
      echo "It also requires GNU m4 and Perl in order to run:"
 | 
			
		||||
      echo "<$gnu_software_URL/m4/>"
 | 
			
		||||
      echo "<$perl_URL>"
 | 
			
		||||
      ;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
give_advice ()
 | 
			
		||||
{
 | 
			
		||||
  # Normalize program name to check for.
 | 
			
		||||
  normalized_program=`echo "$1" | sed '
 | 
			
		||||
    s/^gnu-//; t
 | 
			
		||||
    s/^gnu//; t
 | 
			
		||||
    s/^g//; t'`
 | 
			
		||||
 | 
			
		||||
  printf '%s\n' "'$1' is $msg."
 | 
			
		||||
 | 
			
		||||
  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
 | 
			
		||||
  case $normalized_program in
 | 
			
		||||
    autoconf*)
 | 
			
		||||
      echo "You should only need it if you modified 'configure.ac',"
 | 
			
		||||
      echo "or m4 files included by it."
 | 
			
		||||
      program_details 'autoconf'
 | 
			
		||||
      ;;
 | 
			
		||||
    autoheader*)
 | 
			
		||||
      echo "You should only need it if you modified 'acconfig.h' or"
 | 
			
		||||
      echo "$configure_deps."
 | 
			
		||||
      program_details 'autoheader'
 | 
			
		||||
      ;;
 | 
			
		||||
    automake*)
 | 
			
		||||
      echo "You should only need it if you modified 'Makefile.am' or"
 | 
			
		||||
      echo "$configure_deps."
 | 
			
		||||
      program_details 'automake'
 | 
			
		||||
      ;;
 | 
			
		||||
    aclocal*)
 | 
			
		||||
      echo "You should only need it if you modified 'acinclude.m4' or"
 | 
			
		||||
      echo "$configure_deps."
 | 
			
		||||
      program_details 'aclocal'
 | 
			
		||||
      ;;
 | 
			
		||||
   autom4te*)
 | 
			
		||||
      echo "You might have modified some maintainer files that require"
 | 
			
		||||
      echo "the 'automa4te' program to be rebuilt."
 | 
			
		||||
      program_details 'autom4te'
 | 
			
		||||
      ;;
 | 
			
		||||
    bison*|yacc*)
 | 
			
		||||
      echo "You should only need it if you modified a '.y' file."
 | 
			
		||||
      echo "You may want to install the GNU Bison package:"
 | 
			
		||||
      echo "<$gnu_software_URL/bison/>"
 | 
			
		||||
      ;;
 | 
			
		||||
    lex*|flex*)
 | 
			
		||||
      echo "You should only need it if you modified a '.l' file."
 | 
			
		||||
      echo "You may want to install the Fast Lexical Analyzer package:"
 | 
			
		||||
      echo "<$flex_URL>"
 | 
			
		||||
      ;;
 | 
			
		||||
    help2man*)
 | 
			
		||||
      echo "You should only need it if you modified a dependency" \
 | 
			
		||||
           "of a man page."
 | 
			
		||||
      echo "You may want to install the GNU Help2man package:"
 | 
			
		||||
      echo "<$gnu_software_URL/help2man/>"
 | 
			
		||||
    ;;
 | 
			
		||||
    makeinfo*)
 | 
			
		||||
      echo "You should only need it if you modified a '.texi' file, or"
 | 
			
		||||
      echo "any other file indirectly affecting the aspect of the manual."
 | 
			
		||||
      echo "You might want to install the Texinfo package:"
 | 
			
		||||
      echo "<$gnu_software_URL/texinfo/>"
 | 
			
		||||
      echo "The spurious makeinfo call might also be the consequence of"
 | 
			
		||||
      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
 | 
			
		||||
      echo "want to install GNU make:"
 | 
			
		||||
      echo "<$gnu_software_URL/make/>"
 | 
			
		||||
      ;;
 | 
			
		||||
    *)
 | 
			
		||||
      echo "You might have modified some files without having the proper"
 | 
			
		||||
      echo "tools for further handling them.  Check the 'README' file, it"
 | 
			
		||||
      echo "often tells you about the needed prerequisites for installing"
 | 
			
		||||
      echo "this package.  You may also peek at any GNU archive site, in"
 | 
			
		||||
      echo "case some other package contains this missing '$1' program."
 | 
			
		||||
      ;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
give_advice "$1" | sed -e '1s/^/WARNING: /' \
 | 
			
		||||
                       -e '2,$s/^/         /' >&2
 | 
			
		||||
 | 
			
		||||
# Propagate the correct exit status (expected to be 127 for a program
 | 
			
		||||
# not found, 63 for a program that failed due to version mismatch).
 | 
			
		||||
exit $st
 | 
			
		||||
 | 
			
		||||
# Local variables:
 | 
			
		||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
 | 
			
		||||
# time-stamp-start: "scriptversion="
 | 
			
		||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
 | 
			
		||||
# time-stamp-time-zone: "UTC"
 | 
			
		||||
# time-stamp-end: "; # UTC"
 | 
			
		||||
# End:
 | 
			
		||||
							
								
								
									
										69
									
								
								uuid/pack.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								uuid/pack.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Internal routine for packing UUIDs
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
 | 
			
		||||
void uuid_pack(const struct uuid *uu, uuid_t ptr)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t	tmp;
 | 
			
		||||
	unsigned char	*out = ptr;
 | 
			
		||||
 | 
			
		||||
	tmp = uu->time_low;
 | 
			
		||||
	out[3] = (unsigned char) tmp;
 | 
			
		||||
	tmp >>= 8;
 | 
			
		||||
	out[2] = (unsigned char) tmp;
 | 
			
		||||
	tmp >>= 8;
 | 
			
		||||
	out[1] = (unsigned char) tmp;
 | 
			
		||||
	tmp >>= 8;
 | 
			
		||||
	out[0] = (unsigned char) tmp;
 | 
			
		||||
 | 
			
		||||
	tmp = uu->time_mid;
 | 
			
		||||
	out[5] = (unsigned char) tmp;
 | 
			
		||||
	tmp >>= 8;
 | 
			
		||||
	out[4] = (unsigned char) tmp;
 | 
			
		||||
 | 
			
		||||
	tmp = uu->time_hi_and_version;
 | 
			
		||||
	out[7] = (unsigned char) tmp;
 | 
			
		||||
	tmp >>= 8;
 | 
			
		||||
	out[6] = (unsigned char) tmp;
 | 
			
		||||
 | 
			
		||||
	tmp = uu->clock_seq;
 | 
			
		||||
	out[9] = (unsigned char) tmp;
 | 
			
		||||
	tmp >>= 8;
 | 
			
		||||
	out[8] = (unsigned char) tmp;
 | 
			
		||||
 | 
			
		||||
	memcpy(out+10, uu->node, 6);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										79
									
								
								uuid/parse.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								uuid/parse.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
/*
 | 
			
		||||
 * parse.c --- UUID parsing
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
 | 
			
		||||
int uuid_parse(const char *in, uuid_t uu)
 | 
			
		||||
{
 | 
			
		||||
	struct uuid	uuid;
 | 
			
		||||
	int 		i;
 | 
			
		||||
	const char	*cp;
 | 
			
		||||
	char		buf[3];
 | 
			
		||||
 | 
			
		||||
	if (strlen(in) != 36)
 | 
			
		||||
		return -1;
 | 
			
		||||
	for (i=0, cp = in; i <= 36; i++,cp++) {
 | 
			
		||||
		if ((i == 8) || (i == 13) || (i == 18) ||
 | 
			
		||||
		    (i == 23)) {
 | 
			
		||||
			if (*cp == '-')
 | 
			
		||||
				continue;
 | 
			
		||||
			else
 | 
			
		||||
				return -1;
 | 
			
		||||
		}
 | 
			
		||||
		if (i== 36)
 | 
			
		||||
			if (*cp == 0)
 | 
			
		||||
				continue;
 | 
			
		||||
		if (!isxdigit(*cp))
 | 
			
		||||
			return -1;
 | 
			
		||||
	}
 | 
			
		||||
	uuid.time_low = strtoul(in, NULL, 16);
 | 
			
		||||
	uuid.time_mid = strtoul(in+9, NULL, 16);
 | 
			
		||||
	uuid.time_hi_and_version = strtoul(in+14, NULL, 16);
 | 
			
		||||
	uuid.clock_seq = strtoul(in+19, NULL, 16);
 | 
			
		||||
	cp = in+24;
 | 
			
		||||
	buf[2] = 0;
 | 
			
		||||
	for (i=0; i < 6; i++) {
 | 
			
		||||
		buf[0] = *cp++;
 | 
			
		||||
		buf[1] = *cp++;
 | 
			
		||||
		uuid.node[i] = strtoul(buf, NULL, 16);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	uuid_pack(&uuid, uu);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										125
									
								
								uuid/randutils.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								uuid/randutils.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,125 @@
 | 
			
		||||
/*
 | 
			
		||||
 * General purpose random utilities
 | 
			
		||||
 *
 | 
			
		||||
 * Based on libuuid code.
 | 
			
		||||
 *
 | 
			
		||||
 * This file may be redistributed under the terms of the
 | 
			
		||||
 * GNU Lesser General Public License.
 | 
			
		||||
 */
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/syscall.h>
 | 
			
		||||
 | 
			
		||||
#include "randutils.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_TLS
 | 
			
		||||
#define THREAD_LOCAL static __thread
 | 
			
		||||
#else
 | 
			
		||||
#define THREAD_LOCAL static
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__) && defined(__NR_gettid) && defined(HAVE_JRAND48)
 | 
			
		||||
#define DO_JRAND_MIX
 | 
			
		||||
THREAD_LOCAL unsigned short ul_jrand_seed[3];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int random_get_fd(void)
 | 
			
		||||
{
 | 
			
		||||
	int i, fd;
 | 
			
		||||
	struct timeval	tv;
 | 
			
		||||
 | 
			
		||||
	gettimeofday(&tv, 0);
 | 
			
		||||
	fd = open("/dev/urandom", O_RDONLY);
 | 
			
		||||
	if (fd == -1)
 | 
			
		||||
		fd = open("/dev/random", O_RDONLY | O_NONBLOCK);
 | 
			
		||||
	if (fd >= 0) {
 | 
			
		||||
		i = fcntl(fd, F_GETFD);
 | 
			
		||||
		if (i >= 0)
 | 
			
		||||
			fcntl(fd, F_SETFD, i | FD_CLOEXEC);
 | 
			
		||||
	}
 | 
			
		||||
	srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
 | 
			
		||||
 | 
			
		||||
#ifdef DO_JRAND_MIX
 | 
			
		||||
	ul_jrand_seed[0] = getpid() ^ (tv.tv_sec & 0xFFFF);
 | 
			
		||||
	ul_jrand_seed[1] = getppid() ^ (tv.tv_usec & 0xFFFF);
 | 
			
		||||
	ul_jrand_seed[2] = (tv.tv_sec ^ tv.tv_usec) >> 16;
 | 
			
		||||
#endif
 | 
			
		||||
	/* Crank the random number generator a few times */
 | 
			
		||||
	gettimeofday(&tv, 0);
 | 
			
		||||
	for (i = (tv.tv_sec ^ tv.tv_usec) & 0x1F; i > 0; i--)
 | 
			
		||||
		rand();
 | 
			
		||||
	return fd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Generate a stream of random nbytes into buf.
 | 
			
		||||
 * Use /dev/urandom if possible, and if not,
 | 
			
		||||
 * use glibc pseudo-random functions.
 | 
			
		||||
 */
 | 
			
		||||
void random_get_bytes(void *buf, size_t nbytes)
 | 
			
		||||
{
 | 
			
		||||
	size_t i, n = nbytes;
 | 
			
		||||
	int fd = random_get_fd();
 | 
			
		||||
	int lose_counter = 0;
 | 
			
		||||
	unsigned char *cp = (unsigned char *) buf;
 | 
			
		||||
 | 
			
		||||
	if (fd >= 0) {
 | 
			
		||||
		while (n > 0) {
 | 
			
		||||
			ssize_t x = read(fd, cp, n);
 | 
			
		||||
			if (x <= 0) {
 | 
			
		||||
				if (lose_counter++ > 16)
 | 
			
		||||
					break;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			n -= x;
 | 
			
		||||
			cp += x;
 | 
			
		||||
			lose_counter = 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		close(fd);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * We do this all the time, but this is the only source of
 | 
			
		||||
	 * randomness if /dev/random/urandom is out to lunch.
 | 
			
		||||
	 */
 | 
			
		||||
	for (cp = buf, i = 0; i < nbytes; i++)
 | 
			
		||||
		*cp++ ^= (rand() >> 7) & 0xFF;
 | 
			
		||||
 | 
			
		||||
#ifdef DO_JRAND_MIX
 | 
			
		||||
	{
 | 
			
		||||
		unsigned short tmp_seed[3];
 | 
			
		||||
 | 
			
		||||
		memcpy(tmp_seed, ul_jrand_seed, sizeof(tmp_seed));
 | 
			
		||||
		ul_jrand_seed[2] = ul_jrand_seed[2] ^ syscall(__NR_gettid);
 | 
			
		||||
		for (cp = buf, i = 0; i < nbytes; i++)
 | 
			
		||||
			*cp++ ^= (jrand48(tmp_seed) >> 7) & 0xFF;
 | 
			
		||||
		memcpy(ul_jrand_seed, tmp_seed,
 | 
			
		||||
		       sizeof(ul_jrand_seed)-sizeof(unsigned short));
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef TEST_PROGRAM
 | 
			
		||||
int main(int argc __attribute__ ((__unused__)),
 | 
			
		||||
         char *argv[] __attribute__ ((__unused__)))
 | 
			
		||||
{
 | 
			
		||||
	unsigned int v, i;
 | 
			
		||||
 | 
			
		||||
	/* generate and print 10 random numbers */
 | 
			
		||||
	for (i = 0; i < 10; i++) {
 | 
			
		||||
		random_get_bytes(&v, sizeof(v));
 | 
			
		||||
		printf("%d\n", v);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return EXIT_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
#endif /* TEST_PROGRAM */
 | 
			
		||||
							
								
								
									
										12
									
								
								uuid/randutils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								uuid/randutils.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
#ifndef UTIL_LINUX_RANDUTILS
 | 
			
		||||
#define UTIL_LINUX_RANDUTILS
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SRANDOM
 | 
			
		||||
#define srand(x)	srandom(x)
 | 
			
		||||
#define rand()		random()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
extern int random_get_fd(void);
 | 
			
		||||
extern void random_get_bytes(void *buf, size_t nbytes);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										180
									
								
								uuid/test_uuid.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								uuid/test_uuid.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,180 @@
 | 
			
		||||
/*
 | 
			
		||||
 * tst_uuid.c --- test program from the UUID library
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997, 1998 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#define _WIN32_WINNT 0x0500
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#define UUID MYUUID
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include "uuid.h"
 | 
			
		||||
 | 
			
		||||
static int test_uuid(const char * uuid, int isValid)
 | 
			
		||||
{
 | 
			
		||||
	static const char * validStr[2] = {"invalid", "valid"};
 | 
			
		||||
	uuid_t uuidBits;
 | 
			
		||||
	int parsedOk;
 | 
			
		||||
 | 
			
		||||
	parsedOk = uuid_parse(uuid, uuidBits) == 0;
 | 
			
		||||
 | 
			
		||||
	printf("%s is %s", uuid, validStr[isValid]);
 | 
			
		||||
	if (parsedOk != isValid) {
 | 
			
		||||
		printf(" but uuid_parse says %s\n", validStr[parsedOk]);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	printf(", OK\n");
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUC__
 | 
			
		||||
#define ATTR(x) __attribute__(x)
 | 
			
		||||
#else
 | 
			
		||||
#define ATTR(x)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main(int argc ATTR((unused)) , char **argv ATTR((unused)))
 | 
			
		||||
{
 | 
			
		||||
	uuid_t		buf, tst;
 | 
			
		||||
	char		str[100];
 | 
			
		||||
	struct timeval	tv;
 | 
			
		||||
	time_t		time_reg;
 | 
			
		||||
	unsigned char	*cp;
 | 
			
		||||
	int i;
 | 
			
		||||
	int failed = 0;
 | 
			
		||||
	int type, variant;
 | 
			
		||||
 | 
			
		||||
	uuid_generate(buf);
 | 
			
		||||
	uuid_unparse(buf, str);
 | 
			
		||||
	printf("UUID generate = %s\n", str);
 | 
			
		||||
	printf("UUID: ");
 | 
			
		||||
	for (i=0, cp = (unsigned char *) &buf; i < 16; i++) {
 | 
			
		||||
		printf("%02x", *cp++);
 | 
			
		||||
	}
 | 
			
		||||
	printf("\n");
 | 
			
		||||
	type = uuid_type(buf); 	variant = uuid_variant(buf);
 | 
			
		||||
	printf("UUID type = %d, UUID variant = %d\n", type, variant);
 | 
			
		||||
	if (variant != UUID_VARIANT_DCE) {
 | 
			
		||||
		printf("Incorrect UUID Variant; was expecting DCE!\n");
 | 
			
		||||
		failed++;
 | 
			
		||||
	}
 | 
			
		||||
	printf("\n");
 | 
			
		||||
 | 
			
		||||
	uuid_generate_random(buf);
 | 
			
		||||
	uuid_unparse(buf, str);
 | 
			
		||||
	printf("UUID random string = %s\n", str);
 | 
			
		||||
	printf("UUID: ");
 | 
			
		||||
	for (i=0, cp = (unsigned char *) &buf; i < 16; i++) {
 | 
			
		||||
		printf("%02x", *cp++);
 | 
			
		||||
	}
 | 
			
		||||
	printf("\n");
 | 
			
		||||
	type = uuid_type(buf); 	variant = uuid_variant(buf);
 | 
			
		||||
	printf("UUID type = %d, UUID variant = %d\n", type, variant);
 | 
			
		||||
	if (variant != UUID_VARIANT_DCE) {
 | 
			
		||||
		printf("Incorrect UUID Variant; was expecting DCE!\n");
 | 
			
		||||
		failed++;
 | 
			
		||||
	}
 | 
			
		||||
	if (type != 4) {
 | 
			
		||||
		printf("Incorrect UUID type; was expecting "
 | 
			
		||||
		       "4 (random type)!\n");
 | 
			
		||||
		failed++;
 | 
			
		||||
	}
 | 
			
		||||
	printf("\n");
 | 
			
		||||
 | 
			
		||||
	uuid_generate_time(buf);
 | 
			
		||||
	uuid_unparse(buf, str);
 | 
			
		||||
	printf("UUID string = %s\n", str);
 | 
			
		||||
	printf("UUID time: ");
 | 
			
		||||
	for (i=0, cp = (unsigned char *) &buf; i < 16; i++) {
 | 
			
		||||
		printf("%02x", *cp++);
 | 
			
		||||
	}
 | 
			
		||||
	printf("\n");
 | 
			
		||||
	type = uuid_type(buf); 	variant = uuid_variant(buf);
 | 
			
		||||
	printf("UUID type = %d, UUID variant = %d\n", type, variant);
 | 
			
		||||
	if (variant != UUID_VARIANT_DCE) {
 | 
			
		||||
		printf("Incorrect UUID Variant; was expecting DCE!\n");
 | 
			
		||||
		failed++;
 | 
			
		||||
	}
 | 
			
		||||
	if (type != 1) {
 | 
			
		||||
		printf("Incorrect UUID type; was expecting "
 | 
			
		||||
		       "1 (time-based type)!\\n");
 | 
			
		||||
		failed++;
 | 
			
		||||
	}
 | 
			
		||||
	tv.tv_sec = 0;
 | 
			
		||||
	tv.tv_usec = 0;
 | 
			
		||||
	time_reg = uuid_time(buf, &tv);
 | 
			
		||||
	printf("UUID time is: (%ld, %ld): %s\n", tv.tv_sec, tv.tv_usec,
 | 
			
		||||
	       ctime(&time_reg));
 | 
			
		||||
	uuid_parse(str, tst);
 | 
			
		||||
	if (!uuid_compare(buf, tst))
 | 
			
		||||
		printf("UUID parse and compare succeeded.\n");
 | 
			
		||||
	else {
 | 
			
		||||
		printf("UUID parse and compare failed!\n");
 | 
			
		||||
		failed++;
 | 
			
		||||
	}
 | 
			
		||||
	uuid_clear(tst);
 | 
			
		||||
	if (uuid_is_null(tst))
 | 
			
		||||
		printf("UUID clear and is null succeeded.\n");
 | 
			
		||||
	else {
 | 
			
		||||
		printf("UUID clear and is null failed!\n");
 | 
			
		||||
		failed++;
 | 
			
		||||
	}
 | 
			
		||||
	uuid_copy(buf, tst);
 | 
			
		||||
	if (!uuid_compare(buf, tst))
 | 
			
		||||
		printf("UUID copy and compare succeeded.\n");
 | 
			
		||||
	else {
 | 
			
		||||
		printf("UUID copy and compare failed!\n");
 | 
			
		||||
		failed++;
 | 
			
		||||
	}
 | 
			
		||||
	failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981b", 1);
 | 
			
		||||
	failed += test_uuid("84949CC5-4701-4A84-895B-354C584A981B", 1);
 | 
			
		||||
	failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981bc", 0);
 | 
			
		||||
	failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981", 0);
 | 
			
		||||
	failed += test_uuid("84949cc5x4701-4a84-895b-354c584a981b", 0);
 | 
			
		||||
	failed += test_uuid("84949cc504701-4a84-895b-354c584a981b", 0);
 | 
			
		||||
	failed += test_uuid("84949cc5-470104a84-895b-354c584a981b", 0);
 | 
			
		||||
	failed += test_uuid("84949cc5-4701-4a840895b-354c584a981b", 0);
 | 
			
		||||
	failed += test_uuid("84949cc5-4701-4a84-895b0354c584a981b", 0);
 | 
			
		||||
	failed += test_uuid("g4949cc5-4701-4a84-895b-354c584a981b", 0);
 | 
			
		||||
	failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981g", 0);
 | 
			
		||||
 | 
			
		||||
	if (failed) {
 | 
			
		||||
		printf("%d failures.\n", failed);
 | 
			
		||||
		exit(1);
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								uuid/unpack.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								uuid/unpack.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Internal routine for unpacking UUID
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
 | 
			
		||||
void uuid_unpack(const uuid_t in, struct uuid *uu)
 | 
			
		||||
{
 | 
			
		||||
	const uint8_t	*ptr = in;
 | 
			
		||||
	uint32_t		tmp;
 | 
			
		||||
 | 
			
		||||
	tmp = *ptr++;
 | 
			
		||||
	tmp = (tmp << 8) | *ptr++;
 | 
			
		||||
	tmp = (tmp << 8) | *ptr++;
 | 
			
		||||
	tmp = (tmp << 8) | *ptr++;
 | 
			
		||||
	uu->time_low = tmp;
 | 
			
		||||
 | 
			
		||||
	tmp = *ptr++;
 | 
			
		||||
	tmp = (tmp << 8) | *ptr++;
 | 
			
		||||
	uu->time_mid = tmp;
 | 
			
		||||
 | 
			
		||||
	tmp = *ptr++;
 | 
			
		||||
	tmp = (tmp << 8) | *ptr++;
 | 
			
		||||
	uu->time_hi_and_version = tmp;
 | 
			
		||||
 | 
			
		||||
	tmp = *ptr++;
 | 
			
		||||
	tmp = (tmp << 8) | *ptr++;
 | 
			
		||||
	uu->clock_seq = tmp;
 | 
			
		||||
 | 
			
		||||
	memcpy(uu->node, ptr, 6);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										76
									
								
								uuid/unparse.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								uuid/unparse.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
/*
 | 
			
		||||
 * unparse.c -- convert a UUID to string
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
 | 
			
		||||
static const char *fmt_lower =
 | 
			
		||||
	"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x";
 | 
			
		||||
 | 
			
		||||
static const char *fmt_upper =
 | 
			
		||||
	"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X";
 | 
			
		||||
 | 
			
		||||
#ifdef UUID_UNPARSE_DEFAULT_UPPER
 | 
			
		||||
#define FMT_DEFAULT fmt_upper
 | 
			
		||||
#else
 | 
			
		||||
#define FMT_DEFAULT fmt_lower
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void uuid_unparse_x(const uuid_t uu, char *out, const char *fmt)
 | 
			
		||||
{
 | 
			
		||||
	struct uuid uuid;
 | 
			
		||||
 | 
			
		||||
	uuid_unpack(uu, &uuid);
 | 
			
		||||
	sprintf(out, fmt,
 | 
			
		||||
		uuid.time_low, uuid.time_mid, uuid.time_hi_and_version,
 | 
			
		||||
		uuid.clock_seq >> 8, uuid.clock_seq & 0xFF,
 | 
			
		||||
		uuid.node[0], uuid.node[1], uuid.node[2],
 | 
			
		||||
		uuid.node[3], uuid.node[4], uuid.node[5]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void uuid_unparse_lower(const uuid_t uu, char *out)
 | 
			
		||||
{
 | 
			
		||||
	uuid_unparse_x(uu, out,	fmt_lower);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void uuid_unparse_upper(const uuid_t uu, char *out)
 | 
			
		||||
{
 | 
			
		||||
	uuid_unparse_x(uu, out,	fmt_upper);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void uuid_unparse(const uuid_t uu, char *out)
 | 
			
		||||
{
 | 
			
		||||
	uuid_unparse_x(uu, out, FMT_DEFAULT);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										104
									
								
								uuid/uuid.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								uuid/uuid.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Public include file for the UUID library
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997, 1998 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _UUID_UUID_H
 | 
			
		||||
#define _UUID_UUID_H
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#ifndef _WIN32
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
typedef unsigned char uuid_t[16];
 | 
			
		||||
 | 
			
		||||
/* UUID Variant definitions */
 | 
			
		||||
#define UUID_VARIANT_NCS	0
 | 
			
		||||
#define UUID_VARIANT_DCE	1
 | 
			
		||||
#define UUID_VARIANT_MICROSOFT	2
 | 
			
		||||
#define UUID_VARIANT_OTHER	3
 | 
			
		||||
 | 
			
		||||
/* UUID Type definitions */
 | 
			
		||||
#define UUID_TYPE_DCE_TIME   1
 | 
			
		||||
#define UUID_TYPE_DCE_RANDOM 4
 | 
			
		||||
 | 
			
		||||
/* Allow UUID constants to be defined */
 | 
			
		||||
#ifdef __GNUC__
 | 
			
		||||
#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
 | 
			
		||||
	static const uuid_t name __attribute__ ((unused)) = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
 | 
			
		||||
#else
 | 
			
		||||
#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
 | 
			
		||||
	static const uuid_t name = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* clear.c */
 | 
			
		||||
void uuid_clear(uuid_t uu);
 | 
			
		||||
 | 
			
		||||
/* compare.c */
 | 
			
		||||
int uuid_compare(const uuid_t uu1, const uuid_t uu2);
 | 
			
		||||
 | 
			
		||||
/* copy.c */
 | 
			
		||||
void uuid_copy(uuid_t dst, const uuid_t src);
 | 
			
		||||
 | 
			
		||||
/* gen_uuid.c */
 | 
			
		||||
void uuid_generate(uuid_t out);
 | 
			
		||||
void uuid_generate_random(uuid_t out);
 | 
			
		||||
void uuid_generate_time(uuid_t out);
 | 
			
		||||
int uuid_generate_time_safe(uuid_t out);
 | 
			
		||||
 | 
			
		||||
/* isnull.c */
 | 
			
		||||
int uuid_is_null(const uuid_t uu);
 | 
			
		||||
 | 
			
		||||
/* parse.c */
 | 
			
		||||
int uuid_parse(const char *in, uuid_t uu);
 | 
			
		||||
 | 
			
		||||
/* unparse.c */
 | 
			
		||||
void uuid_unparse(const uuid_t uu, char *out);
 | 
			
		||||
void uuid_unparse_lower(const uuid_t uu, char *out);
 | 
			
		||||
void uuid_unparse_upper(const uuid_t uu, char *out);
 | 
			
		||||
 | 
			
		||||
/* uuid_time.c */
 | 
			
		||||
time_t uuid_time(const uuid_t uu, struct timeval *ret_tv);
 | 
			
		||||
int uuid_type(const uuid_t uu);
 | 
			
		||||
int uuid_variant(const uuid_t uu);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _UUID_UUID_H */
 | 
			
		||||
							
								
								
									
										11
									
								
								uuid/uuid.pc.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								uuid/uuid.pc.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
prefix=@prefix@
 | 
			
		||||
exec_prefix=@exec_prefix@
 | 
			
		||||
libdir=@libdir@
 | 
			
		||||
includedir=@includedir@
 | 
			
		||||
 | 
			
		||||
Name: uuid
 | 
			
		||||
Description: Universally unique id library
 | 
			
		||||
Version: @LIBUUID_VERSION@
 | 
			
		||||
Requires:
 | 
			
		||||
Cflags: -I${includedir}/uuid
 | 
			
		||||
Libs: -L${libdir} -luuid
 | 
			
		||||
							
								
								
									
										61
									
								
								uuid/uuidP.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								uuid/uuidP.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
/*
 | 
			
		||||
 * uuid.h -- private header file for uuids
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1996, 1997 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#include "uuid.h"
 | 
			
		||||
 | 
			
		||||
#define LIBUUID_CLOCK_FILE	"/var/lib/libuuid/clock.txt"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Offset between 15-Oct-1582 and 1-Jan-70
 | 
			
		||||
 */
 | 
			
		||||
#define TIME_OFFSET_HIGH 0x01B21DD2
 | 
			
		||||
#define TIME_OFFSET_LOW  0x13814000
 | 
			
		||||
 | 
			
		||||
struct uuid {
 | 
			
		||||
	uint32_t	time_low;
 | 
			
		||||
	uint16_t	time_mid;
 | 
			
		||||
	uint16_t	time_hi_and_version;
 | 
			
		||||
	uint16_t	clock_seq;
 | 
			
		||||
	uint8_t	node[6];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * prototypes
 | 
			
		||||
 */
 | 
			
		||||
void uuid_pack(const struct uuid *uu, uuid_t ptr);
 | 
			
		||||
void uuid_unpack(const uuid_t in, struct uuid *uu);
 | 
			
		||||
							
								
								
									
										171
									
								
								uuid/uuid_time.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								uuid/uuid_time.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,171 @@
 | 
			
		||||
/*
 | 
			
		||||
 * uuid_time.c --- Interpret the time field from a uuid.  This program
 | 
			
		||||
 * 	violates the UUID abstraction barrier by reaching into the guts
 | 
			
		||||
 *	of a UUID and interpreting it.
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 1998, 1999 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#define _WIN32_WINNT 0x0500
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#define UUID MYUUID
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
#include "uuidP.h"
 | 
			
		||||
 | 
			
		||||
time_t uuid_time(const uuid_t uu, struct timeval *ret_tv)
 | 
			
		||||
{
 | 
			
		||||
	struct timeval		tv;
 | 
			
		||||
	struct uuid		uuid;
 | 
			
		||||
	uint32_t		high;
 | 
			
		||||
	uint64_t		clock_reg;
 | 
			
		||||
 | 
			
		||||
	uuid_unpack(uu, &uuid);
 | 
			
		||||
 | 
			
		||||
	high = uuid.time_mid | ((uuid.time_hi_and_version & 0xFFF) << 16);
 | 
			
		||||
	clock_reg = uuid.time_low | ((uint64_t) high << 32);
 | 
			
		||||
 | 
			
		||||
	clock_reg -= (((uint64_t) 0x01B21DD2) << 32) + 0x13814000;
 | 
			
		||||
	tv.tv_sec = clock_reg / 10000000;
 | 
			
		||||
	tv.tv_usec = (clock_reg % 10000000) / 10;
 | 
			
		||||
 | 
			
		||||
	if (ret_tv)
 | 
			
		||||
		*ret_tv = tv;
 | 
			
		||||
 | 
			
		||||
	return tv.tv_sec;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int uuid_type(const uuid_t uu)
 | 
			
		||||
{
 | 
			
		||||
	struct uuid		uuid;
 | 
			
		||||
 | 
			
		||||
	uuid_unpack(uu, &uuid);
 | 
			
		||||
	return ((uuid.time_hi_and_version >> 12) & 0xF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int uuid_variant(const uuid_t uu)
 | 
			
		||||
{
 | 
			
		||||
	struct uuid		uuid;
 | 
			
		||||
	int			var;
 | 
			
		||||
 | 
			
		||||
	uuid_unpack(uu, &uuid);
 | 
			
		||||
	var = uuid.clock_seq;
 | 
			
		||||
 | 
			
		||||
	if ((var & 0x8000) == 0)
 | 
			
		||||
		return UUID_VARIANT_NCS;
 | 
			
		||||
	if ((var & 0x4000) == 0)
 | 
			
		||||
		return UUID_VARIANT_DCE;
 | 
			
		||||
	if ((var & 0x2000) == 0)
 | 
			
		||||
		return UUID_VARIANT_MICROSOFT;
 | 
			
		||||
	return UUID_VARIANT_OTHER;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
static const char *variant_string(int variant)
 | 
			
		||||
{
 | 
			
		||||
	switch (variant) {
 | 
			
		||||
	case UUID_VARIANT_NCS:
 | 
			
		||||
		return "NCS";
 | 
			
		||||
	case UUID_VARIANT_DCE:
 | 
			
		||||
		return "DCE";
 | 
			
		||||
	case UUID_VARIANT_MICROSOFT:
 | 
			
		||||
		return "Microsoft";
 | 
			
		||||
	default:
 | 
			
		||||
		return "Other";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	uuid_t		buf;
 | 
			
		||||
	time_t		time_reg;
 | 
			
		||||
	struct timeval	tv;
 | 
			
		||||
	int		type, variant;
 | 
			
		||||
 | 
			
		||||
	if (argc != 2) {
 | 
			
		||||
		fprintf(stderr, "Usage: %s uuid\n", argv[0]);
 | 
			
		||||
		exit(1);
 | 
			
		||||
	}
 | 
			
		||||
	if (uuid_parse(argv[1], buf)) {
 | 
			
		||||
		fprintf(stderr, "Invalid UUID: %s\n", argv[1]);
 | 
			
		||||
		exit(1);
 | 
			
		||||
	}
 | 
			
		||||
	variant = uuid_variant(buf);
 | 
			
		||||
	type = uuid_type(buf);
 | 
			
		||||
	time_reg = uuid_time(buf, &tv);
 | 
			
		||||
 | 
			
		||||
	printf("UUID variant is %d (%s)\n", variant, variant_string(variant));
 | 
			
		||||
	if (variant != UUID_VARIANT_DCE) {
 | 
			
		||||
		printf("Warning: This program only knows how to interpret "
 | 
			
		||||
		       "DCE UUIDs.\n\tThe rest of the output is likely "
 | 
			
		||||
		       "to be incorrect!!\n");
 | 
			
		||||
	}
 | 
			
		||||
	printf("UUID type is %d", type);
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case 1:
 | 
			
		||||
		printf(" (time based)\n");
 | 
			
		||||
		break;
 | 
			
		||||
	case 2:
 | 
			
		||||
		printf(" (DCE)\n");
 | 
			
		||||
		break;
 | 
			
		||||
	case 3:
 | 
			
		||||
		printf(" (name-based)\n");
 | 
			
		||||
		break;
 | 
			
		||||
	case 4:
 | 
			
		||||
		printf(" (random)\n");
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		printf("\n");
 | 
			
		||||
	}
 | 
			
		||||
	if (type != 1) {
 | 
			
		||||
		printf("Warning: not a time-based UUID, so UUID time "
 | 
			
		||||
		       "decoding will likely not work!\n");
 | 
			
		||||
	}
 | 
			
		||||
	printf("UUID time is: (%ld, %ld): %s\n", tv.tv_sec, tv.tv_usec,
 | 
			
		||||
	       ctime(&time_reg));
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										54
									
								
								uuid/uuidd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								uuid/uuidd.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Definitions used by the uuidd daemon
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2007 Theodore Ts'o.
 | 
			
		||||
 *
 | 
			
		||||
 * %Begin-Header%
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, and the entire permission notice in its entirety,
 | 
			
		||||
 *    including the disclaimer of warranties.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote
 | 
			
		||||
 *    products derived from this software without specific prior
 | 
			
		||||
 *    written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 | 
			
		||||
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
 | 
			
		||||
 * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 | 
			
		||||
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 | 
			
		||||
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | 
			
		||||
 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
 | 
			
		||||
 * DAMAGE.
 | 
			
		||||
 * %End-Header%
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _UUID_UUIDD_H
 | 
			
		||||
#define _UUID_UUIDD_H
 | 
			
		||||
 | 
			
		||||
#define UUIDD_DIR		_PATH_LOCALSTATEDIR "/uuidd"
 | 
			
		||||
#define UUIDD_SOCKET_PATH	UUIDD_DIR "/request"
 | 
			
		||||
#define UUIDD_PIDFILE_PATH	UUIDD_DIR "/uuidd.pid"
 | 
			
		||||
#define UUIDD_PATH		"/usr/sbin/uuidd"
 | 
			
		||||
 | 
			
		||||
#define UUIDD_OP_GETPID			0
 | 
			
		||||
#define UUIDD_OP_GET_MAXOP		1
 | 
			
		||||
#define UUIDD_OP_TIME_UUID		2
 | 
			
		||||
#define UUIDD_OP_RANDOM_UUID		3
 | 
			
		||||
#define UUIDD_OP_BULK_TIME_UUID		4
 | 
			
		||||
#define UUIDD_OP_BULK_RANDOM_UUID	5
 | 
			
		||||
#define UUIDD_MAX_OP			UUIDD_OP_BULK_RANDOM_UUID
 | 
			
		||||
 | 
			
		||||
extern int __uuid_generate_time(uuid_t out, int *num);
 | 
			
		||||
extern void __uuid_generate_random(uuid_t out, int *num);
 | 
			
		||||
 | 
			
		||||
#endif /* _UUID_UUID_H */
 | 
			
		||||
		Reference in New Issue
	
	Block a user