# libsst-os

Cross-platform operating system abstractions in C.

## Subsystems

### Memory (`SST_Alloc`, `SST_SysMem`)
- Aligned allocation/free, safe malloc/realloc with overflow checking
- Page-level allocation, protection (`R/W/X`), and size queries

### File I/O (`SST_File`)
- Open, read, write, seek, flush, close
- Async and sequential/random hints

### File system (`SST_FileSys`)
- Directory listing, create, remove

### Memory-mapped files (`SST_Mmap`)
- Create/destroy mappings, sync to disk

### Dynamic libraries (`SST_DynLib`)
- Load, symbol lookup, close
- OS-specific name generation (`.dll` / `.so` / `.dylib`)

### CPU info (`SST_CPU`, `SST_CPUCache`)
- Physical/logical CPU counts, affinity get/set
- Cache line size, data cache flush, instruction cache invalidate
- Cache ops in per-architecture assembly (x86, ARM, IA-64, MIPS, PPC, SPARC)

### Timing (`SST_Time`)
- Microsecond, millisecond, and floating-point second resolution

### Endian (`SST_Endian`)
- Byte-swap 16/32/64, host-to-BE/LE conversion macros

### User info (`SST_User`)
- Username, real name, home directory

### Safe arithmetic (`SST_SafeArithmetic`)
- Overflow-checked add/multiply for all integer widths

### Assertions (`SST_Assert`)
- Debug and runtime assertion macros with pluggable handlers

## Platform backends

Each subsystem has separate `_Win32.c` and `_POSIX.c` implementations, with
additional Solaris and macOS variants where needed. CPU cache operations are
in per-architecture assembly files.
