Annotation of embedaddon/axTLS/ssl/os_port.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (c) 2007, Cameron Rich
3: *
4: * All rights reserved.
5: *
6: * Redistribution and use in source and binary forms, with or without
7: * modification, are permitted provided that the following conditions are met:
8: *
9: * * Redistributions of source code must retain the above copyright notice,
10: * this list of conditions and the following disclaimer.
11: * * Redistributions in binary form must reproduce the above copyright notice,
12: * this list of conditions and the following disclaimer in the documentation
13: * and/or other materials provided with the distribution.
14: * * Neither the name of the axTLS project nor the names of its contributors
15: * may be used to endorse or promote products derived from this software
16: * without specific prior written permission.
17: *
18: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29: */
30:
31: /**
32: * @file os_port.c
33: *
34: * OS specific functions.
35: */
36: #include <time.h>
37: #include <stdlib.h>
38: #include <errno.h>
39: #include <stdarg.h>
40: #include "os_port.h"
41:
42: #ifdef WIN32
43: /**
44: * gettimeofday() not in Win32
45: */
46: EXP_FUNC void STDCALL gettimeofday(struct timeval* t, void* timezone)
47: {
48: #if defined(_WIN32_WCE)
49: t->tv_sec = time(NULL);
50: t->tv_usec = 0; /* 1sec precision only */
51: #else
52: struct _timeb timebuffer;
53: _ftime(&timebuffer);
54: t->tv_sec = (long)timebuffer.time;
55: t->tv_usec = 1000 * timebuffer.millitm; /* 1ms precision */
56: #endif
57: }
58:
59: /**
60: * strcasecmp() not in Win32
61: */
62: EXP_FUNC int STDCALL strcasecmp(const char *s1, const char *s2)
63: {
64: while (tolower(*s1) == tolower(*s2++))
65: {
66: if (*s1++ == '\0')
67: {
68: return 0;
69: }
70: }
71:
72: return *(unsigned char *)s1 - *(unsigned char *)(s2 - 1);
73: }
74:
75:
76: EXP_FUNC int STDCALL getdomainname(char *buf, int buf_size)
77: {
78: HKEY hKey;
79: unsigned long datatype;
80: unsigned long bufferlength = buf_size;
81:
82: if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
83: TEXT("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"),
84: 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
85: return -1;
86:
87: RegQueryValueEx(hKey, "Domain", NULL, &datatype, buf, &bufferlength);
88: RegCloseKey(hKey);
89: return 0;
90: }
91: #endif
92:
93: #undef malloc
94: #undef realloc
95: #undef calloc
96:
97: static const char * out_of_mem_str = "out of memory";
98: static const char * file_open_str = "Could not open file \"%s\"";
99:
100: /*
101: * Some functions that call display some error trace and then call abort().
102: * This just makes life much easier on embedded systems, since we're
103: * suffering major trauma...
104: */
105: EXP_FUNC void * STDCALL ax_malloc(size_t s)
106: {
107: void *x;
108:
109: if ((x = malloc(s)) == NULL)
110: exit_now(out_of_mem_str);
111:
112: return x;
113: }
114:
115: EXP_FUNC void * STDCALL ax_realloc(void *y, size_t s)
116: {
117: void *x;
118:
119: if ((x = realloc(y, s)) == NULL)
120: exit_now(out_of_mem_str);
121:
122: return x;
123: }
124:
125: EXP_FUNC void * STDCALL ax_calloc(size_t n, size_t s)
126: {
127: void *x;
128:
129: if ((x = calloc(n, s)) == NULL)
130: exit_now(out_of_mem_str);
131:
132: return x;
133: }
134:
135: EXP_FUNC int STDCALL ax_open(const char *pathname, int flags)
136: {
137: int x;
138:
139: if ((x = open(pathname, flags)) < 0)
140: exit_now(file_open_str, pathname);
141:
142: return x;
143: }
144:
145: /**
146: * This is a call which will deliberately exit an application, but will
147: * display some information before dying.
148: */
149: void exit_now(const char *format, ...)
150: {
151: va_list argp;
152:
153: va_start(argp, format);
154: vfprintf(stderr, format, argp);
155: va_end(argp);
156: abort();
157: }
158:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>