Exemple #1
0
N_NIMCALL(void, socketerror_514027)(Socketimpl513407* socket, NI err, NIM_BOOL async, NI32 lasterror) {
{	{
		NIM_BOOL LOC3;
		NI32 laste;
		LOC3 = 0;
		LOC3 = (err == ((NI) -1));
		if (!(LOC3)) goto LA4;
		LOC3 = NIM_TRUE;
		LA4: ;
		if (!LOC3) goto LA5;
		{
			if (!(((NI) (lasterror)) == ((NI) -1))) goto LA9;
			laste = getsocketerror_514001(socket);
		}
		goto LA7;
		LA9: ;
		{
			laste = lasterror;
		}
		LA7: ;
		{
			if (!async) goto LA14;
			{
				NIM_BOOL LOC18;
				LOC18 = 0;
				LOC18 = (laste == EAGAIN);
				if (LOC18) goto LA19;
				LOC18 = (laste == EWOULDBLOCK);
				LA19: ;
				if (!LOC18) goto LA20;
				goto BeforeRet;
			}
			goto LA16;
			LA20: ;
			{
				raiseoserror_115809(laste);
			}
			LA16: ;
		}
		goto LA12;
		LA14: ;
		{
			raiseoserror_115809(laste);
		}
		LA12: ;
	}
	LA5: ;
	}BeforeRet: ;
}
Exemple #2
0
N_NIMCALL(void, close_231248)(Memfile230208* f) {
	NIM_BOOL error;
	NI32 lasterr;
	error = NIM_FALSE;
	lasterr = 0;
	{
		int LOC5;
		NIM_BOOL LOC6;
		int LOC7;
		if (!!(((*f).handle == ((NI32) 0)))) goto LA3;
		LOC5 = 0;
		LOC5 = munmap((*f).mem, (*f).size);
		error = !((LOC5 == ((NI32) 0)));
		lasterr = oslasterror_115833();
		LOC6 = 0;
		LOC7 = 0;
		LOC7 = close((*f).handle);
		LOC6 = !((LOC7 == ((NI32) 0)));
		if (LOC6) goto LA8;
		LOC6 = error;
		LA8: ;
		error = LOC6;
	}
	LA3: ;
	(*f).size = ((NI) 0);
	(*f).mem = NIM_NIL;
	(*f).handle = ((int) 0);
	{
		if (!error) goto LA11;
		raiseoserror_115809(lasterr);
	}
	LA11: ;
}
Exemple #3
0
N_NIMCALL(NimStringDesc*, nosgetCurrentDir)(void) {
	NimStringDesc* result;
	result = 0;
	result = mnewString(((NI) 512));
	{
		NCSTRING LOC3;
		NI LOC6;
		LOC3 = 0;
		LOC3 = getcwd(result->data, ((NI) 512));
		if (!!((LOC3 == NIM_NIL))) goto LA4;
		LOC6 = 0;
		LOC6 = strlen(result->data);
		result = setLengthStr(result, ((NI) (LOC6)));
	}
	goto LA1;
	LA4: ;
	{
		NI32 LOC8;
		LOC8 = 0;
		LOC8 = oslasterror_115833();
		raiseoserror_115809(LOC8);
	}
	LA1: ;
	return result;
}
Exemple #4
0
N_NIMCALL(void, acceptaddr_514813)(Socketimpl513407* server, Socketimpl513407** client, NimStringDesc** address, NU8 flags) {
	struct sockaddr_in sockaddress;
	socklen_t addrlen;
	int sock;
	memset((void*)(&sockaddress), 0, sizeof(sockaddress));
	addrlen = ((socklen_t) (((NI)sizeof(struct sockaddr_in))));
	sock = accept((*server).fd, ((struct sockaddr*) ((&sockaddress))), (&addrlen));
	{
		NI32 err;
		if (!(sock == osinvalidsocket_508651)) goto LA3;
		err = oslasterror_115833();
		{
			NIM_BOOL LOC7;
			LOC7 = 0;
			LOC7 = isdisconnectionerror_513481(flags, err);
			if (!LOC7) goto LA8;
			acceptaddr_514813(server, client, address, flags);
		}
		LA8: ;
		raiseoserror_115809(err);
	}
	goto LA1;
	LA3: ;
	{
		NCSTRING LOC11;
		(*(*client)).fd = sock;
		(*(*client)).isbuffered = (*server).isbuffered;
		LOC11 = 0;
		LOC11 = inet_ntoa(sockaddress.sin_addr);
		unsureAsgnRef((void**) (&(*address)), cstrToNimstr(LOC11));
	}
	LA1: ;
}
Exemple #5
0
N_NIMCALL(void*, mapmem_230219)(Memfile230208* m, NU8 mode, NI mappedsize, NI offset) {
	void* result;
	NIM_BOOL readonly;
	int LOC5;
	NI32 LOC11;
	nimfr("mapMem", "memfiles.nim")
	result = 0;
	nimln(41, "memfiles.nim");
	readonly = (mode == ((NU8) 0));
	nimln(53, "memfiles.nim");
	{
		if (!!((((NI) 0) < mappedsize))) goto LA3;
		failedassertimpl_87017(((NimStringDesc*) &TMP3729));
	}
	LA3: ;
	nimln(54, "memfiles.nim");
	LOC5 = 0;
	nimln(57, "memfiles.nim");
	{
		if (!readonly) goto LA8;
		LOC5 = PROT_READ;
	}
	goto LA6;
	LA8: ;
	{
		LOC5 = (NI32)(PROT_READ | PROT_WRITE);
	}
	LA6: ;
	LOC11 = 0;
	nimln(58, "memfiles.nim");
	{
		if (!readonly) goto LA14;
		LOC11 = (NI32)(MAP_PRIVATE | Mappopulate_109116);
	}
	goto LA12;
	LA14: ;
	{
		LOC11 = (NI32)(MAP_SHARED | Mappopulate_109116);
	}
	LA12: ;
	result = mmap(NIM_NIL, mappedsize, LOC5, LOC11, (*m).handle, ((off_t) (offset)));
	nimln(60, "memfiles.nim");
	{
		NI32 LOC21;
		if (!(result == ((void*) (MAP_FAILED)))) goto LA19;
		nimln(61, "memfiles.nim");
		LOC21 = 0;
		LOC21 = oslasterror_115833();
		raiseoserror_115809(LOC21);
	}
	LA19: ;
	popFrame();
	return result;
}
Exemple #6
0
N_NIMCALL(void, bindaddr_514620)(Socketimpl513407* socket, NU16 port, NimStringDesc* address) {
	{
		struct sockaddr_in name;
		if (!((address) && (address)->Sup.len == 0)) goto LA3;
		memset((void*)(&name), 0, sizeof(name));
		name.sin_family = toint_508829(((NU8) 2));
		name.sin_port = htons_510017(((NI16) (port)));
		name.sin_addr.s_addr = htonl_510007(INADDR_ANY);
		{
			int LOC7;
			NI32 LOC10;
			LOC7 = 0;
			LOC7 = bindaddr_509214((*socket).fd, ((struct sockaddr*) ((&name))), ((socklen_t) (((NI)sizeof(struct sockaddr_in)))));
			if (!(LOC7 < ((NI32) 0))) goto LA8;
			LOC10 = 0;
			LOC10 = oslasterror_115833();
			raiseoserror_115809(LOC10);
		}
		LA8: ;
	}
	goto LA1;
	LA3: ;
	{
		struct addrinfo* ailist;
		ailist = getaddrinfo_509408(address, port, ((NU8) 2), ((NU8) 1), ((NU8) 6));
		{
			int LOC14;
			NI32 LOC17;
			LOC14 = 0;
			LOC14 = bindaddr_509214((*socket).fd, (*ailist).ai_addr, (*ailist).ai_addrlen);
			if (!(LOC14 < ((NI32) 0))) goto LA15;
			dealloc_509621(ailist);
			LOC17 = 0;
			LOC17 = oslasterror_115833();
			raiseoserror_115809(LOC17);
		}
		LA15: ;
		dealloc_509621(ailist);
	}
	LA1: ;
}
Exemple #7
0
N_NIMCALL(void, listen_514610)(Socketimpl513407* socket, int backlog) {
	{
		int LOC3;
		NI32 LOC6;
		LOC3 = 0;
		LOC3 = listen_509227((*socket).fd, backlog);
		if (!(LOC3 < ((NI32) 0))) goto LA4;
		LOC6 = 0;
		LOC6 = oslasterror_115833();
		raiseoserror_115809(LOC6);
	}
	LA4: ;
}
Exemple #8
0
N_NIMCALL(void, unmapmem_230608)(Memfile230208* f, void* p, NI size) {
	nimfr("unmapMem", "memfiles.nim")
	nimln(72, "memfiles.nim");
	{
		int LOC3;
		NI32 LOC6;
		LOC3 = 0;
		LOC3 = munmap(p, size);
		if (!!((LOC3 == ((NI32) 0)))) goto LA4;
		LOC6 = 0;
		LOC6 = oslasterror_115833();
		raiseoserror_115809(LOC6);
	}
	LA4: ;
	popFrame();
}
Exemple #9
0
N_NIMCALL(Socketimpl513407*, newsocket_513830)(NU8 domain, NU8 typ, NU8 protocol, NIM_BOOL buffered) {
	Socketimpl513407* result;
	int fd;
	result = 0;
	fd = newrawsocket_509004(domain, typ, protocol);
	{
		NI32 LOC5;
		if (!(fd == osinvalidsocket_508651)) goto LA3;
		LOC5 = 0;
		LOC5 = oslasterror_115833();
		raiseoserror_115809(LOC5);
	}
	LA3: ;
	result = newsocket_513708(fd, buffered);
	return result;
}
Exemple #10
0
N_NIMCALL(void, close_231249)(Memfile230208* f) {
	NIM_BOOL error;
	NI32 lasterr;
	nimfr("close", "memfiles.nim")
	nimln(222, "memfiles.nim");
	error = NIM_FALSE;
	lasterr = 0;
	nimln(232, "memfiles.nim");
	{
		int LOC5;
		NIM_BOOL LOC6;
		int LOC7;
		if (!!(((*f).handle == ((NI32) 0)))) goto LA3;
		nimln(233, "memfiles.nim");
		LOC5 = 0;
		LOC5 = munmap((*f).mem, (*f).size);
		error = !((LOC5 == ((NI32) 0)));
		nimln(234, "memfiles.nim");
		lasterr = oslasterror_115833();
		nimln(235, "memfiles.nim");
		LOC6 = 0;
		LOC7 = 0;
		LOC7 = close((*f).handle);
		LOC6 = !((LOC7 == ((NI32) 0)));
		if (LOC6) goto LA8;
		LOC6 = error;
		LA8: ;
		error = LOC6;
	}
	LA3: ;
	nimln(237, "memfiles.nim");
	(*f).size = ((NI) 0);
	nimln(238, "memfiles.nim");
	(*f).mem = NIM_NIL;
	nimln(244, "memfiles.nim");
	(*f).handle = ((int) 0);
	nimln(246, "memfiles.nim");
	{
		if (!error) goto LA11;
		raiseoserror_115809(lasterr);
	}
	LA11: ;
	popFrame();
}
Exemple #11
0
N_NIMCALL(void, rawcreatedir_122843)(NimStringDesc* dir) {
	{
		NIM_BOOL LOC3;
		int LOC4;
		NI32 LOC8;
		LOC3 = 0;
		LOC4 = 0;
		LOC4 = mkdir(dir->data, ((mode_t) 511));
		LOC3 = !((LOC4 == ((NI32) 0)));
		if (!(LOC3)) goto LA5;
		LOC3 = !((errno == EEXIST));
		LA5: ;
		if (!LOC3) goto LA6;
		LOC8 = 0;
		LOC8 = oslasterror_115833();
		raiseoserror_115809(LOC8);
	}
	LA6: ;
}
Exemple #12
0
N_NIMCALL(void, putenv_121669)(NimStringDesc* key, NimStringDesc* val) {
	NI indx;
	indx = findenvvar_121605(key);
	{
		NimStringDesc* LOC5;
		if (!(((NI) 0) <= indx)) goto LA3;
		LOC5 = 0;
		LOC5 = rawNewString(key->Sup.len + val->Sup.len + 1);
appendString(LOC5, key);
appendChar(LOC5, 61);
appendString(LOC5, val);
		asgnRefNoCycle((void**) (&environment_121009->data[indx]), LOC5);
	}
	goto LA1;
	LA3: ;
	{
		NimStringDesc* LOC7;
		NimStringDesc* LOC8;
		LOC7 = 0;
		LOC7 = rawNewString(key->Sup.len + val->Sup.len + 1);
appendString(LOC7, key);
appendChar(LOC7, 61);
appendString(LOC7, val);
		environment_121009 = (TY121008*) incrSeq(&(environment_121009)->Sup, sizeof(NimStringDesc*));
		LOC8 = 0;
		LOC8 = environment_121009->data[environment_121009->Sup.len-1]; environment_121009->data[environment_121009->Sup.len-1] = copyStringRC1(LOC7);
		if (LOC8) nimGCunrefNoCycle(LOC8);
		indx = (environment_121009 ? (environment_121009->Sup.len-1) : -1);
	}
	LA1: ;
	{
		int LOC11;
		NI32 LOC14;
		LOC11 = 0;
		LOC11 = putenv(environment_121009->data[indx]->data);
		if (!!((LOC11 == ((NI32) 0)))) goto LA12;
		LOC14 = 0;
		LOC14 = oslasterror_115833();
		raiseoserror_115809(LOC14);
	}
	LA12: ;
}
Exemple #13
0
N_NIMCALL(NimStringDesc*, nosexpandFilename)(NimStringDesc* filename) {
	NimStringDesc* result;
	NCSTRING r;
	NI LOC6;
	result = 0;
	result = mnewString(((NI) (PATH_MAX)));
	r = realpath(filename->data, result->data);
	{
		NI32 LOC5;
		if (!r == 0) goto LA3;
		LOC5 = 0;
		LOC5 = oslasterror_115833();
		raiseoserror_115809(LOC5);
	}
	LA3: ;
	LOC6 = 0;
	LOC6 = strlen(result->data);
	result = setLengthStr(result, ((NI) (LOC6)));
	return result;
}
Exemple #14
0
N_NIMCALL(time_t, nosgetLastModificationTime)(NimStringDesc* file) {
	time_t result;
	struct stat res;
{	result = 0;
	memset((void*)(&res), 0, sizeof(res));
	{
		int LOC3;
		NI32 LOC6;
		LOC3 = 0;
		LOC3 = stat(file->data, (&res));
		if (!(LOC3 < ((NI32) 0))) goto LA4;
		LOC6 = 0;
		LOC6 = oslasterror_115833();
		raiseoserror_115809(LOC6);
	}
	LA4: ;
	result = res.st_mtime;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}
Exemple #15
0
N_NIMCALL(Memfile230208, open_230807)(NimStringDesc* filename, NU8 mode, NI mappedsize, NI offset, NI newfilesize) {
	Memfile230208 result;
	NIM_BOOL readonly;
	int flags;
	int LOC59;
	NI32 LOC65;
	nimfr("open", "memfiles.nim")
	memset((void*)(&result), 0, sizeof(result));
	nimln(96, "memfiles.nim");
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = (newfilesize == ((NI) -1));
		if (LOC3) goto LA4;
		LOC3 = !((mode == ((NU8) 0)));
		LA4: ;
		if (!!(LOC3)) goto LA5;
		failedassertimpl_87017(((NimStringDesc*) &TMP3730));
	}
	LA5: ;
	nimln(97, "memfiles.nim");
	readonly = (mode == ((NU8) 0));
	nimln(178, "memfiles.nim");
	{
		if (!readonly) goto LA9;
		flags = O_RDONLY;
	}
	goto LA7;
	LA9: ;
	{
		flags = O_RDWR;
	}
	LA7: ;
	nimln(180, "memfiles.nim");
	{
		NI32 permissionsmode;
		if (!!((newfilesize == ((NI) -1)))) goto LA14;
		nimln(181, "memfiles.nim");
		flags = (NI32)((NI32)(flags | O_CREAT) | O_TRUNC);
		nimln(182, "memfiles.nim");
		permissionsmode = (NI32)(S_IRUSR | S_IWUSR);
		nimln(183, "memfiles.nim");
		result.handle = open(filename->data, flags, permissionsmode);
	}
	goto LA12;
	LA14: ;
	{
		nimln(185, "memfiles.nim");
		result.handle = open(filename->data, flags);
	}
	LA12: ;
	nimln(187, "memfiles.nim");
	{
		NI32 LOC26;
		if (!(result.handle == ((NI32) -1))) goto LA19;
		nimln(100, "memfiles.nim");
		result.mem = NIM_NIL;
		nimln(101, "memfiles.nim");
		result.size = ((NI) 0);
		nimln(175, "memfiles.nim");
		{
			int LOC25;
			if (!!((result.handle == ((NI32) 0)))) goto LA23;
			LOC25 = 0;
			LOC25 = close(result.handle);
		}
		LA23: ;
		nimln(176, "memfiles.nim");
		nimln(190, "memfiles.nim");
		LOC26 = 0;
		LOC26 = oslasterror_115833();
		raiseoserror_115809(LOC26);
	}
	LA19: ;
	nimln(192, "memfiles.nim");
	{
		if (!!((newfilesize == ((NI) -1)))) goto LA29;
		nimln(193, "memfiles.nim");
		{
			int LOC33;
			NI32 LOC41;
			LOC33 = 0;
			LOC33 = ftruncate(result.handle, ((off_t) (newfilesize)));
			if (!(LOC33 == ((NI32) -1))) goto LA34;
			nimln(100, "memfiles.nim");
			result.mem = NIM_NIL;
			nimln(101, "memfiles.nim");
			result.size = ((NI) 0);
			nimln(175, "memfiles.nim");
			{
				int LOC40;
				if (!!((result.handle == ((NI32) 0)))) goto LA38;
				LOC40 = 0;
				LOC40 = close(result.handle);
			}
			LA38: ;
			nimln(176, "memfiles.nim");
			nimln(194, "memfiles.nim");
			LOC41 = 0;
			LOC41 = oslasterror_115833();
			raiseoserror_115809(LOC41);
		}
		LA34: ;
	}
	LA29: ;
	nimln(196, "memfiles.nim");
	{
		if (!!((mappedsize == ((NI) -1)))) goto LA44;
		nimln(197, "memfiles.nim");
		result.size = mappedsize;
	}
	goto LA42;
	LA44: ;
	{
		struct stat stat;
		memset((void*)(&stat), 0, sizeof(stat));
		nimln(200, "memfiles.nim");
		{
			int LOC49;
			LOC49 = 0;
			LOC49 = fstat(result.handle, (&stat));
			if (!!((LOC49 == ((NI32) -1)))) goto LA50;
			nimln(203, "memfiles.nim");
			result.size = ((NI) (stat.st_size));
		}
		goto LA47;
		LA50: ;
		{
			NI32 LOC58;
			nimln(100, "memfiles.nim");
			result.mem = NIM_NIL;
			nimln(101, "memfiles.nim");
			result.size = ((NI) 0);
			nimln(175, "memfiles.nim");
			{
				int LOC57;
				if (!!((result.handle == ((NI32) 0)))) goto LA55;
				LOC57 = 0;
				LOC57 = close(result.handle);
			}
			LA55: ;
			nimln(176, "memfiles.nim");
			nimln(205, "memfiles.nim");
			LOC58 = 0;
			LOC58 = oslasterror_115833();
			raiseoserror_115809(LOC58);
		}
		LA47: ;
	}
	LA42: ;
	nimln(207, "memfiles.nim");
	LOC59 = 0;
	nimln(210, "memfiles.nim");
	{
		if (!readonly) goto LA62;
		LOC59 = PROT_READ;
	}
	goto LA60;
	LA62: ;
	{
		LOC59 = (NI32)(PROT_READ | PROT_WRITE);
	}
	LA60: ;
	LOC65 = 0;
	nimln(211, "memfiles.nim");
	{
		if (!readonly) goto LA68;
		LOC65 = (NI32)(MAP_PRIVATE | Mappopulate_109116);
	}
	goto LA66;
	LA68: ;
	{
		LOC65 = (NI32)(MAP_SHARED | Mappopulate_109116);
	}
	LA66: ;
	result.mem = mmap(NIM_NIL, result.size, LOC59, LOC65, result.handle, ((off_t) (offset)));
	nimln(215, "memfiles.nim");
	{
		NI32 LOC80;
		if (!(result.mem == ((void*) (MAP_FAILED)))) goto LA73;
		nimln(100, "memfiles.nim");
		result.mem = NIM_NIL;
		nimln(101, "memfiles.nim");
		result.size = ((NI) 0);
		nimln(175, "memfiles.nim");
		{
			int LOC79;
			if (!!((result.handle == ((NI32) 0)))) goto LA77;
			LOC79 = 0;
			LOC79 = close(result.handle);
		}
		LA77: ;
		nimln(176, "memfiles.nim");
		nimln(216, "memfiles.nim");
		LOC80 = 0;
		LOC80 = oslasterror_115833();
		raiseoserror_115809(LOC80);
	}
	LA73: ;
	popFrame();
	return result;
}
Exemple #16
0
N_NIMCALL(NI, waitfor_516819)(Socketimpl513407* socket, NF* waited, NI timeout, NI size, NimStringDesc* funcname) {
	NI result;
{	result = 0;
	result = ((NI) 1);
	{
		if (!(size <= ((NI) 0))) goto LA3;
	}
	LA3: ;
	{
		if (!(timeout == ((NI) -1))) goto LA7;
		result = size;
		goto BeforeRet;
	}
	LA7: ;
	{
		NIM_BOOL LOC11;
		NIM_BOOL LOC12;
		LOC11 = 0;
		LOC12 = 0;
		LOC12 = (*socket).isbuffered;
		if (!(LOC12)) goto LA13;
		LOC12 = !(((*socket).isbufferedU.S1.buflen == ((NI) 0)));
		LA13: ;
		LOC11 = LOC12;
		if (!(LOC11)) goto LA14;
		LOC11 = !(((*socket).isbufferedU.S1.buflen == (*socket).isbufferedU.S1.currpos));
		LA14: ;
		if (!LOC11) goto LA15;
		result = (NI)((*socket).isbufferedU.S1.buflen - (*socket).isbufferedU.S1.currpos);
		result = ((result <= size) ? result : size);
	}
	goto LA9;
	LA15: ;
	{
		NF starttime;
		NI selret;
		NF LOC33;
		{
			Timeouterror513415* e_517013;
			NimStringDesc* LOC22;
			if (!((NI)(timeout - ((NI) (((NF)((*waited)) * (NF)(1.0000000000000000e+03))))) < ((NI) 1))) goto LA20;
			e_517013 = 0;
			e_517013 = (Timeouterror513415*) newObj((&NTI517014), sizeof(Timeouterror513415));
			(*e_517013).Sup.Sup.m_type = (&NTI513415);
			LOC22 = 0;
			LOC22 = rawNewString(funcname->Sup.len + 21);
appendString(LOC22, ((NimStringDesc*) &TMP5000));
appendString(LOC22, funcname);
appendString(LOC22, ((NimStringDesc*) &TMP5001));
			asgnRefNoCycle((void**) (&(*e_517013).Sup.message), LOC22);
			raiseException((Exception*)e_517013, "TimeoutError");
		}
		LA20: ;
		starttime = ntepochTime();
		selret = select_516207(socket, (NI)(timeout - ((NI) (((NF)((*waited)) * (NF)(1.0000000000000000e+03))))));
		{
			NI32 LOC27;
			if (!(selret < ((NI) 0))) goto LA25;
			LOC27 = 0;
			LOC27 = oslasterror_115833();
			raiseoserror_115809(LOC27);
		}
		LA25: ;
		{
			Timeouterror513415* e_517206;
			NimStringDesc* LOC32;
			if (!!((selret == ((NI) 1)))) goto LA30;
			e_517206 = 0;
			e_517206 = (Timeouterror513415*) newObj((&NTI517014), sizeof(Timeouterror513415));
			(*e_517206).Sup.Sup.m_type = (&NTI513415);
			LOC32 = 0;
			LOC32 = rawNewString(funcname->Sup.len + 21);
appendString(LOC32, ((NimStringDesc*) &TMP5000));
appendString(LOC32, funcname);
appendString(LOC32, ((NimStringDesc*) &TMP5001));
			asgnRefNoCycle((void**) (&(*e_517206).Sup.message), LOC32);
			raiseException((Exception*)e_517206, "TimeoutError");
		}
		LA30: ;
		LOC33 = 0;
		LOC33 = ntepochTime();
		HEX2BHEX3D_102688(waited, ((NF)(LOC33) - (NF)(starttime)));
	}
	LA9: ;
	}BeforeRet: ;
	return result;
}
Exemple #17
0
N_NIMCALL(Memfile230208, open_230807)(NimStringDesc* filename, NU8 mode, NI mappedsize, NI offset, NI newfilesize) {
	Memfile230208 result;
	NIM_BOOL readonly;
	int flags;
	int LOC53;
	NI32 LOC59;
	memset((void*)(&result), 0, sizeof(result));
	readonly = (mode == ((NU8) 0));
	{
		if (!readonly) goto LA3;
		flags = O_RDONLY;
	}
	goto LA1;
	LA3: ;
	{
		flags = O_RDWR;
	}
	LA1: ;
	{
		NI32 permissionsmode;
		if (!!((newfilesize == ((NI) -1)))) goto LA8;
		flags = (NI32)((NI32)(flags | O_CREAT) | O_TRUNC);
		permissionsmode = (NI32)(S_IRUSR | S_IWUSR);
		result.handle = open(filename->data, flags, permissionsmode);
	}
	goto LA6;
	LA8: ;
	{
		result.handle = open(filename->data, flags);
	}
	LA6: ;
	{
		NI32 LOC20;
		if (!(result.handle == ((NI32) -1))) goto LA13;
		result.mem = NIM_NIL;
		result.size = ((NI) 0);
		{
			int LOC19;
			if (!!((result.handle == ((NI32) 0)))) goto LA17;
			LOC19 = 0;
			LOC19 = close(result.handle);
		}
		LA17: ;
		LOC20 = 0;
		LOC20 = oslasterror_115833();
		raiseoserror_115809(LOC20);
	}
	LA13: ;
	{
		if (!!((newfilesize == ((NI) -1)))) goto LA23;
		{
			int LOC27;
			NI32 LOC35;
			LOC27 = 0;
			LOC27 = ftruncate(result.handle, ((off_t) (newfilesize)));
			if (!(LOC27 == ((NI32) -1))) goto LA28;
			result.mem = NIM_NIL;
			result.size = ((NI) 0);
			{
				int LOC34;
				if (!!((result.handle == ((NI32) 0)))) goto LA32;
				LOC34 = 0;
				LOC34 = close(result.handle);
			}
			LA32: ;
			LOC35 = 0;
			LOC35 = oslasterror_115833();
			raiseoserror_115809(LOC35);
		}
		LA28: ;
	}
	LA23: ;
	{
		if (!!((mappedsize == ((NI) -1)))) goto LA38;
		result.size = mappedsize;
	}
	goto LA36;
	LA38: ;
	{
		struct stat stat;
		memset((void*)(&stat), 0, sizeof(stat));
		{
			int LOC43;
			LOC43 = 0;
			LOC43 = fstat(result.handle, (&stat));
			if (!!((LOC43 == ((NI32) -1)))) goto LA44;
			result.size = ((NI) (stat.st_size));
		}
		goto LA41;
		LA44: ;
		{
			NI32 LOC52;
			result.mem = NIM_NIL;
			result.size = ((NI) 0);
			{
				int LOC51;
				if (!!((result.handle == ((NI32) 0)))) goto LA49;
				LOC51 = 0;
				LOC51 = close(result.handle);
			}
			LA49: ;
			LOC52 = 0;
			LOC52 = oslasterror_115833();
			raiseoserror_115809(LOC52);
		}
		LA41: ;
	}
	LA36: ;
	LOC53 = 0;
	{
		if (!readonly) goto LA56;
		LOC53 = PROT_READ;
	}
	goto LA54;
	LA56: ;
	{
		LOC53 = (NI32)(PROT_READ | PROT_WRITE);
	}
	LA54: ;
	LOC59 = 0;
	{
		if (!readonly) goto LA62;
		LOC59 = (NI32)(MAP_PRIVATE | Mappopulate_108316);
	}
	goto LA60;
	LA62: ;
	{
		LOC59 = (NI32)(MAP_SHARED | Mappopulate_108316);
	}
	LA60: ;
	result.mem = mmap(NIM_NIL, result.size, LOC53, LOC59, result.handle, ((off_t) (offset)));
	{
		NI32 LOC74;
		if (!(result.mem == ((void*) (MAP_FAILED)))) goto LA67;
		result.mem = NIM_NIL;
		result.size = ((NI) 0);
		{
			int LOC73;
			if (!!((result.handle == ((NI32) 0)))) goto LA71;
			LOC73 = 0;
			LOC73 = close(result.handle);
		}
		LA71: ;
		LOC74 = 0;
		LOC74 = oslasterror_115833();
		raiseoserror_115809(LOC74);
	}
	LA67: ;
	return result;
}