|
1 | 1 | #![no_std] |
2 | | -#![feature(start)] |
| 2 | +#![no_main] |
3 | 3 |
|
4 | 4 | use alloc::vec; |
5 | 5 | use ogc_rs::{ |
6 | 6 | ios::{self, Mode, SeekMode}, |
7 | 7 | print, println, |
8 | 8 | }; |
9 | | - |
10 | 9 | extern crate alloc; |
11 | 10 |
|
12 | | -#[start] |
13 | | -fn main(_argc: isize, _argv: *const *const u8) -> isize { |
14 | | - // Try to open SYSCONF |
| 11 | +#[no_mangle] |
| 12 | +extern "C" fn main() { |
15 | 13 | if let Ok(fd) = ios::open(c"/shared2/sys/SYSCONF", Mode::Read) { |
16 | | - // Try to grab size or default to 0; |
17 | | - const GET_FILE_STATS: i32 = 11; |
18 | | - let mut out_buf = [0u8; 8]; |
19 | | - let (size, seek_pos) = if ios::ioctl(fd, GET_FILE_STATS, &[], &mut out_buf).is_ok() { |
20 | | - ( |
21 | | - usize::try_from(u32::from_be_bytes(out_buf[0..4].try_into().unwrap())).unwrap(), |
22 | | - usize::try_from(u32::from_be_bytes(out_buf[4..8].try_into().unwrap())).unwrap(), |
23 | | - ) |
24 | | - } else { |
25 | | - (0usize, 0usize) |
26 | | - }; |
27 | | - println!("{:?}, {:?}", size, seek_pos); |
28 | | - |
29 | | - if seek_pos != 0 { |
30 | | - // Try to seek to the start |
31 | | - let _ = ios::seek(fd, 0, SeekMode::Start); |
32 | | - } |
| 14 | + if let Ok(metadata) = ios::fs::get_file_stats_from_fd(fd) { |
| 15 | + if metadata.offset() != 0 { |
| 16 | + let _ = ios::seek(fd, 0, SeekMode::Start); |
| 17 | + } |
33 | 18 |
|
34 | | - let mut bytes = vec![0; size]; |
35 | | - if let Ok(bytes_read) = ios::read(fd, &mut bytes) { |
36 | | - // SAFETY: I read this much bytes |
37 | | - unsafe { bytes.set_len(bytes_read.try_into().unwrap()) }; |
38 | | - }; |
| 19 | + let mut bytes = vec![0; metadata.size()]; |
| 20 | + if let Ok(bytes_read) = ios::read(fd, &mut bytes) { |
| 21 | + unsafe { bytes.set_len(bytes_read.try_into().unwrap()) }; |
| 22 | + } |
39 | 23 |
|
40 | | - println!("{:?}", bytes); |
| 24 | + println!("{:?}", bytes); |
41 | 25 |
|
42 | | - let _ = ios::close(fd); |
| 26 | + let _ = ios::close(fd); |
| 27 | + } |
43 | 28 | } |
44 | | - |
45 | 29 | loop { |
46 | 30 | core::hint::spin_loop(); |
47 | 31 | } |
|
0 commit comments