memset.zig (876B) - Raw
1 const std = @import("std"); 2 const common = @import("./common.zig"); 3 const builtin = @import("builtin"); 4 5 comptime { 6 if (builtin.object_format != .c) { 7 @export(&memset, .{ .name = "memset", .linkage = common.linkage, .visibility = common.visibility }); 8 @export(&__memset, .{ .name = "__memset", .linkage = common.linkage, .visibility = common.visibility }); 9 } 10 } 11 12 pub fn memset(dest: ?[*]u8, c: u8, len: usize) callconv(.c) ?[*]u8 { 13 @setRuntimeSafety(false); 14 15 if (len != 0) { 16 var d = dest.?; 17 var n = len; 18 while (true) { 19 d[0] = c; 20 n -= 1; 21 if (n == 0) break; 22 d += 1; 23 } 24 } 25 26 return dest; 27 } 28 29 pub fn __memset(dest: ?[*]u8, c: u8, n: usize, dest_n: usize) callconv(.c) ?[*]u8 { 30 if (dest_n < n) 31 @panic("buffer overflow"); 32 return memset(dest, c, n); 33 }