From ae98019e60483a992668a7e79cb94ab7be5d03c7 Mon Sep 17 00:00:00 2001 From: Rene Schallner Date: Tue, 12 Sep 2023 18:36:57 +0200 Subject: [PATCH] data as string --- src/zap.zig | 67 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/src/zap.zig b/src/zap.zig index c51980d..d8c8436 100644 --- a/src/zap.zig +++ b/src/zap.zig @@ -623,38 +623,49 @@ pub fn Fiobj2HttpParam(o: fio.FIOBJ, a: std.mem.Allocator, dupe_string: bool) !? const data = fio.fiobj_hash_get(o, key_data); var data_slice: ?[]const u8 = null; - if (fio.is_invalid(data) == 1) { - data_slice = "(zap: invalid data)"; - } else { - // the data - const data_len = fio.fiobj_data_len(data); - var data_buf = fio.fiobj_data_read(data, data_len); - if (data_len < 0) { - std.log.warn("WARNING: HTTP param binary file size negative: {d}\n", .{data_len}); - std.log.warn("FIOBJ_TYPE of data is: {d}\n", .{fio.fiobj_type(data)}); - - // try to read anyway - std.log.warn("WARNING: Attempting to read anyway\n", .{}); - data_buf = fio.fiobj_data_read(data, 4096); - if (data_buf.len > 0) { - data_slice = data_buf.data[0..data_buf.len]; + switch (fio.fiobj_type(data)) { + fio.FIOBJ_T_DATA => { + if (fio.is_invalid(data) == 1) { + data_slice = "(zap: invalid data)"; + std.log.warn("WARNING: HTTP param binary file is not a data object\n", .{}); } else { - std.log.warn("WARNING: HTTP param binary file buffer size negative: {d}\n", .{data_buf.len}); - data_slice = "(zap: invalid data: negative BUFFER size)"; - } - } else { - if (data_buf.len != data_len) { - std.log.warn("WARNING: HTTP param binary file size mismatch: should {d}, is: {d}\n", .{ data_len, data_buf.len }); - } + // the data + const data_len = fio.fiobj_data_len(data); + var data_buf = fio.fiobj_data_read(data, data_len); - if (data_buf.len > 0) { - data_slice = data_buf.data[0..data_buf.len]; - } else { - std.log.warn("WARNING: HTTP param binary file buffer size negative: {d}\n", .{data_buf.len}); - data_slice = "(zap: invalid data: negative BUFFER size)"; + if (data_len < 0) { + std.log.warn("WARNING: HTTP param binary file size negative: {d}\n", .{data_len}); + std.log.warn("FIOBJ_TYPE of data is: {d}\n", .{fio.fiobj_type(data)}); + } else { + if (data_buf.len != data_len) { + std.log.warn("WARNING: HTTP param binary file size mismatch: should {d}, is: {d}\n", .{ data_len, data_buf.len }); + } + + if (data_buf.len > 0) { + data_slice = data_buf.data[0..data_buf.len]; + } else { + std.log.warn("WARNING: HTTP param binary file buffer size negative: {d}\n", .{data_buf.len}); + data_slice = "(zap: invalid data: negative BUFFER size)"; + } + } } - } + }, + fio.FIOBJ_T_STRING => { + const fiostr = fio.fiobj_obj2cstr(data); + if (fiostr.len == 0) { + data_slice = "(zap: epmty string data)"; + std.log.warn("WARNING: HTTP param binary file has empty string object\n", .{}); + } else { + data_slice = fiostr.data[0..fiostr.len]; + } + }, + fio.FIOBJ_T_ARRAY => { + std.log.warn("WARNING: HTTP param binary file as array object is not implemented\n", .{}); + }, + else => { + // don't know what to do + }, } return .{ .Unsupported_Hash = .{