void osinit(void) { #ifdef OREO set42sig(); setcompat(getcompat() & ~COMPAT_EXEC); signal(SIGIO, SIG_IGN); /* ignore SIGIO */ #endif /* OREO */ #ifdef aiws { struct sigstack inst; inst.ss_sp = xmalloc(4192) + 4192; inst.ss_onstack = 0; sigstack(&inst, NULL); } #endif /* aiws */ #ifdef apollo (void) isapad(); #endif #ifdef _SX /* * kill(SIGCONT) problems, don't know what this syscall does * [[email protected]] */ syscall(151, getpid(), getpid()); #endif /* _SX */ }
static void prefork_hooks(apr_pool_t *p) { /* The prefork open_logs phase must run before the core's, or stderr * will be redirected to a file, and the messages won't print to the * console. */ static const char *const aszSucc[] = {"core.c", NULL}; #ifdef AUX3 (void) set42sig(); #endif ap_hook_open_logs(prefork_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE); /* we need to set the MPM state before other pre-config hooks use MPM query * to retrieve it, so register as REALLY_FIRST */ ap_hook_pre_config(prefork_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST); }
OsInit() { static Bool been_here = FALSE; char fname[MAXPATHLEN]; #ifdef macII set42sig(); #endif /* hack test to decide where to log errors */ if (!been_here) { if (write (2, fname, 0)) { long t; char *ctime(); FILE *err; fclose(stdin); fclose(stdout); sprintf (fname, ADMPATH, display); /* * uses stdio to avoid os dependencies here, * a real os would use * open (fname, O_WRONLY|O_APPEND|O_CREAT, 0666) */ if (!(err = fopen (fname, "a"))) err = fopen ("/dev/null", "w"); if (err && (fileno(err) != 2)) { dup2 (fileno (err), 2); fclose (err); } #ifdef SYSV /* yes, even though it is 4.2bsd.... */ { static char buf[BUFSIZ]; setvbuf (stderr, buf, _IOLBF, BUFSIZ); } #else setlinebuf(stderr); #endif time (&t); fprintf (stderr, "start %s", ctime(&t)); } if (getpgrp (0) == 0) setpgrp (0, getpid ()); #ifndef SYSV #if !defined(AIXrt) && !defined(AIX386) if (limitDataSpace >= 0) { struct rlimit rlim; if (!getrlimit(RLIMIT_DATA, &rlim)) { if ((limitDataSpace > 0) && (limitDataSpace < rlim.rlim_max)) rlim.rlim_cur = limitDataSpace; else rlim.rlim_cur = rlim.rlim_max; (void)setrlimit(RLIMIT_DATA, &rlim); } } if (limitStackSpace >= 0) { struct rlimit rlim; if (!getrlimit(RLIMIT_STACK, &rlim)) { if ((limitStackSpace > 0) && (limitStackSpace < rlim.rlim_max)) rlim.rlim_cur = limitStackSpace; else rlim.rlim_cur = rlim.rlim_max; (void)setrlimit(RLIMIT_STACK, &rlim); } } #endif #endif been_here = TRUE; } if (!rgb_dbm) { #ifdef NDBM rgb_dbm = dbm_open(rgbPath, 0, 0); #else if (dbminit(rgbPath) == 0) rgb_dbm = 1; #endif if (!rgb_dbm) ErrorF( "Couldn't open RGB_DB '%s'\n", rgbPath ); } }
void OsInit(void) { static Bool been_here = FALSE; static char* admpath = ADMPATH; static char* devnull = "/dev/null"; char fname[PATH_MAX]; #ifdef macII set42sig(); #endif if (!been_here) { #if !defined(__SCO__) && !defined(__CYGWIN__) && !defined(__UNIXWARE__) fclose(stdin); fclose(stdout); #endif /* * If a write of zero bytes to stderr returns non-zero, i.e. -1, * then writing to stderr failed, and we'll write somewhere else * instead. (Apparently this never happens in the Real World.) */ if (write (2, fname, 0) == -1) { FILE *err; if (strlen (display) + strlen (admpath) + 1 < sizeof fname) sprintf (fname, admpath, display); else strcpy (fname, devnull); /* * uses stdio to avoid os dependencies here, * a real os would use * open (fname, O_WRONLY|O_APPEND|O_CREAT, 0666) */ if (!(err = fopen (fname, "a+"))) err = fopen (devnull, "w"); if (err && (fileno(err) != 2)) { dup2 (fileno (err), 2); fclose (err); } #if defined(SYSV) || defined(SVR4) || defined(__UNIXOS2__) || defined(WIN32) || defined(__CYGWIN__) { static char buf[BUFSIZ]; setvbuf (stderr, buf, _IOLBF, BUFSIZ); } #else setlinebuf(stderr); #endif } #ifndef X_NOT_POSIX if (getpgrp () == 0) setpgid (0, 0); #else #if !defined(SYSV) && !defined(WIN32) if (getpgrp (0) == 0) setpgrp (0, getpid ()); #endif #endif #ifdef RLIMIT_DATA if (limitDataSpace >= 0) { struct rlimit rlim; if (!getrlimit(RLIMIT_DATA, &rlim)) { if ((limitDataSpace > 0) && (limitDataSpace < rlim.rlim_max)) rlim.rlim_cur = limitDataSpace; else rlim.rlim_cur = rlim.rlim_max; (void)setrlimit(RLIMIT_DATA, &rlim); } } #endif #ifdef RLIMIT_STACK if (limitStackSpace >= 0) { struct rlimit rlim; if (!getrlimit(RLIMIT_STACK, &rlim)) { if ((limitStackSpace > 0) && (limitStackSpace < rlim.rlim_max)) rlim.rlim_cur = limitStackSpace; else rlim.rlim_cur = rlim.rlim_max; (void)setrlimit(RLIMIT_STACK, &rlim); } } #endif #ifdef RLIMIT_NOFILE if (limitNoFile >= 0) { struct rlimit rlim; if (!getrlimit(RLIMIT_NOFILE, &rlim)) { if ((limitNoFile > 0) && (limitNoFile < rlim.rlim_max)) rlim.rlim_cur = limitNoFile; else rlim.rlim_cur = rlim.rlim_max; #if 0 if (rlim.rlim_cur > MAXSOCKS) rlim.rlim_cur = MAXSOCKS; #endif (void)setrlimit(RLIMIT_NOFILE, &rlim); } } #endif #ifdef SERVER_LOCK LockServer(); #endif been_here = TRUE; } TimerInit(); #ifdef DDXOSINIT OsVendorInit(); #endif /* * No log file by default. OsVendorInit() should call LogInit() with the * log file name if logging to a file is desired. */ LogInit(NULL, NULL); #ifdef SMART_SCHEDULE if (!SmartScheduleDisable) if (!SmartScheduleInit ()) SmartScheduleDisable = TRUE; #endif OsInitAllocator(); if (!OsDelayInitColors) OsInitColors(); }