vlib: use `malloc_noscan()` where possible (#10465)

pull/10469/head
Uwe Krüger 2021-06-15 13:47:11 +02:00 committed by GitHub
parent af60eba5e6
commit 60c880a0cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 56 additions and 83 deletions

View File

@ -145,7 +145,7 @@ fn main() {
app.ttf_render << &ttf.TTF_render_Sokol{ app.ttf_render << &ttf.TTF_render_Sokol{
bmp: &ttf.BitMap{ bmp: &ttf.BitMap{
tf: &(app.tf[0]) tf: &(app.tf[0])
buf: unsafe { malloc(32000000) } buf: unsafe { malloc_noscan(32000000) }
buf_size: (32000000) buf_size: (32000000)
color: 0xFF0000FF color: 0xFF0000FF
// style: .raw // style: .raw

View File

@ -42,7 +42,7 @@ fn (nn int) str_l(max int) string {
is_neg = true is_neg = true
} }
mut index := max mut index := max
mut buf := malloc(max + 1) mut buf := malloc_noscan(max + 1)
buf[index] = 0 buf[index] = 0
index-- index--
@ -119,7 +119,7 @@ pub fn (nn u32) str() string {
return '0' return '0'
} }
max := 12 max := 12
mut buf := malloc(max + 1) mut buf := malloc_noscan(max + 1)
mut index := max mut index := max
buf[index] = 0 buf[index] = 0
index-- index--
@ -163,7 +163,7 @@ pub fn (nn i64) str() string {
return '0' return '0'
} }
max := 20 max := 20
mut buf := malloc(max + 1) mut buf := malloc_noscan(max + 1)
mut is_neg := false mut is_neg := false
if n < 0 { if n < 0 {
n = -n n = -n
@ -210,7 +210,7 @@ pub fn (nn u64) str() string {
return '0' return '0'
} }
max := 20 max := 20
mut buf := malloc(max + 1) mut buf := malloc_noscan(max + 1)
mut index := max mut index := max
buf[index] = 0 buf[index] = 0
index-- index--
@ -423,7 +423,7 @@ pub fn (b byte) str() string {
// Example: assert byte(97).ascii_str() == 'a' // Example: assert byte(97).ascii_str() == 'a'
pub fn (b byte) ascii_str() string { pub fn (b byte) ascii_str() string {
mut str := string{ mut str := string{
str: unsafe { malloc(2) } str: unsafe { malloc_noscan(2) }
len: 1 len: 1
} }
unsafe { unsafe {

View File

@ -45,7 +45,7 @@ pub fn (b []byte) clone() []byte {
// TODO remove this once runes are implemented // TODO remove this once runes are implemented
pub fn (b []byte) bytestr() string { pub fn (b []byte) bytestr() string {
unsafe { unsafe {
buf := malloc(b.len + 1) buf := malloc_noscan(b.len + 1)
C.memcpy(buf, b.data, b.len) C.memcpy(buf, b.data, b.len)
buf[b.len] = 0 buf[b.len] = 0
return tos(buf, b.len) return tos(buf, b.len)

View File

@ -9,7 +9,7 @@ pub fn (_str string) to_wide() &u16 {
unsafe { unsafe {
num_chars := (C.MultiByteToWideChar(cp_utf8, 0, &char(_str.str), _str.len, num_chars := (C.MultiByteToWideChar(cp_utf8, 0, &char(_str.str), _str.len,
0, 0)) 0, 0))
mut wstr := &u16(malloc((num_chars + 1) * 2)) // sizeof(wchar_t) mut wstr := &u16(malloc_noscan((num_chars + 1) * 2)) // sizeof(wchar_t)
if wstr != 0 { if wstr != 0 {
C.MultiByteToWideChar(cp_utf8, 0, &char(_str.str), _str.len, wstr, num_chars) C.MultiByteToWideChar(cp_utf8, 0, &char(_str.str), _str.len, wstr, num_chars)
C.memset(&byte(wstr) + num_chars * 2, 0, 2) C.memset(&byte(wstr) + num_chars * 2, 0, 2)
@ -38,7 +38,7 @@ pub fn string_from_wide2(_wstr &u16, len int) string {
$if windows { $if windows {
unsafe { unsafe {
num_chars := C.WideCharToMultiByte(cp_utf8, 0, _wstr, len, 0, 0, 0, 0) num_chars := C.WideCharToMultiByte(cp_utf8, 0, _wstr, len, 0, 0, 0, 0)
mut str_to := malloc(num_chars + 1) mut str_to := malloc_noscan(num_chars + 1)
if str_to != 0 { if str_to != 0 {
C.WideCharToMultiByte(cp_utf8, 0, _wstr, len, &char(str_to), num_chars, C.WideCharToMultiByte(cp_utf8, 0, _wstr, len, &char(str_to), num_chars,
0, 0) 0, 0)

View File

@ -11,7 +11,7 @@ pub fn utf8_char_len(b byte) int {
// utf32 == Codepoint // utf32 == Codepoint
pub fn utf32_to_str(code u32) string { pub fn utf32_to_str(code u32) string {
unsafe { unsafe {
mut buffer := malloc(5) mut buffer := malloc_noscan(5)
return utf32_to_str_no_malloc(code, buffer) return utf32_to_str_no_malloc(code, buffer)
} }
} }

View File

@ -11,7 +11,7 @@ const (
// read returns an array of `bytes_needed` random bytes read from the OS. // read returns an array of `bytes_needed` random bytes read from the OS.
pub fn read(bytes_needed int) ?[]byte { pub fn read(bytes_needed int) ?[]byte {
mut buffer := unsafe { malloc(bytes_needed) } mut buffer := unsafe { malloc_noscan(bytes_needed) }
mut bytes_read := 0 mut bytes_read := 0
mut remaining_bytes := bytes_needed mut remaining_bytes := bytes_needed
// getrandom syscall wont block if requesting <= 256 bytes // getrandom syscall wont block if requesting <= 256 bytes

View File

@ -14,7 +14,7 @@ const (
// read returns an array of `bytes_needed` random bytes read from the OS. // read returns an array of `bytes_needed` random bytes read from the OS.
pub fn read(bytes_needed int) ?[]byte { pub fn read(bytes_needed int) ?[]byte {
mut buffer := unsafe { malloc(bytes_needed) } mut buffer := unsafe { malloc_noscan(bytes_needed) }
mut bytes_read := 0 mut bytes_read := 0
mut remaining_bytes := bytes_needed mut remaining_bytes := bytes_needed
// getrandom syscall wont block if requesting <= 256 bytes // getrandom syscall wont block if requesting <= 256 bytes

View File

@ -42,7 +42,7 @@ pub fn resource_path() string {
panic('CFBundleCopyResourcesDirectoryURL failed') panic('CFBundleCopyResourcesDirectoryURL failed')
} }
buffer_size := 4096 buffer_size := 4096
mut buffer := unsafe { malloc(buffer_size) } mut buffer := unsafe { malloc_noscan(buffer_size) }
unsafe { unsafe {
buffer[0] = 0 buffer[0] = 0
} }

View File

@ -35,7 +35,7 @@ pub fn decode_str(data string) string {
return '' return ''
} }
unsafe { unsafe {
buffer := malloc(size + 1) buffer := malloc_noscan(size + 1)
buffer[size] = 0 buffer[size] = 0
return tos(buffer, decode_in_buffer(data, buffer)) return tos(buffer, decode_in_buffer(data, buffer))
} }
@ -62,7 +62,7 @@ fn alloc_and_encode(src &byte, len int) string {
return '' return ''
} }
unsafe { unsafe {
buffer := malloc(size + 1) buffer := malloc_noscan(size + 1)
buffer[size] = 0 buffer[size] = 0
return tos(buffer, encode_from_buffer(buffer, src, len)) return tos(buffer, encode_from_buffer(buffer, src, len))
} }

View File

@ -404,7 +404,7 @@ fn utf8_to_upper(in_cp int) int {
fn up_low(s string, upper_flag bool) string { fn up_low(s string, upper_flag bool) string {
mut index := 0 mut index := 0
mut tab_char := 0 mut tab_char := 0
mut str_res := unsafe { malloc(s.len + 1) } mut str_res := unsafe { malloc_noscan(s.len + 1) }
for { for {
ch_len := utf8_char_len(s[index]) ch_len := utf8_char_len(s[index])

View File

@ -129,7 +129,7 @@ fn rotate(m Mat4, angle f32, vec Vec3) Mat4 {
} }
*/ */
fn f32_calloc(n int) &f32 { fn f32_calloc(n int) &f32 {
return voidptr(vcalloc(n * int(sizeof(f32)))) return voidptr(vcalloc_noscan(n * int(sizeof(f32))))
} }
// fn translate(vec Vec3) *f32 { // fn translate(vec Vec3) *f32 {
@ -382,7 +382,7 @@ fn ortho_js(left f32, right f32, bottom f32, top f32) &f32 {
bt := 1.0 / (bottom - top) bt := 1.0 / (bottom - top)
nf := f32(1.0) / 1.0 // (mynear -myfar) nf := f32(1.0) / 1.0 // (mynear -myfar)
unsafe { unsafe {
mut out := &f32(malloc(int(sizeof(f32) * 16))) mut out := &f32(malloc_noscan(int(sizeof(f32) * 16)))
out[0] = -2.0 * lr out[0] = -2.0 * lr
out[1] = 0 out[1] = 0
out[2] = 0 out[2] = 0

View File

@ -126,7 +126,7 @@ pub fn (conn &Connection) tables(wildcard string) ?[]string {
// taking into account the current character set of the connection. // taking into account the current character set of the connection.
pub fn (conn &Connection) escape_string(s string) string { pub fn (conn &Connection) escape_string(s string) string {
unsafe { unsafe {
to := malloc(2 * s.len + 1) to := malloc_noscan(2 * s.len + 1)
C.mysql_real_escape_string_quote(conn.conn, to, s.str, s.len, `\'`) C.mysql_real_escape_string_quote(conn.conn, to, s.str, s.len, `\'`)
return to.vstring() return to.vstring()
} }

View File

@ -12,7 +12,7 @@ fn C.new_tls_context() C.TlsContext
fn (req &Request) ssl_do(port int, method Method, host_name string, path string) ?Response { fn (req &Request) ssl_do(port int, method Method, host_name string, path string) ?Response {
mut ctx := C.new_tls_context() mut ctx := C.new_tls_context()
C.vschannel_init(&ctx) C.vschannel_init(&ctx)
mut buff := unsafe { malloc(C.vsc_init_resp_buff_size) } mut buff := unsafe { malloc_noscan(C.vsc_init_resp_buff_size) }
addr := host_name addr := host_name
sdata := req.build_request_headers(method, host_name, path) sdata := req.build_request_headers(method, host_name, path)
$if trace_http_request ? { $if trace_http_request ? {

View File

@ -49,7 +49,7 @@ pub fn fd_read(fd int, maxbytes int) (string, int) {
return '', 0 return '', 0
} }
unsafe { unsafe {
mut buf := malloc(maxbytes + 1) mut buf := malloc_noscan(maxbytes + 1)
nbytes := C.read(fd, buf, maxbytes) nbytes := C.read(fd, buf, maxbytes)
if nbytes < 0 { if nbytes < 0 {
free(buf) free(buf)

View File

@ -108,7 +108,7 @@ pub fn read_file(path string) ?string {
// C.fseek(fp, 0, SEEK_SET) // same as `C.rewind(fp)` below // C.fseek(fp, 0, SEEK_SET) // same as `C.rewind(fp)` below
C.rewind(fp) C.rewind(fp)
unsafe { unsafe {
mut str := malloc(fsize + 1) mut str := malloc_noscan(fsize + 1)
nelements := int(C.fread(str, 1, fsize, fp)) nelements := int(C.fread(str, 1, fsize, fp))
is_eof := int(C.feof(fp)) is_eof := int(C.feof(fp))
is_error := int(C.ferror(fp)) is_error := int(C.ferror(fp))
@ -496,7 +496,7 @@ pub fn get_raw_line() string {
$if windows { $if windows {
unsafe { unsafe {
max_line_chars := 256 max_line_chars := 256
buf := malloc(max_line_chars * 2) buf := malloc_noscan(max_line_chars * 2)
h_input := C.GetStdHandle(C.STD_INPUT_HANDLE) h_input := C.GetStdHandle(C.STD_INPUT_HANDLE)
mut bytes_read := u32(0) mut bytes_read := u32(0)
if is_atty(0) > 0 { if is_atty(0) > 0 {
@ -538,7 +538,7 @@ pub fn get_raw_stdin() []byte {
unsafe { unsafe {
block_bytes := 512 block_bytes := 512
mut old_size := block_bytes mut old_size := block_bytes
mut buf := malloc(block_bytes) mut buf := malloc_noscan(block_bytes)
h_input := C.GetStdHandle(C.STD_INPUT_HANDLE) h_input := C.GetStdHandle(C.STD_INPUT_HANDLE)
mut bytes_read := 0 mut bytes_read := 0
mut offset := 0 mut offset := 0
@ -584,7 +584,7 @@ pub fn read_file_array<T>(path string) []T {
C.rewind(fp) C.rewind(fp)
// read the actual data from the file // read the actual data from the file
len := fsize / tsize len := fsize / tsize
buf := unsafe { malloc(fsize) } buf := unsafe { malloc_noscan(fsize) }
nread := C.fread(buf, tsize, len, fp) nread := C.fread(buf, tsize, len, fp)
C.fclose(fp) C.fclose(fp)
return unsafe { return unsafe {
@ -619,7 +619,7 @@ pub fn on_segfault(f voidptr) {
[manualfree] [manualfree]
pub fn executable() string { pub fn executable() string {
$if linux { $if linux {
mut xresult := vcalloc(max_path_len) mut xresult := vcalloc_noscan(max_path_len)
count := C.readlink(c'/proc/self/exe', &char(xresult), max_path_len) count := C.readlink(c'/proc/self/exe', &char(xresult), max_path_len)
if count < 0 { if count < 0 {
eprintln('os.executable() failed at reading /proc/self/exe to get exe path') eprintln('os.executable() failed at reading /proc/self/exe to get exe path')
@ -630,7 +630,7 @@ pub fn executable() string {
$if windows { $if windows {
max := 512 max := 512
size := max * 2 // max_path_len * sizeof(wchar_t) size := max * 2 // max_path_len * sizeof(wchar_t)
mut result := unsafe { &u16(vcalloc(size)) } mut result := unsafe { &u16(vcalloc_noscan(size)) }
len := C.GetModuleFileName(0, result, max) len := C.GetModuleFileName(0, result, max)
// determine if the file is a windows symlink // determine if the file is a windows symlink
attrs := C.GetFileAttributesW(result) attrs := C.GetFileAttributesW(result)
@ -639,7 +639,7 @@ pub fn executable() string {
// gets handle with GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 // gets handle with GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
file := C.CreateFile(result, 0x80000000, 1, 0, 3, 0x80, 0) file := C.CreateFile(result, 0x80000000, 1, 0, 3, 0x80, 0)
if file != voidptr(-1) { if file != voidptr(-1) {
final_path := unsafe { &u16(vcalloc(size)) } final_path := unsafe { &u16(vcalloc_noscan(size)) }
// https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew // https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew
final_len := C.GetFinalPathNameByHandleW(file, final_path, size, 0) final_len := C.GetFinalPathNameByHandleW(file, final_path, size, 0)
if final_len < size { if final_len < size {
@ -655,7 +655,7 @@ pub fn executable() string {
return unsafe { string_from_wide2(result, len) } return unsafe { string_from_wide2(result, len) }
} }
$if macos { $if macos {
mut result := vcalloc(max_path_len) mut result := vcalloc_noscan(max_path_len)
pid := C.getpid() pid := C.getpid()
ret := proc_pidpath(pid, result, max_path_len) ret := proc_pidpath(pid, result, max_path_len)
if ret <= 0 { if ret <= 0 {
@ -665,7 +665,7 @@ pub fn executable() string {
return unsafe { result.vstring() } return unsafe { result.vstring() }
} }
$if freebsd { $if freebsd {
mut result := vcalloc(max_path_len) mut result := vcalloc_noscan(max_path_len)
mib := [1 /* CTL_KERN */, 14 /* KERN_PROC */, 12 /* KERN_PROC_PATHNAME */, -1] mib := [1 /* CTL_KERN */, 14 /* KERN_PROC */, 12 /* KERN_PROC_PATHNAME */, -1]
size := max_path_len size := max_path_len
unsafe { C.sysctl(mib.data, 4, result, &size, 0, 0) } unsafe { C.sysctl(mib.data, 4, result, &size, 0, 0) }
@ -679,7 +679,7 @@ pub fn executable() string {
$if haiku { $if haiku {
} }
$if netbsd { $if netbsd {
mut result := vcalloc(max_path_len) mut result := vcalloc_noscan(max_path_len)
count := C.readlink(c'/proc/curproc/exe', &char(result), max_path_len) count := C.readlink(c'/proc/curproc/exe', &char(result), max_path_len)
if count < 0 { if count < 0 {
eprintln('os.executable() failed at reading /proc/curproc/exe to get exe path') eprintln('os.executable() failed at reading /proc/curproc/exe to get exe path')
@ -688,7 +688,7 @@ pub fn executable() string {
return unsafe { result.vstring_with_len(count) } return unsafe { result.vstring_with_len(count) }
} }
$if dragonfly { $if dragonfly {
mut result := vcalloc(max_path_len) mut result := vcalloc_noscan(max_path_len)
count := C.readlink(c'/proc/curproc/file', &char(result), max_path_len) count := C.readlink(c'/proc/curproc/file', &char(result), max_path_len)
if count < 0 { if count < 0 {
eprintln('os.executable() failed at reading /proc/curproc/file to get exe path') eprintln('os.executable() failed at reading /proc/curproc/file to get exe path')
@ -751,7 +751,7 @@ pub fn getwd() string {
$if windows { $if windows {
max := 512 // max_path_len * sizeof(wchar_t) max := 512 // max_path_len * sizeof(wchar_t)
unsafe { unsafe {
buf := &u16(vcalloc(max * 2)) buf := &u16(vcalloc_noscan(max * 2))
if C._wgetcwd(buf, max) == 0 { if C._wgetcwd(buf, max) == 0 {
free(buf) free(buf)
return '' return ''
@ -759,7 +759,7 @@ pub fn getwd() string {
return string_from_wide(buf) return string_from_wide(buf)
} }
} $else { } $else {
buf := vcalloc(max_path_len) buf := vcalloc_noscan(max_path_len)
unsafe { unsafe {
if C.getcwd(&char(buf), max_path_len) == 0 { if C.getcwd(&char(buf), max_path_len) == 0 {
free(buf) free(buf)
@ -782,7 +782,7 @@ pub fn real_path(fpath string) string {
$if windows { $if windows {
// GetFullPathName doesn't work with symbolic links, // GetFullPathName doesn't work with symbolic links,
// so if it is not a file, get full path // so if it is not a file, get full path
fullpath = unsafe { &u16(vcalloc(max_path_len * 2)) } fullpath = unsafe { &u16(vcalloc_noscan(max_path_len * 2)) }
// TODO: check errors if path len is not enough // TODO: check errors if path len is not enough
ret := C.GetFullPathName(fpath.to_wide(), max_path_len, fullpath, 0) ret := C.GetFullPathName(fpath.to_wide(), max_path_len, fullpath, 0)
if ret == 0 { if ret == 0 {
@ -791,7 +791,7 @@ pub fn real_path(fpath string) string {
} }
res = unsafe { string_from_wide(fullpath) } res = unsafe { string_from_wide(fullpath) }
} $else { } $else {
fullpath = vcalloc(max_path_len) fullpath = vcalloc_noscan(max_path_len)
ret := &char(C.realpath(&char(fpath.str), &char(fullpath))) ret := &char(C.realpath(&char(fpath.str), &char(fullpath)))
if ret == 0 { if ret == 0 {
unsafe { free(fullpath) } unsafe { free(fullpath) }

View File

@ -17,30 +17,3 @@ pub const (
sys_mkdir = 83 sys_mkdir = 83
sys_creat = 85 sys_creat = 85
) )
/*
// TODO no pub => error
pub fn write(fd int, data voidptr, nbytes int) int {
return syscall5(
1, // SYS_write
fd,
data,
nbytes,
0, // ignored
0 // ignored
)
}
pub fn println(s string) {
write(1, (s + '\n').str, s.len)
}
fn mmap(start voidptr, len, prot, flags, fd, off int) byteptr {
return syscall6(9, start, len, prot, flags, fd, off) // sys_mmap
}
pub fn malloc(n int) byteptr {
println('malloc($n)')
return mmap(0, n, 3, 4098, //prot_read|prot_write,
-1,0) //map_private|map_anonymous,
*/

View File

@ -68,7 +68,7 @@ pub fn uname() Uname {
mut u := Uname{} mut u := Uname{}
utsize := sizeof(C.utsname) utsize := sizeof(C.utsname)
unsafe { unsafe {
x := malloc(int(utsize)) x := malloc_noscan(int(utsize))
d := &C.utsname(x) d := &C.utsname(x)
if C.uname(d) == 0 { if C.uname(d) == 0 {
u.sysname = cstring_to_vstring(d.sysname) u.sysname = cstring_to_vstring(d.sysname)
@ -85,7 +85,7 @@ pub fn uname() Uname {
pub fn hostname() string { pub fn hostname() string {
mut hstnme := '' mut hstnme := ''
size := 256 size := 256
mut buf := unsafe { &char(malloc(size)) } mut buf := unsafe { &char(malloc_noscan(size)) }
if C.gethostname(buf, size) == 0 { if C.gethostname(buf, size) == 0 {
hstnme = unsafe { cstring_to_vstring(buf) } hstnme = unsafe { cstring_to_vstring(buf) }
unsafe { free(buf) } unsafe { free(buf) }
@ -203,7 +203,7 @@ pub fn execute(cmd string) Result {
output: 'exec("$cmd") failed' output: 'exec("$cmd") failed'
} }
} }
buf := unsafe { malloc(4096) } buf := unsafe { malloc_noscan(4096) }
mut res := strings.new_builder(1024) mut res := strings.new_builder(1024)
defer { defer {
unsafe { res.free() } unsafe { res.free() }

View File

@ -167,7 +167,7 @@ pub fn get_file_handle(path string) HANDLE {
pub fn get_module_filename(handle HANDLE) ?string { pub fn get_module_filename(handle HANDLE) ?string {
unsafe { unsafe {
mut sz := 4096 // Optimized length mut sz := 4096 // Optimized length
mut buf := &u16(malloc(4096)) mut buf := &u16(malloc_noscan(4096))
for { for {
status := int(C.GetModuleFileNameW(handle, voidptr(&buf), sz)) status := int(C.GetModuleFileNameW(handle, voidptr(&buf), sz))
match status { match status {

View File

@ -243,8 +243,8 @@ pub fn new(config Config) &Picoev {
timeout_secs: config.timeout_secs timeout_secs: config.timeout_secs
max_headers: config.max_headers max_headers: config.max_headers
date: C.get_date() date: C.get_date()
buf: unsafe { malloc(picoev.max_fds * picoev.max_read + 1) } buf: unsafe { malloc_noscan(picoev.max_fds * picoev.max_read + 1) }
out: unsafe { malloc(picoev.max_fds * picoev.max_write + 1) } out: unsafe { malloc_noscan(picoev.max_fds * picoev.max_write + 1) }
} }
C.picoev_add(loop, fd, int(Event.read), 0, accept_callback, pv) C.picoev_add(loop, fd, int(Event.read), 0, accept_callback, pv)
go update_date(mut pv) go update_date(mut pv)

View File

@ -197,7 +197,7 @@ pub fn string_from_set(charset string, len int) string {
if len == 0 { if len == 0 {
return '' return ''
} }
mut buf := unsafe { malloc(len + 1) } mut buf := unsafe { malloc_noscan(len + 1) }
for i in 0 .. len { for i in 0 .. len {
unsafe { unsafe {
buf[i] = charset[intn(charset.len)] buf[i] = charset[intn(charset.len)]
@ -228,7 +228,7 @@ pub fn ascii(len int) string {
// See https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random) // See https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random)
pub fn uuid_v4() string { pub fn uuid_v4() string {
buflen := 36 buflen := 36
mut buf := unsafe { malloc(37) } mut buf := unsafe { malloc_noscan(37) }
mut i_buf := 0 mut i_buf := 0
mut x := u64(0) mut x := u64(0)
mut d := byte(0) mut d := byte(0)
@ -281,7 +281,7 @@ pub fn ulid() string {
// ulid_at_millisecond does the same as `ulid` but takes a custom Unix millisecond timestamp via `unix_time_milli`. // ulid_at_millisecond does the same as `ulid` but takes a custom Unix millisecond timestamp via `unix_time_milli`.
pub fn ulid_at_millisecond(unix_time_milli u64) string { pub fn ulid_at_millisecond(unix_time_milli u64) string {
buflen := 26 buflen := 26
mut buf := unsafe { malloc(27) } mut buf := unsafe { malloc_noscan(27) }
mut t := unix_time_milli mut t := unix_time_milli
mut i := 9 mut i := 9
for i >= 0 { for i >= 0 {

View File

@ -440,7 +440,7 @@ pub fn format_es(f f64, p BF_param) string {
[direct_array_access] [direct_array_access]
pub fn remove_tail_zeros(s string) string { pub fn remove_tail_zeros(s string) string {
unsafe{ unsafe{
mut buf := malloc(s.len + 1) mut buf := malloc_noscan(s.len + 1)
mut i_d := 0 mut i_d := 0
mut i_s := 0 mut i_s := 0

View File

@ -5,7 +5,7 @@ pub fn repeat(c byte, n int) string {
if n <= 0 { if n <= 0 {
return '' return ''
} }
mut bytes := unsafe { malloc(n + 1) } mut bytes := unsafe { malloc_noscan(n + 1) }
unsafe { unsafe {
C.memset(bytes, c, n) C.memset(bytes, c, n)
bytes[n] = `0` bytes[n] = `0`
@ -22,7 +22,7 @@ pub fn repeat_string(s string, n int) string {
} }
slen := s.len slen := s.len
blen := slen * n blen := slen * n
mut bytes := unsafe { malloc(blen + 1) } mut bytes := unsafe { malloc_noscan(blen + 1) }
for bi in 0 .. n { for bi in 0 .. n {
bislen := bi * slen bislen := bi * slen
for si in 0 .. slen { for si in 0 .. slen {

View File

@ -173,7 +173,7 @@ fn get_cursor_position() (int, int) {
print('\033[6n') print('\033[6n')
mut s := '' mut s := ''
unsafe { unsafe {
buf := malloc(25) buf := malloc_noscan(25)
len := C.read(C.STDIN_FILENO, buf, 24) len := C.read(C.STDIN_FILENO, buf, 24)
buf[len] = 0 buf[len] = 0
s = tos(buf, len) s = tos(buf, len)
@ -196,7 +196,7 @@ fn supports_truecolor() bool {
print('\x1bP\$qm\x1b\\') print('\x1bP\$qm\x1b\\')
mut s := '' mut s := ''
unsafe { unsafe {
buf := malloc(25) buf := malloc_noscan(25)
len := C.read(C.STDIN_FILENO, buf, 24) len := C.read(C.STDIN_FILENO, buf, 24)
buf[len] = 0 buf[len] = 0
s = tos(buf, len) s = tos(buf, len)

View File

@ -36,7 +36,7 @@ pub fn parse_rfc2822(s string) ?Time {
pos := months_string.index(fields[2]) or { return error('Invalid time format: $s') } pos := months_string.index(fields[2]) or { return error('Invalid time format: $s') }
mm := pos / 3 + 1 mm := pos / 3 + 1
unsafe { unsafe {
tmstr := malloc(s.len * 2) tmstr := malloc_noscan(s.len * 2)
count := C.snprintf(&char(tmstr), (s.len * 2), c'%s-%02d-%s %s', fields[3].str, count := C.snprintf(&char(tmstr), (s.len * 2), c'%s-%02d-%s %s', fields[3].str,
mm, fields[1].str, fields[4].str) mm, fields[1].str, fields[4].str)
return parse(tos(tmstr, count)) return parse(tos(tmstr, count))

View File

@ -46,7 +46,7 @@ fn find_windows_kit_internal(key RegKey, versions []string) ?string {
continue continue
} }
alloc_length := (required_bytes + 2) alloc_length := (required_bytes + 2)
mut value := &u16(malloc(int(alloc_length))) mut value := &u16(malloc_noscan(int(alloc_length)))
if isnil(value) { if isnil(value) {
continue continue
} }

View File

@ -237,7 +237,7 @@ fn (s Scanner) num_lit(start int, end int) string {
} }
unsafe { unsafe {
txt := s.text.str txt := s.text.str
mut b := malloc(end - start + 1) // add a byte for the endstring 0 mut b := malloc_noscan(end - start + 1) // add a byte for the endstring 0
mut i1 := 0 mut i1 := 0
for i := start; i < end; i++ { for i := start; i < end; i++ {
if txt[i] != scanner.num_sep { if txt[i] != scanner.num_sep {

View File

@ -87,7 +87,7 @@ fn (mut bmp BitMap) format_texture() {
// write out a .ppm file // write out a .ppm file
pub fn (mut bmp BitMap) save_as_ppm(file_name string) { pub fn (mut bmp BitMap) save_as_ppm(file_name string) {
tmp_buf := bmp.buf tmp_buf := bmp.buf
mut buf := unsafe { malloc(bmp.buf_size) } mut buf := unsafe { malloc_noscan(bmp.buf_size) }
unsafe { C.memcpy(buf, tmp_buf, bmp.buf_size) } unsafe { C.memcpy(buf, tmp_buf, bmp.buf_size) }
bmp.buf = buf bmp.buf = buf

View File

@ -56,7 +56,7 @@ pub fn (mut tf_skl TTF_render_Sokol) create_text(in_txt string, in_font_size f32
unsafe { free(tf_skl.bmp.buf) } unsafe { free(tf_skl.bmp.buf) }
} }
dprintln('create_text Alloc: $sz bytes') dprintln('create_text Alloc: $sz bytes')
tf_skl.bmp.buf = unsafe { malloc(sz) } tf_skl.bmp.buf = unsafe { malloc_noscan(sz) }
tf_skl.bmp.buf_size = sz tf_skl.bmp.buf_size = sz
} }
@ -94,7 +94,7 @@ pub fn (mut tf_skl TTF_render_Sokol) create_text_block(in_txt string, in_w int,
unsafe { free(tf_skl.bmp.buf) } unsafe { free(tf_skl.bmp.buf) }
} }
dprintln('Alloc: $sz bytes') dprintln('Alloc: $sz bytes')
tf_skl.bmp.buf = unsafe { malloc(sz) } tf_skl.bmp.buf = unsafe { malloc_noscan(sz) }
tf_skl.bmp.buf_size = sz tf_skl.bmp.buf_size = sz
} }