$search
00001 /* 00002 * OS specific functions 00003 * Copyright (c) 2005-2009, Jouni Malinen <j@w1.fi> 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License version 2 as 00007 * published by the Free Software Foundation. 00008 * 00009 * Alternatively, this software may be distributed under the terms of BSD 00010 * license. 00011 * 00012 * See README and COPYING for more details. 00013 */ 00014 00015 #ifndef OS_H 00016 #define OS_H 00017 00018 typedef long os_time_t; 00019 00025 void os_sleep(os_time_t sec, os_time_t usec); 00026 00027 struct os_time { 00028 os_time_t sec; 00029 os_time_t usec; 00030 }; 00031 00037 int os_get_time(struct os_time *t); 00038 00039 00040 /* Helper macros for handling struct os_time */ 00041 00042 #define os_time_before(a, b) \ 00043 ((a)->sec < (b)->sec || \ 00044 ((a)->sec == (b)->sec && (a)->usec < (b)->usec)) 00045 00046 #define os_time_sub(a, b, res) do { \ 00047 (res)->sec = (a)->sec - (b)->sec; \ 00048 (res)->usec = (a)->usec - (b)->usec; \ 00049 if ((res)->usec < 0) { \ 00050 (res)->sec--; \ 00051 (res)->usec += 1000000; \ 00052 } \ 00053 } while (0) 00054 00070 int os_mktime(int year, int month, int day, int hour, int min, int sec, 00071 os_time_t *t); 00072 00073 00079 int os_daemonize(const char *pid_file); 00080 00085 void os_daemonize_terminate(const char *pid_file); 00086 00093 int os_get_random(unsigned char *buf, size_t len); 00094 00099 unsigned long os_random(void); 00100 00114 char * os_rel2abs_path(const char *rel_path); 00115 00124 int os_program_init(void); 00125 00134 void os_program_deinit(void); 00135 00146 int os_setenv(const char *name, const char *value, int overwrite); 00147 00156 int os_unsetenv(const char *name); 00157 00168 char * os_readfile(const char *name, size_t *len); 00169 00177 void * os_zalloc(size_t size); 00178 00179 00180 /* 00181 * The following functions are wrapper for standard ANSI C or POSIX functions. 00182 * By default, they are just defined to use the standard function name and no 00183 * os_*.c implementation is needed for them. This avoids extra function calls 00184 * by allowing the C pre-processor take care of the function name mapping. 00185 * 00186 * If the target system uses a C library that does not provide these functions, 00187 * build_config.h can be used to define the wrappers to use a different 00188 * function name. This can be done on function-by-function basis since the 00189 * defines here are only used if build_config.h does not define the os_* name. 00190 * If needed, os_*.c file can be used to implement the functions that are not 00191 * included in the C library on the target system. Alternatively, 00192 * OS_NO_C_LIB_DEFINES can be defined to skip all defines here in which case 00193 * these functions need to be implemented in os_*.c file for the target system. 00194 */ 00195 00196 #ifdef OS_NO_C_LIB_DEFINES 00197 00205 void * os_malloc(size_t size); 00206 00217 void * os_realloc(void *ptr, size_t size); 00218 00223 void os_free(void *ptr); 00224 00235 void * os_memcpy(void *dest, const void *src, size_t n); 00236 00246 void * os_memmove(void *dest, const void *src, size_t n); 00247 00255 void * os_memset(void *s, int c, size_t n); 00256 00266 int os_memcmp(const void *s1, const void *s2, size_t n); 00267 00275 char * os_strdup(const char *s); 00276 00282 size_t os_strlen(const char *s); 00283 00291 int os_strcasecmp(const char *s1, const char *s2); 00292 00302 int os_strncasecmp(const char *s1, const char *s2, size_t n); 00303 00310 char * os_strchr(const char *s, int c); 00311 00318 char * os_strrchr(const char *s, int c); 00319 00327 int os_strcmp(const char *s1, const char *s2); 00328 00338 int os_strncmp(const char *s1, const char *s2, size_t n); 00339 00347 char * os_strncpy(char *dest, const char *src, size_t n); 00348 00355 char * os_strstr(const char *haystack, const char *needle); 00356 00378 int os_snprintf(char *str, size_t size, const char *format, ...); 00379 00380 #else /* OS_NO_C_LIB_DEFINES */ 00381 00382 #ifdef WPA_TRACE 00383 void * os_malloc(size_t size); 00384 void * os_realloc(void *ptr, size_t size); 00385 void os_free(void *ptr); 00386 char * os_strdup(const char *s); 00387 #else /* WPA_TRACE */ 00388 #ifndef os_malloc 00389 #define os_malloc(s) malloc((s)) 00390 #endif 00391 #ifndef os_realloc 00392 #define os_realloc(p, s) realloc((p), (s)) 00393 #endif 00394 #ifndef os_free 00395 #define os_free(p) free((p)) 00396 #endif 00397 #ifndef os_strdup 00398 #ifdef _MSC_VER 00399 #define os_strdup(s) _strdup(s) 00400 #else 00401 #define os_strdup(s) strdup(s) 00402 #endif 00403 #endif 00404 #endif /* WPA_TRACE */ 00405 00406 #ifndef os_memcpy 00407 #define os_memcpy(d, s, n) memcpy((d), (s), (n)) 00408 #endif 00409 #ifndef os_memmove 00410 #define os_memmove(d, s, n) memmove((d), (s), (n)) 00411 #endif 00412 #ifndef os_memset 00413 #define os_memset(s, c, n) memset(s, c, n) 00414 #endif 00415 #ifndef os_memcmp 00416 #define os_memcmp(s1, s2, n) memcmp((s1), (s2), (n)) 00417 #endif 00418 00419 #ifndef os_strlen 00420 #define os_strlen(s) strlen(s) 00421 #endif 00422 #ifndef os_strcasecmp 00423 #ifdef _MSC_VER 00424 #define os_strcasecmp(s1, s2) _stricmp((s1), (s2)) 00425 #else 00426 #define os_strcasecmp(s1, s2) strcasecmp((s1), (s2)) 00427 #endif 00428 #endif 00429 #ifndef os_strncasecmp 00430 #ifdef _MSC_VER 00431 #define os_strncasecmp(s1, s2, n) _strnicmp((s1), (s2), (n)) 00432 #else 00433 #define os_strncasecmp(s1, s2, n) strncasecmp((s1), (s2), (n)) 00434 #endif 00435 #endif 00436 #ifndef os_strchr 00437 #define os_strchr(s, c) strchr((s), (c)) 00438 #endif 00439 #ifndef os_strcmp 00440 #define os_strcmp(s1, s2) strcmp((s1), (s2)) 00441 #endif 00442 #ifndef os_strncmp 00443 #define os_strncmp(s1, s2, n) strncmp((s1), (s2), (n)) 00444 #endif 00445 #ifndef os_strncpy 00446 #define os_strncpy(d, s, n) strncpy((d), (s), (n)) 00447 #endif 00448 #ifndef os_strrchr 00449 #define os_strrchr(s, c) strrchr((s), (c)) 00450 #endif 00451 #ifndef os_strstr 00452 #define os_strstr(h, n) strstr((h), (n)) 00453 #endif 00454 00455 #ifndef os_snprintf 00456 #ifdef _MSC_VER 00457 #define os_snprintf _snprintf 00458 #else 00459 #define os_snprintf snprintf 00460 #endif 00461 #endif 00462 00463 #endif /* OS_NO_C_LIB_DEFINES */ 00464 00465 00476 size_t os_strlcpy(char *dest, const char *src, size_t siz); 00477 00478 00479 #ifdef OS_REJECT_C_LIB_FUNCTIONS 00480 #define malloc OS_DO_NOT_USE_malloc 00481 #define realloc OS_DO_NOT_USE_realloc 00482 #define free OS_DO_NOT_USE_free 00483 #define memcpy OS_DO_NOT_USE_memcpy 00484 #define memmove OS_DO_NOT_USE_memmove 00485 #define memset OS_DO_NOT_USE_memset 00486 #define memcmp OS_DO_NOT_USE_memcmp 00487 #undef strdup 00488 #define strdup OS_DO_NOT_USE_strdup 00489 #define strlen OS_DO_NOT_USE_strlen 00490 #define strcasecmp OS_DO_NOT_USE_strcasecmp 00491 #define strncasecmp OS_DO_NOT_USE_strncasecmp 00492 #undef strchr 00493 #define strchr OS_DO_NOT_USE_strchr 00494 #undef strcmp 00495 #define strcmp OS_DO_NOT_USE_strcmp 00496 #undef strncmp 00497 #define strncmp OS_DO_NOT_USE_strncmp 00498 #undef strncpy 00499 #define strncpy OS_DO_NOT_USE_strncpy 00500 #define strrchr OS_DO_NOT_USE_strrchr 00501 #define strstr OS_DO_NOT_USE_strstr 00502 #undef snprintf 00503 #define snprintf OS_DO_NOT_USE_snprintf 00504 00505 #define strcpy OS_DO_NOT_USE_strcpy 00506 #endif /* OS_REJECT_C_LIB_FUNCTIONS */ 00507 00508 #endif /* OS_H */