Ejemplo n.º 1
0
Archivo: IoSyslog.c Proyecto: Akiyah/io
IoObject *IoSyslog_open(IoSyslog *self, IoObject *locals, IoMessage *m)
{
	/*doc Syslog open(aPriority, someOptions, optionalIdentity)
	Opens the syslog for writing. optionalIdentity need not be entered 
	and will default to the name of the distribution of Io you are running 
	or if you have embedded Io into your application and set 
	Lobby distribution = "foo", it will be set to "foo".
	*/
	 
	int syslog_facility, syslog_options;
	//int i, max;
	char *syslog_ident;

	if (DATA(self)->syslog_opened)
	{
		IoState_error_(IOSTATE, m, "System log is already open");
		return IONIL(self);
	}

	{
		DATA(self)->facility = IOREF(IoMessage_locals_numberArgAt_(m, locals, 0));
		if (ISNIL(DATA(self)->facility))
		{
			syslog_facility = LOG_USER;
		}
		else
		{
			syslog_facility = IoObject_dataUint32(DATA(self)->facility);
		}

		DATA(self)->options = IOREF(IoMessage_locals_listArgAt_(m, locals, 1));
		syslog_options = 0;
		if (ISNIL(DATA(self)->options))
		{
			syslog_options = LOG_PID | LOG_CONS;
		}
		else
		{
			List *list = IoList_rawList(DATA(self)->options);

			LIST_FOREACH(list, i, v,
				syslog_options |= (int)CNUMBER(v);
			);
		}

		syslog_ident = (char *)IOSYMBOL_BYTES(DATA(self)->ident);
		if ((strlen(syslog_ident) == 0) || ISNIL(DATA(self)->ident))
		{
			char *s = CSTRING(IoState_doCString_(IOSTATE, "Lobby distribution"));
			strncpy(syslog_ident, s, strlen(s));
		}

		openlog(syslog_ident, syslog_options, syslog_facility);
		DATA(self)->syslog_opened = 1;
		DATA(self)->syslog_mask = setlogmask(0);
		setlogmask(DATA(self)->syslog_mask);
	}
Ejemplo n.º 2
0
void *IoThread_BeginThread(void *vti)
{
	IoThreadInfo *ti = (IoThreadInfo *)vti;
	Thread *t = IoThreadInfo_thread(ti);
	IoState *state = IoThreadInfo_state(ti);

	Thread_setUserData_(t, state);
	IoState_doCString_(state, IoThreadInfo_evalString(ti));
	IoThreadInfo_free(ti);
	IoState_free(state);
	Thread_destroy(t);
	return NULL;
}
Ejemplo n.º 3
0
Archivo: IoSocket.c Proyecto: BMeph/io
IoObject *IoSocket_fromFd(IoSocket *self, IoObject *locals, IoMessage *m)
{
	//doc Socket fromFd(descriptorId, addressFamily) Creates a new Socket with the low-level file descriptor (fd) set to descriptorId and it's address family (AF_INET or AF_UNIX) set to addressFamily.

	Socket *newSocketData = NULL;
	IoObject *newSocket = IoState_doCString_(IOSTATE, "Socket clone");
	
	newSocketData = SOCKET(newSocket);
	newSocketData->fd = IoMessage_locals_intArgAt_(m, locals, 0);
	newSocketData->af = IoMessage_locals_intArgAt_(m, locals, 1);
	
	if(Socket_makeReusable(newSocketData) && Socket_makeAsync(newSocketData)) {
		IoSocket_rawSetupEvents(newSocket, locals, m);
		return newSocket;
	}
	else {
		return SOCKETERROR("Failed to create socket from existing fd");
	}
}