Ejemplo n.º 1
0
int make_interactive()
{
	struct isiSession *ses;
	int i;
	if((i= isi_create_object(ISIT_SESSION, (struct objtype **)&ses))) {
		return i;
	}
	if(fcntl(0, F_SETFL, O_NONBLOCK) < 0) {
		isilogerr("fcntl");
		return -1;
	}
	ses->sfd = 0;
	ses->Recv = handle_stdin;
	isi_pushses(ses);
	return 0;
}
Ejemplo n.º 2
0
int isi_create_sync(struct isiNetSync **sync)
{
	return isi_create_object(ISIT_NETSYNC, (struct objtype**)sync);
}
Ejemplo n.º 3
0
int isi_createcpu(struct isiCPUInfo **ndev)
{
	return isi_create_object(ISIT_CPU, (struct objtype**)ndev);
}
Ejemplo n.º 4
0
int isi_createdev(struct isiInfo **ndev)
{
	return isi_create_object(ISIT_HARDWARE, (struct objtype**)ndev);
}
Ejemplo n.º 5
0
int isi_premake_object(int objtype, struct isiConstruct **outcon, struct objtype **out)
{
	uint32_t x;
	int i;
	int rs = 0;
	struct isiConstruct *con = NULL;
	if(!objtype || !out) return ISIERR_INVALIDPARAM;
	for(x = 0; x < allcon.count; x++) {
		if(allcon.table[x]->objtype == objtype) {
			con = allcon.table[x];
			break;
		}
	}
	if(!con) return ISIERR_NOTFOUND;
	*outcon = con;
	struct objtype *ndev;
	i = isi_create_object(objtype, &ndev);
	if(i) return i;
	struct isiInfo *info = (struct isiInfo*)ndev;
	if(objtype < 0x2f00) {
		*out = ndev;
		return 0;
	}
	info->meta = con;
	info->rvproto = con->rvproto;
	info->svproto = con->svproto;
	info->c = &emptyobject;
	if(con->PreInit) {
		rs = con->PreInit(info);
		if(rs) {
			isi_delete_object(ndev);
			*out = 0;
			return rs;
		}
	}
	if(objtype > 0x2f00 && con->QuerySize) {
		size_t sz = 0;
		con->QuerySize(0, &sz);
		if(sz) {
			info->rvstate = isi_alloc(sz);
		}
		sz = 0;
		con->QuerySize(1, &sz);
		if(sz) {
			info->svstate = isi_alloc(sz);
		}
	} else {
		if(con->rvproto && con->rvproto->length) {
			info->rvstate = isi_alloc(con->rvproto->length);
		}
		if(con->svproto && con->svproto->length) {
			info->svstate = isi_alloc(con->svproto->length);
		}
	}
	if(con->Init) {
		rs = con->Init(info);
		if(rs) {
			isi_delete_object(ndev);
			*out = 0;
			return rs;
		}
	}
	*out = ndev;
	return 0;
}