70 lines
1.6 KiB
C
70 lines
1.6 KiB
C
#include <sys/mman.h>
|
|
#define _POSIX_C_SOURCE 200809L
|
|
#include <sys/stat.h>
|
|
#include <sys/select.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);
|
|
}
|
|
}
|