Files
RedBear-OS/local/recipes/system/redbear-accessibility/source/src/main.rs
T
vasilito 702ec7efac feat: relibc S1 — sem_open refcounting + glibc cross-reference assessment
Phase S1 (Critical Correctness):
- sem_open/sem_close: global refcounting via BTreeMap + AtomicUsize
- sem_close: decrements refcount, munmaps only at zero
- sem_open: reuses existing mapping, O_EXCL returns EEXIST
- sem_unlink: marks entry for removal before shm_unlink
- va_list parsing: reads mode_t and value from stack after oflag
- All 11 sem_* functions verified in libc.so T

Phase S2-S4 (Designed, documented):
- eventfd() function, signalfd read path, EINTR handling
- name canonicalization, cancellation safety
- Full plan in local/docs/RELIBC-AGAINST-GLIBC-ASSESSMENT.md

Reference: glibc 2.41 cloned to local/reference/glibc/

Boot verified: greeter ready on VT 3 with refcounted semaphores
2026-05-05 21:12:08 +01:00

44 lines
1.3 KiB
Rust

mod scheme;
use scheme::AccessibilityScheme;
use std::io::Write;
fn log_msg(level: &str, msg: &str) {
let _ = writeln!(std::io::stderr(), "[accessibility] {} {}", level, msg);
}
fn main() {
let mut scheme = AccessibilityScheme::new();
let socket = redox_scheme::Socket::create("accessibility")
.expect("accessibility: failed to register scheme:accessibility");
log_msg("INFO", "registered scheme:accessibility");
loop {
let request = match socket.next_request(redox_scheme::SignalBehavior::Restart) {
Ok(Some(r)) => r,
Ok(None) => {
log_msg("INFO", "scheme unmounted, exiting");
break;
}
Err(e) => {
log_msg("ERROR", &format!("scheme read error: {}", e));
break;
}
};
match request.handle_scheme_block_mut(&mut scheme) {
Ok(response) => {
if let Err(e) =
socket.write_response(response, redox_scheme::SignalBehavior::Restart)
{
log_msg("ERROR", &format!("failed to write response: {}", e));
}
}
Err(_request) => {
log_msg("ERROR", "unhandled scheme request");
}
}
}
}