From 6b78bb16d870e3fa3c2d09b21d1a4545e0f3d479 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 11 Aug 2019 11:12:21 -0300 Subject: [PATCH 1/3] convert c pointers to optional unknown length ptrs --- src/journal/journal.zig | 42 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/src/journal/journal.zig b/src/journal/journal.zig index d42d3e2..e1f6826 100644 --- a/src/journal/journal.zig +++ b/src/journal/journal.zig @@ -12,17 +12,12 @@ const c = @cImport({ const warn = std.debug.warn; const allocator = std.heap.c_allocator; -fn alloc_str(size: c_ulong) [*c]u8 { - return @ptrCast([*c]u8, @alignCast(@alignOf(u8), c.malloc(c_ulong(size)))); +fn sliceify(ptr: [*]u8) []u8 { + return ptr[0..c.strlen(ptr)]; } -fn free_str(ptr: [*c]u8) void { - c.free(@ptrCast(?*c_void, ptr)); -} - -export fn journal_open(topic_opt: [*c]u8) os.fd_t { - const topic_len = c.strlen(topic_opt); - const topic: []u8 = topic_opt[0..topic_len]; +export fn journal_open(topic_cptr: ?[*]u8) os.fd_t { + const topic = sliceify(topic_cptr.?); const journal_dir = std.fs.path.resolve(allocator, [_][]const u8{ std.os.getenvC(c"HOME").?, @@ -61,10 +56,11 @@ export fn journal_open(topic_opt: [*c]u8) os.fd_t { return fd; } -export fn journal_write(journal: os.fd_t, message: [*c]u8) void { - const msglen = c.strlen(message); - - std.os.write(journal, message[0..msglen]) catch |err| { +export fn journal_write(journal: os.fd_t, message_cptr: ?[*]u8) void { + std.os.write( + journal, + sliceify(message_cptr.?), + ) catch |err| { std.debug.warn("Error while writing to file: {}\n", err); return; }; @@ -76,24 +72,25 @@ export fn journal_close(journal: os.fd_t) void { export fn journal_write_topic( journal: os.fd_t, - topic_opt: [*c]u8, - message_opt: [*c]u8, + topic_cptr: ?[*]u8, + message_cptr: ?[*]u8, ) void { - var topic = topic_opt[0..c.strlen(topic_opt)]; - var message = message_opt[0..c.strlen(message_opt)]; + var topic = sliceify(topic_cptr.?); + var message = sliceify(message_cptr.?); + + var tstamp_total = allocator.alloc(u8, 128); + defer allocator.free(tstamp_total); - var tstamp_cstr: [*c]u8 = alloc_str(128); var rawtime: c.time_t = undefined; _ = c.time(&rawtime); var cur_time: [*c]const c.struct_tm = c.gmtime(&rawtime); - _ = c.strftime(tstamp_cstr, usize(128), c"%c", cur_time); + _ = c.strftime(tstamp_cstr.ptr, usize(128), c"%c", cur_time); - var tstamp = tstamp_cstr[0..c.strlen(tstamp_cstr)]; + var tstamp = sliceify(tstamp_total); std.debug.warn("tstamp: {}\ntopic: {}\nmsg: {}\n", tstamp, topic, message); - // catch unreachable is intended. var fmt_msg = std.fmt.allocPrint( allocator, "[{}] [{}]: {}\n", @@ -105,12 +102,11 @@ export fn journal_write_topic( return; }; + // catch unreachable is intended. var fmt_msg_cstr = std.cstr.addNullByte( allocator, fmt_msg, ) catch unreachable; - free_str(tstamp_cstr); - journal_write(journal, fmt_msg_cstr.ptr); } From f3b8196ac50f06c4228504caa05dc2bb91c2d5e0 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 11 Aug 2019 11:17:13 -0300 Subject: [PATCH 2/3] journal: catch err, add sliceifyKnown --- build.zig | 2 +- src/journal/journal.zig | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/build.zig b/build.zig index b2eaaac..4327cde 100644 --- a/build.zig +++ b/build.zig @@ -9,7 +9,7 @@ pub fn build(b: *Builder) void { const source_files = [_][]const u8{"src/journal/main.c"}; for (source_files) |source| { - exe.addCSourceFile(source, [_][]const u8{"-W -O"}); + exe.addCSourceFile(source, [_][]const u8{"-Wall"}); } const zig_sources = [_][]const u8{"src/journal/journal.zig"}; diff --git a/src/journal/journal.zig b/src/journal/journal.zig index e1f6826..af166b7 100644 --- a/src/journal/journal.zig +++ b/src/journal/journal.zig @@ -16,6 +16,10 @@ fn sliceify(ptr: [*]u8) []u8 { return ptr[0..c.strlen(ptr)]; } +fn sliceifyKnown(slice: []u8) []u8 { + return slice[0..c.strlen(slice.ptr)]; +} + export fn journal_open(topic_cptr: ?[*]u8) os.fd_t { const topic = sliceify(topic_cptr.?); @@ -75,19 +79,23 @@ export fn journal_write_topic( topic_cptr: ?[*]u8, message_cptr: ?[*]u8, ) void { + warn("zig uwu\n"); var topic = sliceify(topic_cptr.?); var message = sliceify(message_cptr.?); - var tstamp_total = allocator.alloc(u8, 128); + var tstamp_total = allocator.alloc(u8, 128) catch |err| { + warn("failed to allocate string for timestamp\n"); + return; + }; defer allocator.free(tstamp_total); var rawtime: c.time_t = undefined; _ = c.time(&rawtime); var cur_time: [*c]const c.struct_tm = c.gmtime(&rawtime); - _ = c.strftime(tstamp_cstr.ptr, usize(128), c"%c", cur_time); + _ = c.strftime(tstamp_total.ptr, usize(128), c"%c", cur_time); - var tstamp = sliceify(tstamp_total); + var tstamp = sliceifyKnown(tstamp_total); std.debug.warn("tstamp: {}\ntopic: {}\nmsg: {}\n", tstamp, topic, message); From 8e9faefc0ec6db4c2d4b30d56b7c712d1f7c5e02 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 11 Aug 2019 11:17:47 -0300 Subject: [PATCH 3/3] rm debug print --- src/journal/journal.zig | 1 - 1 file changed, 1 deletion(-) diff --git a/src/journal/journal.zig b/src/journal/journal.zig index af166b7..d320aa0 100644 --- a/src/journal/journal.zig +++ b/src/journal/journal.zig @@ -79,7 +79,6 @@ export fn journal_write_topic( topic_cptr: ?[*]u8, message_cptr: ?[*]u8, ) void { - warn("zig uwu\n"); var topic = sliceify(topic_cptr.?); var message = sliceify(message_cptr.?);