From f0f2dcddaad97ce8ad0963ec327ad0fb2285e2bd Mon Sep 17 00:00:00 2001 From: Thomas Cort Date: Wed, 23 Oct 2013 20:15:02 -0400 Subject: [PATCH] Importing usr.bin/uuidgen No Minix-specific changes needed. Change-Id: I8ab26f911ff9af2a41c3866badd66c16ed82b509 --- distrib/sets/lists/minix/mi | 2 + releasetools/nbsd_ports | 1 + usr.bin/Makefile | 1 + usr.bin/uuidgen/Makefile | 5 + usr.bin/uuidgen/uuidgen.1 | 86 +++++++++++++++++ usr.bin/uuidgen/uuidgen.c | 185 ++++++++++++++++++++++++++++++++++++ 6 files changed, 280 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/distrib/sets/lists/minix/mi b/distrib/sets/lists/minix/mi index c86b1cb3d..c8642c1dc 100644 --- a/distrib/sets/lists/minix/mi +++ b/distrib/sets/lists/minix/mi @@ -529,6 +529,7 @@ ./usr/bin/uudecode minix-sys ./usr/bin/uue minix-sys ./usr/bin/uuencode minix-sys +./usr/bin/uuidgen minix-sys ./usr/bin/version minix-sys ./usr/bin/vi minix-sys ./usr/bin/view minix-sys @@ -2085,6 +2086,7 @@ ./usr/man/man1/users.1 minix-sys ./usr/man/man1/uud.1 minix-sys ./usr/man/man1/uue.1 minix-sys +./usr/man/man1/uuidgen.1 minix-sys ./usr/man/man1/vi.1 minix-sys ./usr/man/man1/view.1 minix-sys ./usr/man/man1/vol.1 minix-sys diff --git a/releasetools/nbsd_ports b/releasetools/nbsd_ports index 1f2765f46..c10508b08 100644 --- a/releasetools/nbsd_ports +++ b/releasetools/nbsd_ports @@ -207,6 +207,7 @@ 2013/10/23 12:00:00,usr.bin/units 2013/10/14 12:00:00,usr.bin/unzip 2013/10/14 12:00:00,usr.bin/users +2013/10/23 12:00:00,usr.bin/uuidgen 2012/10/17 12:00:00,usr.bin/wc 2013/03/22 12:00:00,usr.bin/whatis 2013/03/15 12:00:00,usr.bin/who diff --git a/usr.bin/Makefile b/usr.bin/Makefile index e8b64c5fb..87309c805 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -29,6 +29,7 @@ SUBDIR= \ tr tsort unexpand \ toproto \ uniq units unzip users \ + uuidgen \ \ wc whatis who \ xargs xinstall yes diff --git a/usr.bin/uuidgen/Makefile b/usr.bin/uuidgen/Makefile new file mode 100644 index 000000000..9e8aa41ca --- /dev/null +++ b/usr.bin/uuidgen/Makefile @@ -0,0 +1,5 @@ +# $NetBSD: Makefile,v 1.2 2009/04/14 22:15:28 lukem Exp $ + +PROG= uuidgen + +.include diff --git a/usr.bin/uuidgen/uuidgen.1 b/usr.bin/uuidgen/uuidgen.1 new file mode 100644 index 000000000..84db94fb6 --- /dev/null +++ b/usr.bin/uuidgen/uuidgen.1 @@ -0,0 +1,86 @@ +.\" $NetBSD: uuidgen.1,v 1.2 2004/09/13 23:44:04 wiz Exp $ +.\" +.\" 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.5 2003/05/22 13:10:32 ru Exp $ +.\" +.Dd September 13, 2004 +.Dt UUIDGEN 1 +.Os +.Sh NAME +.Nm uuidgen +.Nd generate universally unique identifiers +.Sh SYNOPSIS +.Nm +.Op Fl 1s +.Op Fl n Ar count +.Op Fl o Ar filename +.Sh DESCRIPTION +The +.Nm +utility by default generates a single universally unique identifier (UUID), +also known as a globally unique identifier (GUID). +By default, +.Nm +generates a single UUID and outputs it in the standard string representation +to stdout. +The following options can be used to change the behavior of +.Nm : +.Bl -tag -offset indent -width XoXfilenameXX +.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 Ar count +This option controls the number of identifiers generated. +By default, multiple identifiers are generated in batch. +.It Fl o Ar filename +Redirect output to +.Ar filename +instead of stdout. +.It Fl s +Output UUIDs as initialized C structures, rather than in the standard +string format. +.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 , +.Xr uuid 3 +.Sh HISTORY +The +.Nm +command first appeared in +.Nx 3.0 . diff --git a/usr.bin/uuidgen/uuidgen.c b/usr.bin/uuidgen/uuidgen.c new file mode 100644 index 000000000..59aa7ae45 --- /dev/null +++ b/usr.bin/uuidgen/uuidgen.c @@ -0,0 +1,185 @@ +/* $NetBSD: uuidgen.c,v 1.4 2011/09/16 15:39:30 joerg Exp $ */ + +/*- + * Copyright (c) 2004 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * 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 NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``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 FOUNDATION OR CONTRIBUTORS + * 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. + */ + +/* + * 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. + */ + +#include +__RCSID("$NetBSD: uuidgen.c,v 1.4 2011/09/16 15:39:30 joerg Exp $"); + +#include +#include +#include +#include +#include + +__dead static void +usage(void) +{ + + (void)fprintf(stderr, "usage: %s [-1s] [-n count] [-o filename]\n", + getprogname()); + exit(1); +} + +int +main(int argc, char *argv[]) +{ + FILE *fp; + uuid_t *store, *uuid; + char *p; + int ch, count, i, iterate, c_struct; + + count = -1; /* no count yet */ + fp = stdout; /* default output file */ + iterate = 0; /* not one at a time */ + c_struct = 0; /* not as a C structure */ + + while ((ch = getopt(argc, argv, "1n:o:s")) != -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; + case 's': + c_struct = 1; + 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); + if (c_struct) { + fprintf(fp, "= { /* %s */\n", p); /* } */ + /* + * Chunk up the string for processing: + * + * aaaaaaaa-bbbb-cccc-dddd-0123456789ab + * + * We output it like so: + * + * = { \/\* aaaaaaaa-bbbb-cccc-ddee-0123456789ab \*\/ + * 0xaaaaaaaa, + * 0xbbbb, + * 0xcccc, + * 0xdd, + * 0xee, + * { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab } + * }; + */ + p[8] = '\0'; /* aaaaaaaa */ + p[13] = '\0'; /* bbbb */ + p[18] = '\0'; /* cccc */ + p[23] = '\0'; /* dddd */ + fprintf(fp, "\t0x%s,\n", p); + fprintf(fp, "\t0x%s,\n", &p[9]); + fprintf(fp, "\t0x%s,\n", &p[14]); + fprintf(fp, "\t0x%c%c,\n", p[19], p[20]); + fprintf(fp, "\t0x%c%c,\n", p[21], p[22]); + fprintf(fp, "\t{ 0x%c%c, 0x%c%c, 0x%c%c, 0x%c%c, " + "0x%c%c, 0x%c%c }\n", + p[24], p[25], p[26], p[27], + p[28], p[29], p[30], p[31], + p[32], p[33], p[34], p[35]); + /* { */ fprintf(fp, "};\n"); + } else + fprintf(fp, "%s\n", p); + free(p); + } + + free(store); + if (fp != stdout) + fclose(fp); + return (0); +}