Sigrid Solveig Haflínudóttirplan9/unsetenv: name is never nil41bba101 year agoHistory
154 lines · 2.3 KB · C
RawDownload
#include "sl.h"#include "timefuncs.h"#include <tos.h>#include "lsd.h" #define Nsec 1000000000ULL double D_PNAN, D_PINF; doublesec_realtime(void){	uvlong t = nsec();	uvlong ns = t % Nsec;	uvlong s = (t - ns) / Nsec;	return (double)s + (double)ns/1.0e9;} void *sl_segalloc(usize sz){	return segattach(SG_CEXEC, "memory", nil, sz);} voidsl_segfree(void *s, usize sz){	USED(sz);	if(s != nil)		segdetach(s);} voidsl_segused(void *s, usize sz, usize used){	USED(s); USED(sz); USED(used);} /* * nsec() is wallclock and can be adjusted by timesync * so need to use cycles() instead, but fall back to * nsec() in case we can't */u64intnanosec_monotonic(void){	static u64int fasthz, xstart;	u64int x; 	if(fasthz == ~0ULL)		return nsec() - xstart; 	if(fasthz == 0){		if(_tos->cyclefreq){			fasthz = _tos->cyclefreq;			cycles(&xstart);		} else {			fasthz = ~0ULL;			xstart = nsec();		}		return 0;	}	cycles(&x);	x -= xstart; 	u64int q = x / fasthz;	u64int r = x % fasthz; 	return q*Nsec + r*Nsec/fasthz;} voidtimestr(double s, char *buf, int sz){	Tm tm;	snprint(buf, sz, "%τ", tmfmt(tmtime(&tm, s, tzload("local")), nil));} doubleparsetime(const char *s){	Tm tm;	if(tmparse(&tm, "?WWW, ?MM ?DD hh:mm:ss ?Z YYYY", s, tzload("local"), nil) == nil)		return -1;	return tmnorm(&tm);} voidsleep_ms(int ms){	if(ms != 0)		sleep(ms);} intftruncate(int f, soffset sz){	Dir d; 	nulldir(&d);	d.length = sz;	return dirfwstat(f, &d) > 0 ? 0 : -1;} intunsetenv(const char *name){	char ename[100]; 	if(*name == 0 || strchr(name, '/') != nil ||	   strcmp(name, ".") == 0 || strcmp(name, "..") == 0 ||	   strlen(name) >= sizeof(ename)-5){		werrstr("bad env name: %s", name);		return -1;	}	snprint(ename, sizeof(ename), "/env/%s", name);	if(access(ename, AEXIST) == 0)		return remove(ename);	return 0;} voidsys_setcurrpc(int dummy){	USED(dummy);	sys_setcallpc(dummy);} BUILTIN("getpid", getpid){	USED(args);	argcount(nargs, 0);	return fixnum(getpid());} voidsys_init(void){	lsd_init();} extern uchar bootcode[];extern ulong bootlen; voidmain(int argc, char **argv){	argv0 = argv[0];	setfcr(FPPDBL|FPRNR|FPOVFL);	tmfmtinstall();	D_PNAN = strtod("+NaN", nil);	D_PINF = strtod("+Inf", nil);	slmain(bootcode, bootlen, argc, argv);}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t