Files
cbase/linux_os.c
T
2026-07-15 07:30:08 -05:00

69 lines
1.6 KiB
C

#include <sys/mman.h>
#define _POSIX_C_SOURCE 200809L
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <stdarg.h>
#include <stdio.h>
#include "all.h"
global pthread_barrier_t linux_thread_barrier;
fn Barrier osBarrierAlloc(u64 count) {
pthread_barrier_init(&linux_thread_barrier, NULL, count);
Barrier result = {(u64)&linux_thread_barrier};
return result;
}
fn void osBarrierRelease(Barrier barrier) {
pthread_barrier_t* addr = (pthread_barrier_t*)barrier.a[0];
pthread_barrier_destroy(addr);
}
fn void osBarrierWait(Barrier barrier) {
pthread_barrier_t* addr = (pthread_barrier_t*)barrier.a[0];
pthread_barrier_wait(addr);
}
// Time
fn void osSleepMicroseconds(u32 t) {
struct timespec ts = { t / MICROSECONDS_PER_SECOND, (t % MICROSECONDS_PER_SECOND)*NANOSECONDS_PER_MICROSECOND };
nanosleep(&ts, NULL);
}
// Files
/*
fn bool osFileCreate(String filename) {
M_Scratch scratch = scratch_get();
string nt = str_copy(&scratch.arena, filename);
bool result = true;
size_t handle = open((const char*) nt.str, O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH);
if (handle == -1) {
result = false;
}
scratch_return(&scratch);
close(handle);
return true;
bool result = true;
size_t handle = open((str)filename.bytes, O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH);
if (handle == -1) {
result = false;
}
if (close(handle) == -1) {
result = false;
}
return result;
}
*/
// Misc
fn void osDebugPrint(bool debug_mode, const char * format, ... ) {
if (debug_mode) {
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
}
}