Importing usr.bin/uuidgen

No Minix-specific changes needed.

Change-Id: I8ab26f911ff9af2a41c3866badd66c16ed82b509
This commit is contained in:
Thomas Cort 2013-10-23 20:15:02 -04:00
parent 2106ea4754
commit f0f2dcddaa
6 changed files with 280 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -29,6 +29,7 @@ SUBDIR= \
tr tsort unexpand \
toproto \
uniq units unzip users \
uuidgen \
\
wc whatis who \
xargs xinstall yes

5
usr.bin/uuidgen/Makefile Normal file
View File

@ -0,0 +1,5 @@
# $NetBSD: Makefile,v 1.2 2009/04/14 22:15:28 lukem Exp $
PROG= uuidgen
.include <bsd.prog.mk>

86
usr.bin/uuidgen/uuidgen.1 Normal file
View File

@ -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 .

185
usr.bin/uuidgen/uuidgen.c Normal file
View File

@ -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 <sys/cdefs.h>
__RCSID("$NetBSD: uuidgen.c,v 1.4 2011/09/16 15:39:30 joerg Exp $");
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <uuid.h>
__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);
}