← Commit list

405afbd55

Osama Abdelkader via busybox
Osama Abdelkader via busybox
2026-02-01
SUCCESS Duration: 163s

Subject

util-linux: add minimal uuidgen implementation

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0
gcc -Wp,-MD,applets/.usage.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer      -Iinclude -Iinclude -o applets/usage applets/usage.c

Build Log

(log yok)

Commit Diff GitHub →

libbb/xfuncs_printf.c+3 -3
@@ -642,14 +642,14 @@ void FAST_FUNC generate_uuid(uint8_t *buf)
* uint32_t time_low (big endian)
* uint16_t time_mid (big endian)
* uint16_t time_hi_and_version (big endian)
- * version is a 4-bit field:
+ * version is a 4-bit field (most significant 4 bits):
* 1 Time-based
* 2 DCE Security, with embedded POSIX UIDs
* 3 Name-based (MD5)
* 4 Randomly generated
* 5 Name-based (SHA-1)
* uint16_t clk_seq_and_variant (big endian)
- * variant is a 3-bit field:
+ * variant is a 3-bit field (most significant 3 bits):
* 0xx Reserved, NCS backward compatibility
* 10x The variant specified in rfc4122
* 110 Reserved, Microsoft backward compatibility
@@ -681,7 +681,7 @@ void FAST_FUNC generate_uuid(uint8_t *buf)
/* version = 4 */
buf[4 + 2 ] = (buf[4 + 2 ] & 0x0f) | 0x40;
- /* variant = 10x */
+ /* variant = 10x binary (uppermost 3 bits) */
buf[4 + 2 + 2] = (buf[4 + 2 + 2] & 0x3f) | 0x80;
}
util-linux/uuidgen.c+57 -0
@@ -0,0 +1,57 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Mini uuidgen implementation for busybox
+ *
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
+ */
+//config:config UUIDGEN
+//config: bool "uuidgen (1.1 kb)"
+//config: default y
+//config: help
+//config: Generate a UUID (Universally Unique Identifier) in RFC 4122 format.
+
+//applet:IF_UUIDGEN(APPLET_NOFORK(uuidgen, uuidgen, BB_DIR_USR_BIN, BB_SUID_DROP, uuidgen))
+
+//kbuild:lib-$(CONFIG_UUIDGEN) += uuidgen.o
+
+//usage:#define uuidgen_trivial_usage
+//usage: ""
+//usage:#define uuidgen_full_usage "\n\n"
+//usage: "Generate a random UUID"
+
+/* util-linux 2.41.1:
+ * -r, --random generate random-based uuid
+ * -t, --time generate time-based uuid
+ * -n, --namespace <ns> generate hash-based uuid in this namespace
+ * available namespaces: @dns @url @oid @x500
+ * -N, --name <name> generate hash-based uuid from this name
+ * -m, --md5 generate md5 hash
+ * -C, --count <num> generate more uuids in loop
+ * -s, --sha1 generate sha1 hash
+ * -6, --time-v6 generate time-based v6 uuid
+ * -7, --time-v7 generate time-based v7 uuid
+ * -x, --hex interpret name as hex string
+ * manpage:
+ * "By default uuidgen will generate a random-based UUID if a high-quality random number generator is present.
+ * Otherwise, it will choose a time-based UUID."
+ */
+#include "libbb.h"
+#include "volume_id/volume_id_internal.h"
+
+/* This is a NOFORK applet. Be very careful! */
+
+int uuidgen_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int uuidgen_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
+{
+ struct volume_id id;
+ uint8_t uuid[16];
+
+ /* support/ignore -r (--random) */
+ getopt32(argv, "^" "r" "\0" "=0"/* no args!*/);
+
+ generate_uuid(uuid);
+ volume_id_set_uuid(&id, uuid, UUID_DCE);
+ puts(id.uuid);
+
+ return 0;
+}