Skip to content

Commit

Permalink
[External] [stdlib] Use UnsafePointer in hex|io|os.mojo (#38796)
Browse files Browse the repository at this point in the history
[External] [stdlib] Use `UnsafePointer` in `hex|io|os.mojo`

Co-authored-by: gabrieldemarmiesse <gabrieldemarmiesse@gmail.com>
Closes modularml#2403
MODULAR_ORIG_COMMIT_REV_ID: 6916ab8f901ede54c69faf09192983c3f8c58cbb
  • Loading branch information
gabrieldemarmiesse authored and JoeLoser committed Apr 30, 2024
1 parent 715f484 commit 96fbf78
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 15 deletions.
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

0 comments on commit 96fbf78

Please sign in to comment.