2
* wpa_supplicant/hostapd / OS specific functions for UNIX/POSIX systems
3
* Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi>
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 2 as
7
* published by the Free Software Foundation.
9
* Alternatively, this software may be distributed under the terms of BSD
12
* See README and COPYING for more details.
19
void os_sleep(os_time_t sec, os_time_t usec)
28
int os_get_time(struct os_time *t)
32
res = gettimeofday(&tv, NULL);
39
int os_mktime(int year, int month, int day, int hour, int min, int sec,
44
if (year < 1970 || month < 1 || month > 12 || day < 1 || day > 31 ||
45
hour < 0 || hour > 23 || min < 0 || min > 59 || sec < 0 ||
49
memset(&tm, 0, sizeof(tm));
50
tm.tm_year = year - 1900;
51
tm.tm_mon = month - 1;
57
*t = (os_time_t) mktime(&tm);
62
int os_daemonize(const char *pid_file)
73
FILE *f = fopen(pid_file, "w");
75
fprintf(f, "%u\n", getpid());
81
#endif /* __uclinux */
85
void os_daemonize_terminate(const char *pid_file)
92
int os_get_random(unsigned char *buf, size_t len)
97
f = fopen("/dev/urandom", "rb");
99
printf("Could not open /dev/urandom.\n");
103
rc = fread(buf, 1, len, f);
106
return rc != len ? -1 : 0;
110
unsigned long os_random(void)
116
char * os_rel2abs_path(const char *rel_path)
118
char *buf = NULL, *cwd, *ret;
119
size_t len = 128, cwd_len, rel_len, ret_len;
122
if (rel_path[0] == '/')
123
return strdup(rel_path);
129
cwd = getcwd(buf, len);
133
if (last_errno != ERANGE)
144
cwd_len = strlen(cwd);
145
rel_len = strlen(rel_path);
146
ret_len = cwd_len + 1 + rel_len + 1;
147
ret = malloc(ret_len);
149
memcpy(ret, cwd, cwd_len);
151
memcpy(ret + cwd_len + 1, rel_path, rel_len);
152
ret[ret_len - 1] = '\0';
159
int os_program_init(void)
165
void os_program_deinit(void)
170
int os_setenv(const char *name, const char *value, int overwrite)
172
return setenv(name, value, overwrite);
176
int os_unsetenv(const char *name)
178
#if defined(__FreeBSD__) || defined(__NetBSD__)
182
return unsetenv(name);
187
char * os_readfile(const char *name, size_t *len)
192
f = fopen(name, "rb");
196
fseek(f, 0, SEEK_END);
198
fseek(f, 0, SEEK_SET);
206
fread(buf, 1, *len, f);
213
void * os_zalloc(size_t size)
215
return calloc(1, size);
219
size_t os_strlcpy(char *dest, const char *src, size_t siz)
225
/* Copy string up to the maximum size of the dest buffer */
226
while (--left != 0) {
227
if ((*dest++ = *s++) == '\0')
233
/* Not enough room for the string; force NUL-termination */
237
; /* determine total src string length */