From 219aa57fbd2f84277565ce8a520a49b217dce451 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Tue, 4 Jan 2022 22:19:50 -0800 Subject: [bun dev] Print error in status line text --- src/http.zig | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/http.zig b/src/http.zig index e7cd94d53..0f67f481d 100644 --- a/src/http.zig +++ b/src/http.zig @@ -536,6 +536,11 @@ pub const RequestContext = struct { return std.fmt.comptimePrint("HTTP/1.1 {d} {s}\r\n", .{ code, status_text }); } + var status_line_error_buf: [1024]u8 = undefined; + pub fn printStatusLineError(err: anyerror) []const u8 { + return std.fmt.bufPrint(&status_line_error_buf, "HTTP/1.1 500 {s}\r\n", .{@errorName(err)}) catch unreachable; + } + threadlocal var content_length_header_buf: [64]u8 = undefined; pub fn prepareToSendBody( @@ -612,6 +617,11 @@ pub const RequestContext = struct { ctx.status = code; } + pub fn writeStatusError(ctx: *RequestContext, err: anyerror) !void { + _ = try ctx.writeSocket(printStatusLineError(err), SOCKET_FLAGS); + ctx.status = @as(HTTPStatusCode, 500); + } + threadlocal var status_buf: [std.fmt.count("HTTP/1.1 {d} {s}\r\n", .{ 200, "OK" })]u8 = undefined; pub fn writeStatusSlow(ctx: *RequestContext, code: u16) !void { _ = try ctx.writeSocket( @@ -669,8 +679,8 @@ pub const RequestContext = struct { pub fn sendInternalError(ctx: *RequestContext, err: anytype) !void { defer ctx.done(); - try ctx.writeStatus(500); - const printed = std.fmt.bufPrint(&error_buf, "Error: {s}", .{@errorName(err)}) catch |err2| brk: { + try ctx.writeStatusError(err); + const printed = std.fmt.bufPrint(&error_buf, "error: {s}", .{@errorName(err)}) catch |err2| brk: { if (Environment.isDebug or Environment.isTest) { Global.panic("error while printing error: {s}", .{@errorName(err2)}); } @@ -1804,7 +1814,7 @@ pub const RequestContext = struct { switch (build_result.value) { .fail => { Output.prettyErrorln( - "Error: {s}", + "error: {s}", .{ file_path, }, -- cgit v1.2.3