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