From c5489bbefb070eeb3a49b80c534bd605b8fabc4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Fri, 11 Oct 2024 08:37:13 +0200 Subject: [PATCH] pointer chasing --- build.zig | 1 - src/tunnel.zig | 18 +++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/build.zig b/build.zig index 5720db2..8df2ed5 100644 --- a/build.zig +++ b/build.zig @@ -70,7 +70,6 @@ pub fn build(b: *std.Build) void { .optimize = optimize, }); - exe_unit_tests.setExecCmd(&.{"/run/current-system/sw/bin/false"}); const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); // Similar to creating the run step earlier, this exposes a `test` step to diff --git a/src/tunnel.zig b/src/tunnel.zig index 91260ab..ca09842 100644 --- a/src/tunnel.zig +++ b/src/tunnel.zig @@ -9,7 +9,8 @@ const IFF_TUN = 0x0001; // const IFF_NO_PI = 0x1000; // const TUNSETIFF = 0x400454ca; // compile a C program, run and see -dev: [posix.IFNAMESIZE - 1:0]u8, +dev_buf: [posix.IFNAMESIZE:0]u8, +dev: [:0]u8, tunFile: posix.fd_t, pub fn init(devname: ?[]const u8) !Tunnel { @@ -29,9 +30,7 @@ pub fn init(devname: ?[]const u8) !Tunnel { ifr.ifru.flags = IFF_TUN | IFF_NO_PI; if (devname) |name| { - if (name.len >= posix.IFNAMESIZE - 1) { - return error.BadInterfaceName; - } + if (name.len >= posix.IFNAMESIZE - 1) return error.BadInterfaceName; @memcpy(ifr.ifrn.name[0..name.len], name); } @@ -43,9 +42,15 @@ pub fn init(devname: ?[]const u8) !Tunnel { var tunnel = Tunnel{ .dev = undefined, + .dev_buf = .{0} ** posix.IFNAMESIZE, .tunFile = tunFile, }; - @memcpy(tunnel.dev[0..posix.IFNAMESIZE], mem.sliceTo(&ifr.ifrn.name, 0)); + + 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}); return tunnel; } @@ -58,5 +63,8 @@ const Tunnel = @This(); test "init" { 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(); }