diff options
Diffstat (limited to 'bin/uuidgen')
-rw-r--r-- | bin/uuidgen/Makefile | 6 | ||||
-rw-r--r-- | bin/uuidgen/uuidgen.1 | 71 | ||||
-rw-r--r-- | bin/uuidgen/uuidgen.c | 113 |
3 files changed, 190 insertions, 0 deletions
diff --git a/bin/uuidgen/Makefile b/bin/uuidgen/Makefile new file mode 100644 index 0000000..81459e2 --- /dev/null +++ b/bin/uuidgen/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +PROG= uuidgen +WARNS?= 4 + +.include <bsd.prog.mk> diff --git a/bin/uuidgen/uuidgen.1 b/bin/uuidgen/uuidgen.1 new file mode 100644 index 0000000..d61f848 --- /dev/null +++ b/bin/uuidgen/uuidgen.1 @@ -0,0 +1,71 @@ +.\" Copyright (c) 2002 Marcel Moolenaar +.\" All rights reserved. +.\" +.\" 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, this list of conditions and the following disclaimer. +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd May 23, 2002 +.Dt UUIDGEN 1 +.Os +.Sh NAME +.Nm uuidgen +.Nd generate universally unique identifiers +.Sh SYNOPSIS +.Nm +.Op Fl 1 +.Op Fl n Ar count +.Sh DESCRIPTION +The +.Nm +utility by default generates a single universally unique identifier (UUID), +also known as a globally unique identifier (GUID). The UUID is written to +stdout. The following options can be used to change the number of identifiers +and the method used: +.Bl -tag -width indent +.It Fl 1 +This option only has effect if multiple identifiers are to be generated and +instructs +.Nm +to not generate them in batch, but one at a time. +.It Fl n +This option controls the number of identifiers generated. By default, multiple +identifiers are generated in batch. +.El +.Pp +Batched generation yields a dense set of identifiers in such a way that there +is no identifier that is larger than the smallest identifier in the set and +smaller than the largest identifier in the set and that is not already in the +set. +.Pp +When generating the identifiers one at a time, the identifiers will be close +to each other, but operating system latency and processing time will be +reflected in the distance between two successive identifiers. +.Sh DIAGNOSTICS +.Ex -std +.Sh SEE ALSO +.Xr uuidgen 2 +.Sh HISTORY +The +.Nm +command first appeared in +.Fx 5.0 . diff --git a/bin/uuidgen/uuidgen.c b/bin/uuidgen/uuidgen.c new file mode 100644 index 0000000..59fd446 --- /dev/null +++ b/bin/uuidgen/uuidgen.c @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2002 Marcel Moolenaar + * All rights reserved. + * + * 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, this list of conditions and the following disclaimer. + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <sys/endian.h> +#include <sys/uuid.h> + +#include <err.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static void +usage(void) +{ + (void)fprintf(stderr, "usage: uuidgen [-1] [-n count]\n"); + exit(1); +} + +static void +uuid_print(uuid_t *uuid) +{ + printf("%08x-%04x-%04x-%02x%02x-", uuid->time_low, uuid->time_mid, + uuid->time_hi_and_version, uuid->clock_seq_hi_and_reserved, + uuid->clock_seq_low); + printf("%02x%02x%02x%02x%02x%02x\n", uuid->node[0], uuid->node[1], + uuid->node[2], uuid->node[3], uuid->node[4], uuid->node[5]); +} + +int +main(int argc, char *argv[]) +{ + uuid_t *store, *uuid; + char *p; + int ch, count, i, iterate; + + count = -1; /* no count yet */ + iterate = 0; /* not one at a time */ + while ((ch = getopt(argc, argv, "1n:")) != -1) + switch (ch) { + case '1': + iterate = 1; + break; + case 'n': + if (count > 0) + usage(); + count = strtol(optarg, &p, 10); + if (*p != 0 || count < 1) + usage(); + break; + default: + usage(); + } + argv += optind; + argc -= optind; + + if (argc) + usage(); + + if (count == -1) + count = 1; + + store = (uuid_t*)malloc(sizeof(uuid_t) * count); + if (store == NULL) + err(1, "malloc()"); + + if (!iterate) { + /* Get them all in a single batch */ + if (uuidgen(store, count) != 0) + err(1, "uuidgen()"); + } else { + uuid = store; + for (i = 0; i < count; i++) { + if (uuidgen(uuid++, 1) != 0) + err(1, "uuidgen()"); + } + } + + uuid = store; + while (count--) + uuid_print(uuid++); + + free(store); + return (0); +} |