1845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/* 2845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * wpa_supplicant/hostapd / OS specific functions 3845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi> 4845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 5845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * This program is free software; you can redistribute it and/or modify 6845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * it under the terms of the GNU General Public License version 2 as 7845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * published by the Free Software Foundation. 8845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 9845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Alternatively, this software may be distributed under the terms of BSD 10845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * license. 11845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 12845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * See README and COPYING for more details. 13845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 14845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 15845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef OS_H 16845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define OS_H 17845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 18845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projecttypedef long os_time_t; 19845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 20845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 21845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_sleep - Sleep (sec, usec) 22845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @sec: Number of seconds to sleep 23845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @usec: Number of microseconds to sleep 24845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 25845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid os_sleep(os_time_t sec, os_time_t usec); 26845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 27845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectstruct os_time { 28845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project os_time_t sec; 29845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project os_time_t usec; 30845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project}; 31845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 32845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 33845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_get_time - Get current time (sec, usec) 34845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @t: Pointer to buffer for the time 35845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: 0 on success, -1 on failure 36845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 37845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_get_time(struct os_time *t); 38845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 39845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 40845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/* Helper macros for handling struct os_time */ 41845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 42845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_time_before(a, b) \ 43845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project ((a)->sec < (b)->sec || \ 44845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project ((a)->sec == (b)->sec && (a)->usec < (b)->usec)) 45845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 46845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_time_sub(a, b, res) do { \ 47845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project (res)->sec = (a)->sec - (b)->sec; \ 48845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project (res)->usec = (a)->usec - (b)->usec; \ 49845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project if ((res)->usec < 0) { \ 50845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project (res)->sec--; \ 51845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project (res)->usec += 1000000; \ 52845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project } \ 53845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project} while (0) 54845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 55845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 56845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_mktime - Convert broken-down time into seconds since 1970-01-01 57845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @year: Four digit year 58845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @month: Month (1 .. 12) 59845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @day: Day of month (1 .. 31) 60845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @hour: Hour (0 .. 23) 61845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @min: Minute (0 .. 59) 62845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @sec: Second (0 .. 60) 63845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @t: Buffer for returning calendar time representation (seconds since 64845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 1970-01-01 00:00:00) 65845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: 0 on success, -1 on failure 66845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 67845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Note: The result is in seconds from Epoch, i.e., in UTC, not in local time 68845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * which is used by POSIX mktime(). 69845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 70845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_mktime(int year, int month, int day, int hour, int min, int sec, 71845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project os_time_t *t); 72845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 73845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 74845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 75845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_daemonize - Run in the background (detach from the controlling terminal) 76845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @pid_file: File name to write the process ID to or %NULL to skip this 77845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: 0 on success, -1 on failure 78845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 79845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_daemonize(const char *pid_file); 80845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 81845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 82845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_daemonize_terminate - Stop running in the background (remove pid file) 83845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @pid_file: File name to write the process ID to or %NULL to skip this 84845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 85845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid os_daemonize_terminate(const char *pid_file); 86845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 87845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 88845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_get_random - Get cryptographically strong pseudo random data 89845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @buf: Buffer for pseudo random data 90845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @len: Length of the buffer 91845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: 0 on success, -1 on failure 92845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 93845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_get_random(unsigned char *buf, size_t len); 94845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 95845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 96845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_random - Get pseudo random value (not necessarily very strong) 97845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Pseudo random value 98845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 99845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectunsigned long os_random(void); 100845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 101845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 102845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_rel2abs_path - Get an absolute path for a file 103845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @rel_path: Relative path to a file 104845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Absolute path for the file or %NULL on failure 105845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 106845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * This function tries to convert a relative path of a file to an absolute path 107845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * in order for the file to be found even if current working directory has 108845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * changed. The returned value is allocated and caller is responsible for 109845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * freeing it. It is acceptable to just return the same path in an allocated 110845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * buffer, e.g., return strdup(rel_path). This function is only used to find 111845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * configuration files when os_daemonize() may have changed the current working 112845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * directory and relative path would be pointing to a different location. 113845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 114845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectchar * os_rel2abs_path(const char *rel_path); 115845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 116845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 117845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_program_init - Program initialization (called at start) 118845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: 0 on success, -1 on failure 119845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 120845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * This function is called when a programs starts. If there are any OS specific 121845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * processing that is needed, it can be placed here. It is also acceptable to 122845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * just return 0 if not special processing is needed. 123845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 124845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_program_init(void); 125845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 126845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 127845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_program_deinit - Program deinitialization (called just before exit) 128845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 129845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * This function is called just before a program exists. If there are any OS 130845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * specific processing, e.g., freeing resourced allocated in os_program_init(), 131845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * it should be done here. It is also acceptable for this function to do 132845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * nothing. 133845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 134845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid os_program_deinit(void); 135845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 136845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 137845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_setenv - Set environment variable 138845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @name: Name of the variable 139845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @value: Value to set to the variable 140845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @overwrite: Whether existing variable should be overwritten 141845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: 0 on success, -1 on error 142845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 143845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * This function is only used for wpa_cli action scripts. OS wrapper does not 144845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * need to implement this if such functionality is not needed. 145845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 146845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_setenv(const char *name, const char *value, int overwrite); 147845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 148845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 149845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_unsetenv - Delete environent variable 150845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @name: Name of the variable 151845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: 0 on success, -1 on error 152845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 153845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * This function is only used for wpa_cli action scripts. OS wrapper does not 154845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * need to implement this if such functionality is not needed. 155845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 156845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_unsetenv(const char *name); 157845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 158845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 159845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_readfile - Read a file to an allocated memory buffer 160845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @name: Name of the file to read 161845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @len: For returning the length of the allocated buffer 162845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Pointer to the allocated buffer or %NULL on failure 163845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 164845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * This function allocates memory and reads the given file to this buffer. Both 165845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * binary and text files can be read with this function. The caller is 166845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * responsible for freeing the returned buffer with os_free(). 167845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 168845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectchar * os_readfile(const char *name, size_t *len); 169845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 170845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 171845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_zalloc - Allocate and zero memory 172845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @size: Number of bytes to allocate 173845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Pointer to allocated and zeroed memory or %NULL on failure 174845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 175845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Caller is responsible for freeing the returned buffer with os_free(). 176845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 177845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid * os_zalloc(size_t size); 178845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 179845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 180845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/* 181845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * The following functions are wrapper for standard ANSI C or POSIX functions. 182845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * By default, they are just defined to use the standard function name and no 183845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_*.c implementation is needed for them. This avoids extra function calls 184845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * by allowing the C pre-processor take care of the function name mapping. 185845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 186845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * If the target system uses a C library that does not provide these functions, 187845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * build_config.h can be used to define the wrappers to use a different 188845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * function name. This can be done on function-by-function basis since the 189845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * defines here are only used if build_config.h does not define the os_* name. 190845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * If needed, os_*.c file can be used to implement the functions that are not 191845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * included in the C library on the target system. Alternatively, 192845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * OS_NO_C_LIB_DEFINES can be defined to skip all defines here in which case 193845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * these functions need to be implemented in os_*.c file for the target system. 194845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 195845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 196845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifdef OS_NO_C_LIB_DEFINES 197845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 198845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 199845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_malloc - Allocate dynamic memory 200845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @size: Size of the buffer to allocate 201845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Allocated buffer or %NULL on failure 202845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 203845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Caller is responsible for freeing the returned buffer with os_free(). 204845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 205845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid * os_malloc(size_t size); 206845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 207845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 208845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_realloc - Re-allocate dynamic memory 209845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @ptr: Old buffer from os_malloc() or os_realloc() 210845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @size: Size of the new buffer 211845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Allocated buffer or %NULL on failure 212845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 213845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Caller is responsible for freeing the returned buffer with os_free(). 214845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * If re-allocation fails, %NULL is returned and the original buffer (ptr) is 215845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * not freed and caller is still responsible for freeing it. 216845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 217845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid * os_realloc(void *ptr, size_t size); 218845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 219845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 220845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_free - Free dynamic memory 221845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @ptr: Old buffer from os_malloc() or os_realloc(); can be %NULL 222845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 223845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid os_free(void *ptr); 224845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 225845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 226845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_memcpy - Copy memory area 227845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @dest: Destination 228845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @src: Source 229845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @n: Number of bytes to copy 230845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: dest 231845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 232845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * The memory areas src and dst must not overlap. os_memmove() can be used with 233845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * overlapping memory. 234845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 235845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid * os_memcpy(void *dest, const void *src, size_t n); 236845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 237845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 238845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_memmove - Copy memory area 239845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @dest: Destination 240845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @src: Source 241845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @n: Number of bytes to copy 242845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: dest 243845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 244845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * The memory areas src and dst may overlap. 245845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 246845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid * os_memmove(void *dest, const void *src, size_t n); 247845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 248845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 249845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_memset - Fill memory with a constant byte 250845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s: Memory area to be filled 251845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @c: Constant byte 252845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @n: Number of bytes started from s to fill with c 253845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: s 254845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 255845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectvoid * os_memset(void *s, int c, size_t n); 256845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 257845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 258845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_memcmp - Compare memory areas 259845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s1: First buffer 260845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s2: Second buffer 261845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @n: Maximum numbers of octets to compare 262845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: An integer less than, equal to, or greater than zero if s1 is 263845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * found to be less than, to match, or be greater than s2. Only first n 264845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * characters will be compared. 265845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 266845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_memcmp(const void *s1, const void *s2, size_t n); 267845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 268845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 269845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strdup - Duplicate a string 270845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s: Source string 271845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Allocated buffer with the string copied into it or %NULL on failure 272845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 273845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Caller is responsible for freeing the returned buffer with os_free(). 274845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 275845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectchar * os_strdup(const char *s); 276845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 277845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 278845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strlen - Calculate the length of a string 279845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s: '\0' terminated string 280845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Number of characters in s (not counting the '\0' terminator) 281845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 282845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectsize_t os_strlen(const char *s); 283845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 284845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 285845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strcasecmp - Compare two strings ignoring case 286845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s1: First string 287845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s2: Second string 288845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: An integer less than, equal to, or greater than zero if s1 is 289845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * found to be less than, to match, or be greatred than s2 290845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 291845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_strcasecmp(const char *s1, const char *s2); 292845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 293845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 294845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strncasecmp - Compare two strings ignoring case 295845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s1: First string 296845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s2: Second string 297845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @n: Maximum numbers of characters to compare 298845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: An integer less than, equal to, or greater than zero if s1 is 299845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * found to be less than, to match, or be greater than s2. Only first n 300845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * characters will be compared. 301845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 302845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_strncasecmp(const char *s1, const char *s2, size_t n); 303845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 304845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 305845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strchr - Locate the first occurrence of a character in string 306845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s: String 307845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @c: Character to search for 308845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Pointer to the matched character or %NULL if not found 309845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 310845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectchar * os_strchr(const char *s, int c); 311845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 312845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 313845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strrchr - Locate the last occurrence of a character in string 314845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s: String 315845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @c: Character to search for 316845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Pointer to the matched character or %NULL if not found 317845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 318845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectchar * os_strrchr(const char *s, int c); 319845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 320845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 321845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strcmp - Compare two strings 322845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s1: First string 323845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s2: Second string 324845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: An integer less than, equal to, or greater than zero if s1 is 325845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * found to be less than, to match, or be greatred than s2 326845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 327845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_strcmp(const char *s1, const char *s2); 328845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 329845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 330845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strncmp - Compare two strings 331845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s1: First string 332845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @s2: Second string 333845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @n: Maximum numbers of characters to compare 334845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: An integer less than, equal to, or greater than zero if s1 is 335845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * found to be less than, to match, or be greater than s2. Only first n 336845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * characters will be compared. 337845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 338845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_strncmp(const char *s1, const char *s2, size_t n); 339845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 340845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 341845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strncpy - Copy a string 342845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @dest: Destination 343845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @src: Source 344845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @n: Maximum number of characters to copy 345845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: dest 346845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 347845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectchar * os_strncpy(char *dest, const char *src, size_t n); 348845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 349845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 350845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_strstr - Locate a substring 351845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @haystack: String (haystack) to search from 352845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @needle: Needle to search from haystack 353845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Pointer to the beginning of the substring or %NULL if not found 354845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 355845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectchar * os_strstr(const char *haystack, const char *needle); 356845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 357845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project/** 358845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_snprintf - Print to a memory buffer 359845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @str: Memory buffer to print into 360845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @size: Maximum length of the str buffer 361845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * @format: printf format 362845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Returns: Number of characters printed (not including trailing '\0'). 363845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 364845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * If the output buffer is truncated, number of characters which would have 365845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * been written is returned. Since some C libraries return -1 in such a case, 366845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * the caller must be prepared on that value, too, to indicate truncation. 367845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 368845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * Note: Some C library implementations of snprintf() may not guarantee null 369845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * termination in case the output is truncated. The OS wrapper function of 370845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * os_snprintf() should provide this guarantee, i.e., to null terminate the 371845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * output buffer if a C library version of the function is used and if that 372845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * function does not guarantee null termination. 373845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * 374845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * If the target system does not include snprintf(), see, e.g., 375845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * http://www.ijs.si/software/snprintf/ for an example of a portable 376845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project * implementation of snprintf. 377845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project */ 378845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Projectint os_snprintf(char *str, size_t size, const char *format, ...); 379845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 380845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#else /* OS_NO_C_LIB_DEFINES */ 381845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 382845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_malloc 383845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_malloc(s) malloc((s)) 384845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 385845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_realloc 386845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_realloc(p, s) realloc((p), (s)) 387845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 388845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_free 389845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_free(p) free((p)) 390845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 391845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 392845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_memcpy 393845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_memcpy(d, s, n) memcpy((d), (s), (n)) 394845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 395845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_memmove 396845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_memmove(d, s, n) memmove((d), (s), (n)) 397845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 398845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_memset 399845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_memset(s, c, n) memset(s, c, n) 400845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 401845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_memcmp 402845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_memcmp(s1, s2, n) memcmp((s1), (s2), (n)) 403845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 404845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 405845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strdup 406845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifdef _MSC_VER 407845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strdup(s) _strdup(s) 408845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#else 409845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strdup(s) strdup(s) 410845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 411845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 412845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strlen 413845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strlen(s) strlen(s) 414845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 415845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strcasecmp 416845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifdef _MSC_VER 417845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strcasecmp(s1, s2) _stricmp((s1), (s2)) 418845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#else 419845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strcasecmp(s1, s2) strcasecmp((s1), (s2)) 420845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 421845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 422845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strncasecmp 423845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifdef _MSC_VER 424845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strncasecmp(s1, s2, n) _strnicmp((s1), (s2), (n)) 425845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#else 426845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strncasecmp(s1, s2, n) strncasecmp((s1), (s2), (n)) 427845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 428845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 429845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strchr 430845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strchr(s, c) strchr((s), (c)) 431845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 432845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strcmp 433845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strcmp(s1, s2) strcmp((s1), (s2)) 434845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 435845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strncmp 436845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strncmp(s1, s2, n) strncmp((s1), (s2), (n)) 437845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 438845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strncpy 439845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strncpy(d, s, n) strncpy((d), (s), (n)) 440845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 441845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strrchr 442845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strrchr(s, c) strrchr((s), (c)) 443845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 444845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_strstr 445845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_strstr(h, n) strstr((h), (n)) 446845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 447845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 448845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifndef os_snprintf 449845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifdef _MSC_VER 450845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_snprintf _snprintf 451845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#else 452845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define os_snprintf snprintf 453845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 454845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif 455845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 456845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif /* OS_NO_C_LIB_DEFINES */ 457845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 458845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 459845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#ifdef OS_REJECT_C_LIB_FUNCTIONS 460845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define malloc OS_DO_NOT_USE_malloc 461845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define realloc OS_DO_NOT_USE_realloc 462845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define free OS_DO_NOT_USE_free 463845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define memcpy OS_DO_NOT_USE_memcpy 464845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define memmove OS_DO_NOT_USE_memmove 465845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define memset OS_DO_NOT_USE_memset 466845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define memcmp OS_DO_NOT_USE_memcmp 467845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#undef strdup 468845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strdup OS_DO_NOT_USE_strdup 469845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strlen OS_DO_NOT_USE_strlen 470845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strcasecmp OS_DO_NOT_USE_strcasecmp 471845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strncasecmp OS_DO_NOT_USE_strncasecmp 472845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#undef strchr 473845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strchr OS_DO_NOT_USE_strchr 474845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#undef strcmp 475845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strcmp OS_DO_NOT_USE_strcmp 476845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#undef strncmp 477845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strncmp OS_DO_NOT_USE_strncmp 478845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#undef strncpy 479845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strncpy OS_DO_NOT_USE_strncpy 480845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strrchr OS_DO_NOT_USE_strrchr 481845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strstr OS_DO_NOT_USE_strstr 482845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#undef snprintf 483845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define snprintf OS_DO_NOT_USE_snprintf 484845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 485845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#define strcpy OS_DO_NOT_USE_strcpy 486845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif /* OS_REJECT_C_LIB_FUNCTIONS */ 487845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project 488845e0124d42b67ef926fbae32a7f61d2e5109ebdThe Android Open Source Project#endif /* OS_H */ 489