From fae316ed885469393adce80b8eaa2bf2eabb0ef9 Mon Sep 17 00:00:00 2001 From: rodolpheh Date: Fri, 30 May 2025 08:34:21 +0100 Subject: [PATCH 1/5] Add synchronous wget (requires ASYNCIFY) --- src/zemscripten.zig | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/zemscripten.zig b/src/zemscripten.zig index 2cf19d7..081e4cb 100644 --- a/src/zemscripten.zig +++ b/src/zemscripten.zig @@ -197,3 +197,25 @@ pub fn log( else => emscripten_console_log(@ptrCast(msg.ptr)), } } + +// Networking +extern fn emscripten_wget(url: [*c]const u8, file: [*c]const u8) c_int; +extern fn emscripten_wget_data(url: [*c]const u8, pbuffer: **anyopaque, pnum: *c_int, perror: *c_int) void; + +pub fn Wget(url: []const u8, file: []const u8) c_int { + return emscripten_wget(url.ptr, file.ptr); +} + +pub fn WgetData(url: []const u8) ![]u8 { + var buffer_ptr: *anyopaque = undefined; + var len: c_int = undefined; + var err: c_int = undefined; + + emscripten_wget_data(url.ptr, &buffer_ptr, &len, &err); + + if (err != 0) { + return error.WgetError; + } + + return @as([*]u8, @ptrCast(buffer_ptr))[0..@intCast(len)]; +} From f08cecd543a29d4fb64229b330f729f0fab87bb9 Mon Sep 17 00:00:00 2001 From: rodolpheh Date: Sun, 24 Aug 2025 10:39:40 +0100 Subject: [PATCH 2/5] Enforce null-terminated url --- src/zemscripten.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zemscripten.zig b/src/zemscripten.zig index 081e4cb..f78799a 100644 --- a/src/zemscripten.zig +++ b/src/zemscripten.zig @@ -206,7 +206,7 @@ pub fn Wget(url: []const u8, file: []const u8) c_int { return emscripten_wget(url.ptr, file.ptr); } -pub fn WgetData(url: []const u8) ![]u8 { +pub fn WgetData(url: [:0]const u8) ![]u8 { var buffer_ptr: *anyopaque = undefined; var len: c_int = undefined; var err: c_int = undefined; From 14c8500ec8a408acf757ade57aa76c6b8ddfcb21 Mon Sep 17 00:00:00 2001 From: rodolpheh Date: Mon, 25 Aug 2025 09:48:15 +0100 Subject: [PATCH 3/5] Enforce null-terminated url for Wget --- src/zemscripten.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zemscripten.zig b/src/zemscripten.zig index f78799a..acf24df 100644 --- a/src/zemscripten.zig +++ b/src/zemscripten.zig @@ -202,7 +202,7 @@ pub fn log( extern fn emscripten_wget(url: [*c]const u8, file: [*c]const u8) c_int; extern fn emscripten_wget_data(url: [*c]const u8, pbuffer: **anyopaque, pnum: *c_int, perror: *c_int) void; -pub fn Wget(url: []const u8, file: []const u8) c_int { +pub fn Wget(url: [:0]const u8, file: [:0]const u8) c_int { return emscripten_wget(url.ptr, file.ptr); } From a45d5cdabf5b7520cd7934936074f37108d8ddf0 Mon Sep 17 00:00:00 2001 From: rodolpheh Date: Mon, 25 Aug 2025 09:52:23 +0100 Subject: [PATCH 4/5] Rename functions to follow Zig coding style --- src/zemscripten.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zemscripten.zig b/src/zemscripten.zig index acf24df..bbd475e 100644 --- a/src/zemscripten.zig +++ b/src/zemscripten.zig @@ -202,11 +202,11 @@ pub fn log( extern fn emscripten_wget(url: [*c]const u8, file: [*c]const u8) c_int; extern fn emscripten_wget_data(url: [*c]const u8, pbuffer: **anyopaque, pnum: *c_int, perror: *c_int) void; -pub fn Wget(url: [:0]const u8, file: [:0]const u8) c_int { +pub fn wget(url: [:0]const u8, file: [:0]const u8) c_int { return emscripten_wget(url.ptr, file.ptr); } -pub fn WgetData(url: [:0]const u8) ![]u8 { +pub fn wget_data(url: [:0]const u8) ![]u8 { var buffer_ptr: *anyopaque = undefined; var len: c_int = undefined; var err: c_int = undefined; From f1bd285b41a700c03d9f3bb66b31579e87f23d41 Mon Sep 17 00:00:00 2001 From: rodolpheh Date: Mon, 25 Aug 2025 10:00:58 +0100 Subject: [PATCH 5/5] Make wget more Zig-ish --- src/zemscripten.zig | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/zemscripten.zig b/src/zemscripten.zig index bbd475e..f33a635 100644 --- a/src/zemscripten.zig +++ b/src/zemscripten.zig @@ -202,8 +202,10 @@ pub fn log( extern fn emscripten_wget(url: [*c]const u8, file: [*c]const u8) c_int; extern fn emscripten_wget_data(url: [*c]const u8, pbuffer: **anyopaque, pnum: *c_int, perror: *c_int) void; -pub fn wget(url: [:0]const u8, file: [:0]const u8) c_int { - return emscripten_wget(url.ptr, file.ptr); +pub fn wget(url: [:0]const u8, file: [:0]const u8) !void { + if (emscripten_wget(url.ptr, file.ptr) != 0) { + return error.WgetError; + } } pub fn wget_data(url: [:0]const u8) ![]u8 {