Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[stdlib] Use UnsafePointer in hex|io|os.mojo #2403

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion stdlib/src/builtin/hex.mojo
Expand Up @@ -201,7 +201,7 @@ fn _try_write_int(
# bytes from our final `buf_ptr` to the end of the buffer.
var len = CAPACITY - offset

var strref = StringRef(rebind[Pointer[Int8]](buf_ptr), len)
var strref = StringRef(rebind[UnsafePointer[Int8]](buf_ptr), len)

fmt.write_str(strref)

Expand Down
4 changes: 2 additions & 2 deletions stdlib/src/builtin/io.mojo
Expand Up @@ -322,9 +322,9 @@ fn _put(x: StringRef):
@parameter
if triple_is_nvidia_cuda():
var tmp = 0
var arg_ptr = Pointer.address_of(tmp)
var arg_ptr = UnsafePointer.address_of(tmp)
_ = external_call["vprintf", Int32](
x.data, arg_ptr.bitcast[Pointer[NoneType]]()
x.data, arg_ptr.bitcast[UnsafePointer[NoneType]]()
)
else:
alias MAX_STR_LEN = 0x1000_0000
Expand Down
23 changes: 11 additions & 12 deletions stdlib/src/os/os.mojo
Expand Up @@ -24,7 +24,6 @@ from sys import os_is_linux, os_is_windows, triple_is_nvidia_cuda

from memory import (
DTypePointer,
Pointer,
)
from memory.unsafe_pointer import move_from_pointee

Expand Down Expand Up @@ -86,17 +85,17 @@ struct _dirent_macos:
"""Name of entry."""


fn _strnlen(ptr: Pointer[Int8], max: Int) -> Int:
fn _strnlen(ptr: UnsafePointer[Int8], max: Int) -> Int:
var len = 0
while len < max and ptr.load(len):
while len < max and move_from_pointee(ptr + len):
len += 1
return len


struct _DirHandle:
"""Handle to an open directory descriptor opened via opendir."""

var _handle: Pointer[NoneType]
var _handle: UnsafePointer[NoneType]

fn __init__(inout self, path: String) raises:
"""Construct the _DirHandle using the path provided.
Expand All @@ -111,7 +110,7 @@ struct _DirHandle:
if not isdir(path):
raise "the directory '" + path + "' does not exist"

self._handle = external_call["opendir", Pointer[NoneType]](
self._handle = external_call["opendir", UnsafePointer[NoneType]](
path._as_ptr()
)

Expand Down Expand Up @@ -144,13 +143,13 @@ struct _DirHandle:
var res = List[String]()

while True:
var ep = external_call["readdir", Pointer[_dirent_linux]](
var ep = external_call["readdir", UnsafePointer[_dirent_linux]](
self._handle
)
if not ep:
break
var name = ep.load().name
var name_ptr = Pointer.address_of(name).bitcast[Int8]()
var name = move_from_pointee(ep).name
var name_ptr = UnsafePointer.address_of(name).bitcast[Int8]()
var name_str = StringRef(
name_ptr, _strnlen(name_ptr, _dirent_linux.MAX_NAME_SIZE)
)
Expand All @@ -169,13 +168,13 @@ struct _DirHandle:
var res = List[String]()

while True:
var ep = external_call["readdir", Pointer[_dirent_macos]](
var ep = external_call["readdir", UnsafePointer[_dirent_macos]](
self._handle
)
if not ep:
break
var name = ep.load().name
var name_ptr = Pointer.address_of(name).bitcast[Int8]()
var name = move_from_pointee(ep).name
var name_ptr = UnsafePointer.address_of(name).bitcast[Int8]()
var name_str = StringRef(
name_ptr, _strnlen(name_ptr, _dirent_macos.MAX_NAME_SIZE)
)
Expand Down Expand Up @@ -283,7 +282,7 @@ fn remove(path: String) raises:
if error != 0:
# TODO get error message, the following code prints it
# var error_str = String("Something went wrong")
# _ = external_call["perror", Pointer[NoneType]](error_str._as_ptr())
# _ = external_call["perror", UnsafePointer[NoneType]](error_str._as_ptr())
# _ = error_str
raise Error("Can not remove file: " + path)

Expand Down