cortav  posix.c at [b4009ca1bd]

File bind/posix.c artifact 68a13b3104 part of check-in b4009ca1bd


#include "bind.h"

#include <unistd.h>
#include <stdio.h>
#include <assert.h>

_luafn(getcwd) { /* getcwd() */
	size_t bufsz = 256;
	/* VLA resize hack */ for (;;) {
		char cwd [bufsz];
		if (getcwd(cwd, bufsz) == NULL) {
			assert(bufsz < (2 * 1024*1024)); /* sanity check */
			bufsz = bufsz * 2;
			continue;
		}
		lua_pushstring(l, cwd);
		return 1;
	}
}

_luafn(isatty) { /* isatty(stream) */
	luaL_Stream* stream = lua_touserdata(l, 1);
	if (stream == NULL) return 0;
	int fd = fileno(stream -> f);
	_luaret_bool(isatty(fd));
}

_luaAPI(posix,
	_export(getcwd);
	_export(isatty));