procnew = (apr_proc_t *)apr_pcalloc(p, sizeof(*procnew));
rc = apr_proc_create(procnew, pname, (const char * const *)args,
null, procattr, p);
if (rc == apr_success) {
apr_pool_note_subprocess(p, procnew, apr_kill_after_timeout);
(*fpin) = procnew->in;
}
}
return rc;
}
static int open_error_log(server_rec *s, apr_pool_t *p)
{
const char *fname;
int rc;
if (*s->error_fname == '|') {
apr_file_t *dummy = null;
/* this starts a new process... */
rc = log_child (p, s->error_fname + 1, &dummy);
if (rc != apr_success) {
ap_log_error(aplog_mark, aplog_startup, rc, null,
"couldn't start errorlog process");
return done;
}
s->error_log = dummy;
}
#ifdef have_syslog
else if (!strncasecmp(s->error_fname, "syslog", 6)) {
if ((fname = strchr(s->error_fname, ':'))) {
const trans *fac;
fname++;
for (fac = facilities; fac->t_name; fac++) {
if (!strcasecmp(fname, fac->t_name)) {
openlog(ap_server_argv0, log_ndelay|log_cons|log_pid,
fac->t_val);
s->error_log = null;
return ok;
}
}
}
else {
openlog(ap_server_argv0, log_ndelay|log_cons|log_pid, log_local7);
}
s->error_log = null;
}
#endif
else {
fname = ap_server_root_relative(p, s->error_fname);
if (!fname) {
ap_log_error(aplog_mark, aplog_startup, apr_ebadpath, null,
"%s: invalid error log path %s.",
ap_server_argv0, s->error_fname);
return done;
}
if ((rc = apr_file_open(&s->error_log, fname,
apr_append | apr_read | apr_write | apr_create,