From 91020a2741b5b94d9d85403431b376b7a6daf136 Mon Sep 17 00:00:00 2001 From: Szymon Nowakowski Date: Wed, 24 Jun 2026 13:15:57 +0200 Subject: [PATCH] web: Update UUID code to zig 0.16.0 --- packages/web/src/UUID.zig | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/web/src/UUID.zig b/packages/web/src/UUID.zig index 43247ab..11dbfc2 100644 --- a/packages/web/src/UUID.zig +++ b/packages/web/src/UUID.zig @@ -5,9 +5,10 @@ bytes: [16]u8, pub const zero: UUID = .{ .bytes = @splat(0) }; -pub fn v4() UUID { +pub fn v4(io: std.Io) UUID { var bytes: [16]u8 = undefined; - std.crypto.random.bytes(&bytes); + + io.random(&bytes); bytes[6] = (bytes[6] & 0x0F) | 0x40; bytes[8] = (bytes[8] & 0x3F) | 0x80; return .{ .bytes = bytes }; @@ -35,7 +36,7 @@ pub const namespaces = struct { pub fn v5(namespace: UUID, name: []const u8) UUID { const hash = blk: { var hasher = std.crypto.hash.Sha1.init(.{}); - hasher.update(namespace); + hasher.update(namespace.bytes); hasher.update(name); break :blk hasher.finalResult(); }; @@ -47,13 +48,13 @@ pub fn v5(namespace: UUID, name: []const u8) UUID { return .{ .bytes = bytes }; } -var v7_lock: std.Thread.Mutex = .{}; -var v7_last_timestamp: std.atomic.Value(u64) = .{ .raw = 0 }; -var v7_counter: std.atomic.Value(u32) = .{ .raw = 0 }; +var v7_lock: std.Io.Mutex = .init; +var v7_last_timestamp: std.atomic.Value(u64) = .init(0); +var v7_counter: std.atomic.Value(u32) = .init(0); -fn getCount(timestamp: u64) u32 { - v7_lock.lock(); - defer v7_lock.unlock(); +fn getCount(io: std.Io, timestamp: u64) u32 { + v7_lock.lockUncancelable(io); + defer v7_lock.unlock(io); if (v7_last_timestamp.swap(timestamp, .monotonic) != timestamp) { v7_counter.store(0, .monotonic); @@ -62,12 +63,12 @@ fn getCount(timestamp: u64) u32 { return v7_counter.fetchAdd(1, .monotonic) % 4096; } -pub fn v7() UUID { +pub fn v7(io: std.Io) UUID { const timestamp: u64 = @intCast(@max(0, std.time.milliTimestamp())); const count = getCount(timestamp); const random = blk: { var bytes: [8]u8 = undefined; - std.crypto.random.bytes(&bytes); + io.random(&bytes); break :blk bytes; };