From b3a0dabe370361b78970755de8f8fd906c6cb0a5 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sun, 17 Jun 2007 05:03:23 +0000 Subject: [PATCH] Bring in the uuidgen utility from FreeBSD. Obtained-from: FreeBSD / Marcel Moolenaar --- usr.bin/uuidgen/Makefile | 9 ++++ usr.bin/uuidgen/uuidgen.1 | 81 +++++++++++++++++++++++++++++++++ usr.bin/uuidgen/uuidgen.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 202 insertions(+) create mode 100644 usr.bin/uuidgen/Makefile create mode 100644 usr.bin/uuidgen/uuidgen.1 create mode 100644 usr.bin/uuidgen/uuidgen.c diff --git a/usr.bin/uuidgen/Makefile b/usr.bin/uuidgen/Makefile new file mode 100644 index 0000000000..3699e24a2f --- /dev/null +++ b/usr.bin/uuidgen/Makefile @@ -0,0 +1,9 @@ +# $FreeBSD: src/usr.bin/uuidgen/Makefile,v 1.3 2007/04/09 19:16:48 pjd Exp $ +# $DragonFly: src/usr.bin/uuidgen/Makefile,v 1.1 2007/06/17 05:03:23 dillon Exp $ + +BINDIR= /bin + +PROG= uuidgen +WARNS?= 6 + +.include diff --git a/usr.bin/uuidgen/uuidgen.1 b/usr.bin/uuidgen/uuidgen.1 new file mode 100644 index 0000000000..49ea69687f --- /dev/null +++ b/usr.bin/uuidgen/uuidgen.1 @@ -0,0 +1,81 @@ +.\" 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: src/usr.bin/uuidgen/uuidgen.1,v 1.7 2005/09/07 07:49:21 rse Exp $ +.\" $DragonFly: src/usr.bin/uuidgen/uuidgen.1,v 1.1 2007/06/17 05:03:23 dillon Exp $ +.\" +.Dd September 7, 2005 +.Dt UUIDGEN 1 +.Os +.Sh NAME +.Nm uuidgen +.Nd generate universally unique identifiers +.Sh SYNOPSIS +.Nm +.Op Fl 1 +.Op Fl n Ar count +.Op Fl o Ar filename +.Sh DESCRIPTION +The +.Nm +utility by default generates a single DCE version 1 +universally unique identifier (UUID), +also known as a globally unique identifier (GUID). +The UUID is written to stdout by default. +The following options can be used to change the behaviour of +.Nm : +.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. +.It Fl o +Redirect output to +.Ar filename +instead of stdout. +.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 EXIT STATUS +.Ex -std +.Sh SEE ALSO +.Xr uuidgen 2 , +.Xr uuid 3 +.Sh HISTORY +The +.Nm +command first appeared in +.Fx 5.0 . diff --git a/usr.bin/uuidgen/uuidgen.c b/usr.bin/uuidgen/uuidgen.c new file mode 100644 index 0000000000..ec5af24770 --- /dev/null +++ b/usr.bin/uuidgen/uuidgen.c @@ -0,0 +1,112 @@ +/* + * 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: src/usr.bin/uuidgen/uuidgen.c,v 1.3 2003/03/15 02:27:10 marcel Exp $ + * $DragonFly: src/usr.bin/uuidgen/uuidgen.c,v 1.1 2007/06/17 05:03:23 dillon Exp $ + */ + +#include +#include +#include +#include +#include + +static void +usage(void) +{ + (void)fprintf(stderr, "usage: uuidgen [-1] [-n count] [-o filename]\n"); + exit(1); +} + +int +main(int argc, char *argv[]) +{ + FILE *fp; + uuid_t *store, *uuid; + char *p; + int ch, count, i, iterate; + + count = -1; /* no count yet */ + fp = stdout; /* default output file */ + iterate = 0; /* not one at a time */ + while ((ch = getopt(argc, argv, "1n:o:")) != -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; + case 'o': + if (fp != stdout) + errx(1, "multiple output files not allowed"); + fp = fopen(optarg, "w"); + if (fp == NULL) + err(1, "fopen"); + 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_to_string(uuid++, &p, NULL); + fprintf(fp, "%s\n", p); + free(p); + } + + free(store); + if (fp != stdout) + fclose(fp); + return (0); +} -- 2.11.4.GIT