22 |
|
* $Id$ |
23 |
|
*/ |
24 |
|
|
25 |
+ |
#define IN_MISC_C |
26 |
|
#include "stdinc.h" |
27 |
|
|
28 |
+ |
#ifndef _WIN32 |
29 |
+ |
#include <sys/utsname.h> |
30 |
+ |
#endif |
31 |
+ |
|
32 |
|
struct timeval SystemTime; |
33 |
|
|
34 |
|
static const char *months[] = |
89 |
|
smalldate(time_t lclock) |
90 |
|
{ |
91 |
|
static char buf[MAX_DATE_STRING]; |
92 |
+ |
static time_t last_time = 0; |
93 |
|
struct tm *lt, *gm; |
94 |
|
struct tm gmbuf; |
95 |
|
|
96 |
|
if (!lclock) |
97 |
|
lclock = CurrentTime; |
98 |
|
|
99 |
+ |
// Check if our cache still applies |
100 |
+ |
if (lclock == last_time) |
101 |
+ |
return buf; |
102 |
+ |
|
103 |
+ |
last_time = lclock; |
104 |
+ |
|
105 |
|
gm = gmtime(&lclock); |
106 |
|
memcpy(&gmbuf, gm, sizeof(gmbuf)); |
107 |
|
gm = &gmbuf; |
133 |
|
return timebuffer; |
134 |
|
} |
135 |
|
|
136 |
+ |
|
137 |
+ |
#ifdef _WIN32 |
138 |
+ |
/* Copyright (C) 2001 Free Software Foundation, Inc. |
139 |
+ |
* |
140 |
+ |
* Get name and information about current kernel. |
141 |
+ |
*/ |
142 |
+ |
int |
143 |
+ |
uname(struct utsname *uts) |
144 |
+ |
{ |
145 |
+ |
enum { WinNT, Win95, Win98, WinUnknown }; |
146 |
+ |
OSVERSIONINFO osver; |
147 |
+ |
SYSTEM_INFO sysinfo; |
148 |
+ |
DWORD sLength; |
149 |
+ |
DWORD os = WinUnknown; |
150 |
+ |
|
151 |
+ |
memset(uts, 0, sizeof(*uts)); |
152 |
+ |
|
153 |
+ |
osver.dwOSVersionInfoSize = sizeof(osver); |
154 |
+ |
GetVersionEx(&osver); |
155 |
+ |
GetSystemInfo(&sysinfo); |
156 |
+ |
|
157 |
+ |
switch (osver.dwPlatformId) |
158 |
+ |
{ |
159 |
+ |
case VER_PLATFORM_WIN32_NT: /* NT, Windows 2000 or Windows XP */ |
160 |
+ |
if (osver.dwMajorVersion == 4) |
161 |
+ |
strcpy (uts->sysname, "Windows NT4x"); /* NT4x */ |
162 |
+ |
else if (osver.dwMajorVersion <= 3) |
163 |
+ |
strcpy (uts->sysname, "Windows NT3x"); /* NT3x */ |
164 |
+ |
else if (osver.dwMajorVersion == 5 && osver.dwMinorVersion < 1) |
165 |
+ |
strcpy (uts->sysname, "Windows 2000"); /* 2k */ |
166 |
+ |
else if (osver.dwMajorVersion == 5 && osver.dwMinorVersion == 2) |
167 |
+ |
strcpy (uts->sysname, "Windows 2003"); /* 2003 */ |
168 |
+ |
else if (osver.dwMajorVersion == 5 && osver.dwMinorVersion == 1) |
169 |
+ |
strcpy (uts->sysname, "Windows XP"); /* XP */ |
170 |
+ |
else if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 0) |
171 |
+ |
strcpy (uts->sysname, "Windows Vista"); /* Vista */ |
172 |
+ |
os = WinNT; |
173 |
+ |
break; |
174 |
+ |
|
175 |
+ |
case VER_PLATFORM_WIN32_WINDOWS: /* Win95, Win98 or WinME */ |
176 |
+ |
if ((osver.dwMajorVersion > 4) || |
177 |
+ |
((osver.dwMajorVersion == 4) && (osver.dwMinorVersion > 0))) |
178 |
+ |
{ |
179 |
+ |
if (osver.dwMinorVersion >= 90) |
180 |
+ |
strcpy (uts->sysname, "Windows ME"); /* ME */ |
181 |
+ |
else |
182 |
+ |
strcpy (uts->sysname, "Windows 98"); /* 98 */ |
183 |
+ |
os = Win98; |
184 |
+ |
} |
185 |
+ |
else |
186 |
+ |
{ |
187 |
+ |
strcpy (uts->sysname, "Windows 95"); /* 95 */ |
188 |
+ |
os = Win95; |
189 |
+ |
} |
190 |
+ |
break; |
191 |
+ |
|
192 |
+ |
case VER_PLATFORM_WIN32s: /* Windows 3.x */ |
193 |
+ |
strcpy (uts->sysname, "Windows"); |
194 |
+ |
break; |
195 |
+ |
} |
196 |
+ |
|
197 |
+ |
sprintf(uts->version, "%ld.%02ld", |
198 |
+ |
osver.dwMajorVersion, osver.dwMinorVersion); |
199 |
+ |
|
200 |
+ |
if (osver.szCSDVersion[0] != '\0' && |
201 |
+ |
(strlen (osver.szCSDVersion) + strlen (uts->version) + 1) < |
202 |
+ |
sizeof (uts->version)) |
203 |
+ |
{ |
204 |
+ |
strcat (uts->version, " "); |
205 |
+ |
strcat (uts->version, osver.szCSDVersion); |
206 |
+ |
} |
207 |
+ |
|
208 |
+ |
sprintf (uts->release, "build %ld", osver.dwBuildNumber & 0xFFFF); |
209 |
+ |
|
210 |
+ |
switch (sysinfo.wProcessorArchitecture) |
211 |
+ |
{ |
212 |
+ |
case PROCESSOR_ARCHITECTURE_PPC: |
213 |
+ |
strcpy (uts->machine, "ppc"); |
214 |
+ |
break; |
215 |
+ |
case PROCESSOR_ARCHITECTURE_ALPHA: |
216 |
+ |
strcpy (uts->machine, "alpha"); |
217 |
+ |
break; |
218 |
+ |
case PROCESSOR_ARCHITECTURE_MIPS: |
219 |
+ |
strcpy (uts->machine, "mips"); |
220 |
+ |
break; |
221 |
+ |
case PROCESSOR_ARCHITECTURE_INTEL: |
222 |
+ |
/* |
223 |
+ |
* dwProcessorType is only valid in Win95 and Win98 and WinME |
224 |
+ |
* wProcessorLevel is only valid in WinNT |
225 |
+ |
*/ |
226 |
+ |
switch (os) |
227 |
+ |
{ |
228 |
+ |
case Win95: |
229 |
+ |
case Win98: |
230 |
+ |
switch (sysinfo.dwProcessorType) |
231 |
+ |
{ |
232 |
+ |
case PROCESSOR_INTEL_386: |
233 |
+ |
case PROCESSOR_INTEL_486: |
234 |
+ |
case PROCESSOR_INTEL_PENTIUM: |
235 |
+ |
sprintf(uts->machine, "i%ld", sysinfo.dwProcessorType); |
236 |
+ |
break; |
237 |
+ |
default: |
238 |
+ |
strcpy(uts->machine, "i386"); |
239 |
+ |
break; |
240 |
+ |
} |
241 |
+ |
break; |
242 |
+ |
case WinNT: |
243 |
+ |
switch(sysinfo.wProcessorArchitecture) |
244 |
+ |
{ |
245 |
+ |
case PROCESSOR_ARCHITECTURE_INTEL: |
246 |
+ |
sprintf (uts->machine, "x86(%d)", sysinfo.wProcessorLevel); |
247 |
+ |
break; |
248 |
+ |
case PROCESSOR_ARCHITECTURE_IA64: |
249 |
+ |
sprintf (uts->machine, "ia64(%d)", sysinfo.wProcessorLevel); |
250 |
+ |
break; |
251 |
+ |
#ifdef PROCESSOR_ARCHITECTURE_AMD64 |
252 |
+ |
case PROCESSOR_ARCHITECTURE_AMD64: |
253 |
+ |
sprintf (uts->machine, "x86_64(%d)", sysinfo.wProcessorLevel); |
254 |
+ |
break; |
255 |
+ |
#endif |
256 |
+ |
default: |
257 |
+ |
sprintf (uts->machine, "unknown(%d)", sysinfo.wProcessorLevel); |
258 |
+ |
break; |
259 |
+ |
} |
260 |
+ |
break; |
261 |
+ |
default: |
262 |
+ |
strcpy(uts->machine, "unknown"); |
263 |
+ |
} |
264 |
+ |
break; |
265 |
+ |
default: |
266 |
+ |
strcpy (uts->machine, "unknown"); |
267 |
+ |
break; |
268 |
+ |
} |
269 |
+ |
|
270 |
+ |
sLength = sizeof(uts->nodename) - 1; |
271 |
+ |
GetComputerName(uts->nodename, &sLength); |
272 |
+ |
return 0; |
273 |
+ |
} |
274 |
+ |
#endif |
275 |
+ |
|
276 |
+ |
char * |
277 |
+ |
libio_get_platform(char *str, size_t size) |
278 |
+ |
{ |
279 |
+ |
struct utsname uts; |
280 |
+ |
|
281 |
+ |
uname(&uts); |
282 |
+ |
snprintf(str, size, "%s %s %s %s %s", uts.sysname, uts.nodename, |
283 |
+ |
uts.release, uts.version, uts.machine); |
284 |
+ |
return str; |
285 |
+ |
} |
286 |
+ |
|
287 |
|
#ifdef HAVE_LIBCRYPTO |
288 |
|
char * |
289 |
|
ssl_get_cipher(SSL *ssl) |
350 |
|
SystemTime.tv_sec = newtime.tv_sec; |
351 |
|
SystemTime.tv_usec = newtime.tv_usec; |
352 |
|
} |
353 |
+ |
|
354 |
+ |
/* setup_corefile() |
355 |
+ |
* |
356 |
+ |
* inputs - nothing |
357 |
+ |
* output - nothing |
358 |
+ |
* side effects - setups corefile to system limits. |
359 |
+ |
* -kre |
360 |
+ |
*/ |
361 |
+ |
void |
362 |
+ |
setup_corefile(void) |
363 |
+ |
{ |
364 |
+ |
#ifdef HAVE_SYS_RESOURCE_H |
365 |
+ |
struct rlimit rlim; /* resource limits */ |
366 |
+ |
|
367 |
+ |
/* Set corefilesize to maximum */ |
368 |
+ |
if (!getrlimit(RLIMIT_CORE, &rlim)) |
369 |
+ |
{ |
370 |
+ |
rlim.rlim_cur = rlim.rlim_max; |
371 |
+ |
setrlimit(RLIMIT_CORE, &rlim); |
372 |
+ |
} |
373 |
+ |
#endif |
374 |
+ |
} |
375 |
+ |
|
376 |
+ |
void |
377 |
+ |
libio_init(int daemonn) |
378 |
+ |
{ |
379 |
+ |
#ifndef _WIN32 |
380 |
+ |
if (daemonn) |
381 |
+ |
close_standard_fds(); |
382 |
+ |
#endif |
383 |
+ |
|
384 |
+ |
set_time(); |
385 |
+ |
|
386 |
+ |
// It ain't random, but it ought to be a little harder to guess |
387 |
+ |
srand(SystemTime.tv_sec ^ (SystemTime.tv_usec | (getpid() << 20))); |
388 |
+ |
|
389 |
+ |
eventInit(); |
390 |
+ |
fdlist_init(); |
391 |
+ |
init_comm(); |
392 |
+ |
#ifndef NOBALLOC |
393 |
+ |
initBlockHeap(); |
394 |
+ |
#endif |
395 |
+ |
init_dlink_nodes(); |
396 |
+ |
dbuf_init(); |
397 |
+ |
#ifndef _WIN32 |
398 |
+ |
init_resolver(); |
399 |
+ |
#endif |
400 |
+ |
} |