From 519137df0522d94762aead1dc1d9ab1b6040af1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Fri, 11 Oct 2024 09:30:17 +0200 Subject: [PATCH] fix pointer initialization --- src/main.zig | 4 ---- src/tunnel.zig | 26 ++++++++++++-------------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/main.zig b/src/main.zig index 6275bbc..c8a3f67 100644 --- a/src/main.zig +++ b/src/main.zig @@ -16,10 +16,6 @@ pub fn main() !void { try bw.flush(); // don't forget to flush! } -const Tunnel = struct { - name: []u8, -}; - test "simple test" { var list = std.ArrayList(i32).init(std.testing.allocator); defer list.deinit(); // try commenting this out and see if zig detects the memory leak! diff --git a/src/tunnel.zig b/src/tunnel.zig index ca09842..6fc6d69 100644 --- a/src/tunnel.zig +++ b/src/tunnel.zig @@ -9,8 +9,7 @@ const IFF_TUN = 0x0001; // const IFF_NO_PI = 0x1000; // const TUNSETIFF = 0x400454ca; // compile a C program, run and see -dev_buf: [posix.IFNAMESIZE:0]u8, -dev: [:0]u8, +dev: [posix.IFNAMESIZE:0]u8, tunFile: posix.fd_t, pub fn init(devname: ?[]const u8) !Tunnel { @@ -41,17 +40,12 @@ pub fn init(devname: ?[]const u8) !Tunnel { } var tunnel = Tunnel{ - .dev = undefined, - .dev_buf = .{0} ** posix.IFNAMESIZE, + .dev = .{0} ** posix.IFNAMESIZE, .tunFile = tunFile, }; const ifname = mem.sliceTo(&ifr.ifrn.name, 0); - @memcpy(tunnel.dev_buf[0..ifname.len], ifname); - tunnel.dev = tunnel.dev_buf[0..ifname.len :0]; - std.debug.print("&tunnel = {*}\n", .{&tunnel}); - std.debug.print("&tunnel.dev = {*}\n", .{tunnel.dev}); - + @memcpy(tunnel.dev[0..ifname.len], ifname); return tunnel; } @@ -61,10 +55,14 @@ pub fn close(self: *Tunnel) void { const Tunnel = @This(); -test "init" { +test "init with a known name" { var tun = try init("nyotun"); - std.debug.print("&tun = {*}\n", .{&tun}); - std.debug.print("&tun.dev = {*}\n", .{tun.dev}); - try std.testing.expectEqualStrings("nyotun", tun.dev); - tun.close(); + defer tun.close(); + try std.testing.expectEqualStrings("nyotun", mem.sliceTo(&tun.dev, 0)); +} + +test "init with no name" { + var tun = try init(null); + defer tun.close(); + try std.testing.expectStringStartsWith(mem.sliceTo(&tun.dev, 0), "tun"); }