Add macos support

This commit is contained in:
Harshit-Dhanwalkar 2026-06-10 20:30:10 +05:30
parent 49b58febba
commit 14cc7dcc2e
10 changed files with 616 additions and 250 deletions

View file

@ -6,11 +6,15 @@
inotify
*/
#include <termios.h>
#include <time.h>
#ifdef __LINUX_NOLIBC__
#ifndef MAP_FAILED
#define MAP_FAILED ((void *)-1)
#endif
#include "nl_syscall.h"
/* Basic I/O */
// Basic I/O
static inline ssize_t nl_write(int fd, const void *buf, size_t n) {
return (ssize_t)__sc3(SYS_write, fd, (long)buf, (long)n);
}
@ -28,7 +32,20 @@ static inline int nl_ioctl(int fd, unsigned long req, void *arg) {
return (int)__sc3(SYS_ioctl, fd, (long)req, (long)arg);
}
/* mmap / munmap */
// fprintf / stderr
#define stderr 2
#define fprintf(fd, fmt, ...) \
do { \
char _fb[1024]; \
int _fn = nl_snprintf(_fb, sizeof(_fb), fmt, ##__VA_ARGS__); \
if (_fn > 0) { \
size_t _nw = \
(_fn < (int)sizeof(_fb) - 1) ? (size_t)_fn : sizeof(_fb) - 1; \
nl_write((int)(long)(fd), _fb, _nw); \
} \
} while (0)
// mmap / munmap
static inline void *nl_mmap(void *addr, size_t len, int prot, int flags, int fd,
long off) {
return (void *)__sc6(SYS_mmap, (long)addr, (long)len, prot, flags, fd, off);
@ -37,7 +54,7 @@ static inline int nl_munmap(void *addr, size_t len) {
return (int)__sc2(SYS_munmap, (long)addr, (long)len);
}
/* select */
// select
struct nl_timeval {
long tv_sec;
long tv_usec;
@ -55,7 +72,7 @@ static inline int nl_select(int nfds, nl_fd_set *r, nl_fd_set *w, nl_fd_set *e,
return (int)__sc6(SYS_select, nfds, (long)r, (long)w, (long)e, (long)tv, 0);
}
/* clock / sleep */
// clock / sleep
static inline int nl_clock_gettime(clockid_t id, struct timespec *ts) {
return (int)__sc2(SYS_clock_gettime, id, (long)ts);
}
@ -78,7 +95,7 @@ static inline void nl_exit(int code) {
__builtin_unreachable();
}
/* inotify */
// inotify
static inline int nl_inotify_init1(int flags) {
return (int)__sc1(SYS_inotify_init1, flags);
}
@ -87,12 +104,16 @@ static inline int nl_inotify_add_watch(int fd, const char *path,
return (int)__sc3(SYS_inotify_add_watch, fd, (long)path, mask);
}
/* termios via ioctl */
// termios via ioctl
#include <termios.h>
#define NL_TCGETS 0x5401
#define NL_TCSETS 0x5402
#define NL_TCSETSF 0x5404
#define TCSANOW 0
#define TCSADRAIN 1
#define TCSAFLUSH 2
static inline int nl_tcgetattr(int fd, struct termios *t) {
return nl_ioctl(fd, NL_TCGETS, t);
}
@ -101,7 +122,7 @@ static inline int nl_tcsetattr(int fd, int action, const struct termios *t) {
return nl_ioctl(fd, req, (void *)t);
}
/* Macro redirects */
// Macro redirects
#define write(fd, buf, n) nl_write(fd, buf, n)
#define read(fd, buf, n) nl_read(fd, buf, n)
#define _open2(p, f) nl_open(p, f, 0)

View file

@ -1,5 +1,4 @@
#include "nl_printf.h"
// #include "nolibc.h"
#include "nolibc.h"
#include <stdarg.h>
#include <stddef.h>
@ -163,3 +162,7 @@ int nl_snprintf(char *buf, size_t size, const char *fmt, ...) {
va_end(ap);
return r;
}
void nl_eprint(const char *msg) {
nl_write(2, msg, nl_strlen(msg));
}

View file

@ -1,17 +1,13 @@
#ifndef NL_PRINTF_H
#define NL_PRINTF_H
#include "nl_io.h"
#include "nl_string.h"
#include <stdarg.h>
#include <stddef.h>
int nl_vsnprintf(char *buf, size_t size, const char *fmt, va_list ap);
int nl_snprintf(char *buf, size_t size, const char *fmt, ...);
static inline void nl_eprint(const char *msg) {
nl_write(2, msg, nl_strlen(msg));
}
void nl_eprint(const char *msg);
static inline int nl_fmt_fps(char *buf, size_t sz, double fps) {
int whole = (int)fps;
@ -25,15 +21,4 @@ static inline int nl_fmt_fps(char *buf, size_t sz, double fps) {
#define snprintf nl_snprintf
#define stderr 2
#define fprintf(fd, fmt, ...) \
do { \
char _fb[1024]; \
int _fn = nl_snprintf(_fb, sizeof(_fb), fmt, ##__VA_ARGS__); \
if (_fn > 0) { \
size_t _nwrite = \
(_fn < (int)sizeof(_fb) - 1) ? (size_t)_fn : sizeof(_fb) - 1; \
nl_write((int)(long)(fd), _fb, _nwrite); \
} \
} while (0)
#endif