ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/libio/misc/misc.c
(Generate patch)

Comparing ircd-hybrid/libio/misc/misc.c (file contents):
Revision 69 by adx, Tue Oct 4 16:09:51 2005 UTC vs.
Revision 868 by adx, Mon Sep 3 15:35:30 2007 UTC

# Line 22 | Line 22
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[] =
# Line 84 | Line 89 | const char *
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;
# Line 121 | Line 133 | small_file_date(time_t lclock)
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)
# Line 187 | Line 350 | set_time(void)
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 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines