Compare commits
No commits in common. "8e9faefc0ec6db4c2d4b30d56b7c712d1f7c5e02" and "ca7a655ebb35453b408dac82923049000499e1d3" have entirely different histories.
8e9faefc0e
...
ca7a655ebb
2 changed files with 22 additions and 25 deletions
|
@ -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{"-Wall"});
|
||||
exe.addCSourceFile(source, [_][]const u8{"-W -O"});
|
||||
}
|
||||
|
||||
const zig_sources = [_][]const u8{"src/journal/journal.zig"};
|
||||
|
|
|
@ -12,16 +12,17 @@ const c = @cImport({
|
|||
const warn = std.debug.warn;
|
||||
const allocator = std.heap.c_allocator;
|
||||
|
||||
fn sliceify(ptr: [*]u8) []u8 {
|
||||
return ptr[0..c.strlen(ptr)];
|
||||
fn alloc_str(size: c_ulong) [*c]u8 {
|
||||
return @ptrCast([*c]u8, @alignCast(@alignOf(u8), c.malloc(c_ulong(size))));
|
||||
}
|
||||
|
||||
fn sliceifyKnown(slice: []u8) []u8 {
|
||||
return slice[0..c.strlen(slice.ptr)];
|
||||
fn free_str(ptr: [*c]u8) void {
|
||||
c.free(@ptrCast(?*c_void, ptr));
|
||||
}
|
||||
|
||||
export fn journal_open(topic_cptr: ?[*]u8) os.fd_t {
|
||||
const topic = sliceify(topic_cptr.?);
|
||||
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];
|
||||
|
||||
const journal_dir = std.fs.path.resolve(allocator, [_][]const u8{
|
||||
std.os.getenvC(c"HOME").?,
|
||||
|
@ -60,11 +61,10 @@ export fn journal_open(topic_cptr: ?[*]u8) os.fd_t {
|
|||
return fd;
|
||||
}
|
||||
|
||||
export fn journal_write(journal: os.fd_t, message_cptr: ?[*]u8) void {
|
||||
std.os.write(
|
||||
journal,
|
||||
sliceify(message_cptr.?),
|
||||
) catch |err| {
|
||||
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| {
|
||||
std.debug.warn("Error while writing to file: {}\n", err);
|
||||
return;
|
||||
};
|
||||
|
@ -76,28 +76,24 @@ export fn journal_close(journal: os.fd_t) void {
|
|||
|
||||
export fn journal_write_topic(
|
||||
journal: os.fd_t,
|
||||
topic_cptr: ?[*]u8,
|
||||
message_cptr: ?[*]u8,
|
||||
topic_opt: [*c]u8,
|
||||
message_opt: [*c]u8,
|
||||
) void {
|
||||
var topic = sliceify(topic_cptr.?);
|
||||
var message = sliceify(message_cptr.?);
|
||||
|
||||
var tstamp_total = allocator.alloc(u8, 128) catch |err| {
|
||||
warn("failed to allocate string for timestamp\n");
|
||||
return;
|
||||
};
|
||||
defer allocator.free(tstamp_total);
|
||||
var topic = topic_opt[0..c.strlen(topic_opt)];
|
||||
var message = message_opt[0..c.strlen(message_opt)];
|
||||
|
||||
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_total.ptr, usize(128), c"%c", cur_time);
|
||||
_ = c.strftime(tstamp_cstr, usize(128), c"%c", cur_time);
|
||||
|
||||
var tstamp = sliceifyKnown(tstamp_total);
|
||||
var tstamp = tstamp_cstr[0..c.strlen(tstamp_cstr)];
|
||||
|
||||
std.debug.warn("tstamp: {}\ntopic: {}\nmsg: {}\n", tstamp, topic, message);
|
||||
|
||||
// catch unreachable is intended.
|
||||
var fmt_msg = std.fmt.allocPrint(
|
||||
allocator,
|
||||
"[{}] [{}]: {}\n",
|
||||
|
@ -109,11 +105,12 @@ 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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue