asl_object_t asl_open(const char *ident, const char *facility, uint32_t opts) { asl_client_t *asl = asl_client_open(ident, facility, opts); if (asl == NULL) return NULL; _asl_global_init(0); if (!(opts & ASL_OPT_NO_REMOTE)) _asl_notify_open(1); return (asl_object_t)asl; }
aslclient asl_open(const char *ident, const char *facility, uint32_t opts) { char *name, *x; asl_client_t *asl; asl = (asl_client_t *)calloc(1, sizeof(asl_client_t)); if (asl == NULL) { errno = ENOMEM; return NULL; } asl->options = opts; asl->sock = -1; _asl_global_init(); asl->pid = getpid(); asl->uid = getuid(); asl->gid = getgid(); asl->filter = ASL_FILTER_MASK_UPTO(ASL_LEVEL_NOTICE); if (ident != NULL) { asl->name = strdup(ident); if (asl->name == NULL) { if (asl->sock >= 0) close(asl->sock); free(asl); return NULL; } } else { name = *(*_NSGetArgv()); if (name != NULL) { x = strrchr(name, '/'); if (x != NULL) x++; else x = name; asl->name = strdup(x); if (asl->name == NULL) { if (asl->sock >= 0) close(asl->sock); free(asl); return NULL; } } } asl->facility = NULL; if (facility != NULL) asl->facility = strdup(facility); else asl->facility = strdup(asl_syslog_faciliy_num_to_name(LOG_USER)); if (asl->facility == NULL) { if (asl->sock >= 0) close(asl->sock); if (asl->name != NULL) free(asl->name); free(asl); return NULL; } if (!(asl->options & ASL_OPT_NO_REMOTE)) _asl_notify_open(1); if (asl->options & ASL_OPT_STDERR) asl_add_output((aslclient)asl, fileno(stderr), ASL_MSG_FMT_STD, ASL_TIME_FMT_LCL, ASL_ENCODE_SAFE); asl->refcount = 1; return (aslclient)asl; }