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); }
IoObject *IoYajlGen_pushNumberString(IoYajlGen *self, IoObject *locals, IoMessage *m) { IoSeq *s = IoMessage_locals_seqArgAt_(m, locals, 0); yajl_gen_number(DATA(self), (const char *)IOSYMBOL_BYTES(s), IOSYMBOL_LENGTH(s)); return self; }
IoObject *IoYajlGen_pushString(IoYajlGen *self, IoObject *locals, IoMessage *m) { IoSeq *s = IoMessage_locals_seqArgAt_(m, locals, 0); yajl_gen_string(DATA(self), (const unsigned char *)IOSYMBOL_BYTES(s), (int)IOSYMBOL_LENGTH(s)); return self; }