~ubuntu-branches/ubuntu/vivid/wpasupplicant/vivid

« back to all changes in this revision

Viewing changes to os.h

  • Committer: Bazaar Package Importer
  • Author(s): Kel Modderman
  • Date: 2008-03-12 20:03:04 UTC
  • mfrom: (1.1.10 upstream)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20080312200304-4331y9wj46pdd34z
Tags: 0.6.3-1
* New upstream release.
* Drop patches applied upstream:
  - debian/patches/30_wpa_gui_qt4_eventhistoryui_rework.patch
  - debian/patches/31_wpa_gui_qt4_eventhistory_always_scrollbar.patch
  - debian/patches/32_wpa_gui_qt4_eventhistory_scroll_with_events.patch
  - debian/patches/40_dbus_ssid_data.patch
* Tidy up the clean target of debian/rules. Now that the madwifi headers are
  handled differently we no longer need to do any cleanup.
* Fix formatting error in debian/ifupdown/wpa_action.8 to make lintian
  quieter.
* Add patch to fix formatting errors in manpages build from sgml source. Use
  <emphasis> tags to hightlight keywords instead of surrounding them in
  strong quotes.
  - debian/patches/41_manpage_format_fixes.patch
* wpasupplicant binary package no longer suggests pcscd, guessnet, iproute
  or wireless-tools, nor does it recommend dhcp3-client. These are not
  needed.
* Add debian/patches/10_silence_siocsiwauth_icotl_failure.patch to disable
  ioctl failure messages that occur under normal conditions.
* Cherry pick two upstream git commits concerning the dbus interface:
  - debian/patches/11_avoid_dbus_version_namespace.patch
  - debian/patches/12_fix_potential_use_after_free.patch
* Add debian/patches/42_manpage_explain_available_drivers.patch to explain
  that not all of the driver backends are available in the provided
  wpa_supplicant binary, and that the canonical list of supported driver
  backends can be retrieved from the wpa_supplicant -h (help) output.
  (Closes: #466910)
* Add debian/patches/20_wpa_gui_qt4_disable_link_prl.patch to remove
  link_prl CONFIG compile flag added by qmake-qt4 >= 4.3.4-2 to avoid excess
  linking.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * wpa_supplicant/hostapd / OS specific functions
3
 
 * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi>
4
 
 *
5
 
 * This program is free software; you can redistribute it and/or modify
6
 
 * it under the terms of the GNU General Public License version 2 as
7
 
 * published by the Free Software Foundation.
8
 
 *
9
 
 * Alternatively, this software may be distributed under the terms of BSD
10
 
 * license.
11
 
 *
12
 
 * See README and COPYING for more details.
13
 
 */
14
 
 
15
 
#ifndef OS_H
16
 
#define OS_H
17
 
 
18
 
typedef long os_time_t;
19
 
 
20
 
/**
21
 
 * os_sleep - Sleep (sec, usec)
22
 
 * @sec: Number of seconds to sleep
23
 
 * @usec: Number of microseconds to sleep
24
 
 */
25
 
void os_sleep(os_time_t sec, os_time_t usec);
26
 
 
27
 
struct os_time {
28
 
        os_time_t sec;
29
 
        os_time_t usec;
30
 
};
31
 
 
32
 
/**
33
 
 * os_get_time - Get current time (sec, usec)
34
 
 * @t: Pointer to buffer for the time
35
 
 * Returns: 0 on success, -1 on failure
36
 
 */
37
 
int os_get_time(struct os_time *t);
38
 
 
39
 
 
40
 
/* Helper macros for handling struct os_time */
41
 
 
42
 
#define os_time_before(a, b) \
43
 
        ((a)->sec < (b)->sec || \
44
 
         ((a)->sec == (b)->sec && (a)->usec < (b)->usec))
45
 
 
46
 
#define os_time_sub(a, b, res) do { \
47
 
        (res)->sec = (a)->sec - (b)->sec; \
48
 
        (res)->usec = (a)->usec - (b)->usec; \
49
 
        if ((res)->usec < 0) { \
50
 
                (res)->sec--; \
51
 
                (res)->usec += 1000000; \
52
 
        } \
53
 
} while (0)
54
 
 
55
 
/**
56
 
 * os_mktime - Convert broken-down time into seconds since 1970-01-01
57
 
 * @year: Four digit year
58
 
 * @month: Month (1 .. 12)
59
 
 * @day: Day of month (1 .. 31)
60
 
 * @hour: Hour (0 .. 23)
61
 
 * @min: Minute (0 .. 59)
62
 
 * @sec: Second (0 .. 60)
63
 
 * @t: Buffer for returning calendar time representation (seconds since
64
 
 * 1970-01-01 00:00:00)
65
 
 * Returns: 0 on success, -1 on failure
66
 
 */
67
 
int os_mktime(int year, int month, int day, int hour, int min, int sec,
68
 
              os_time_t *t);
69
 
 
70
 
 
71
 
/**
72
 
 * os_daemonize - Run in the background (detach from the controlling terminal)
73
 
 * @pid_file: File name to write the process ID to or %NULL to skip this
74
 
 * Returns: 0 on success, -1 on failure
75
 
 */
76
 
int os_daemonize(const char *pid_file);
77
 
 
78
 
/**
79
 
 * os_daemonize_terminate - Stop running in the background (remove pid file)
80
 
 * @pid_file: File name to write the process ID to or %NULL to skip this
81
 
 */
82
 
void os_daemonize_terminate(const char *pid_file);
83
 
 
84
 
/**
85
 
 * os_get_random - Get cryptographically strong pseudo random data
86
 
 * @buf: Buffer for pseudo random data
87
 
 * @len: Length of the buffer
88
 
 * Returns: 0 on success, -1 on failure
89
 
 */
90
 
int os_get_random(unsigned char *buf, size_t len);
91
 
 
92
 
/**
93
 
 * os_random - Get pseudo random value (not necessarily very strong)
94
 
 * Returns: Pseudo random value
95
 
 */
96
 
unsigned long os_random(void);
97
 
 
98
 
/**
99
 
 * os_rel2abs_path - Get an absolute path for a file
100
 
 * @rel_path: Relative path to a file
101
 
 * Returns: Absolute path for the file or %NULL on failure
102
 
 *
103
 
 * This function tries to convert a relative path of a file to an absolute path
104
 
 * in order for the file to be found even if current working directory has
105
 
 * changed. The returned value is allocated and caller is responsible for
106
 
 * freeing it. It is acceptable to just return the same path in an allocated
107
 
 * buffer, e.g., return strdup(rel_path). This function is only used to find
108
 
 * configuration files when os_daemonize() may have changed the current working
109
 
 * directory and relative path would be pointing to a different location.
110
 
 */
111
 
char * os_rel2abs_path(const char *rel_path);
112
 
 
113
 
/**
114
 
 * os_program_init - Program initialization (called at start)
115
 
 * Returns: 0 on success, -1 on failure
116
 
 *
117
 
 * This function is called when a programs starts. If there are any OS specific
118
 
 * processing that is needed, it can be placed here. It is also acceptable to
119
 
 * just return 0 if not special processing is needed.
120
 
 */
121
 
int os_program_init(void);
122
 
 
123
 
/**
124
 
 * os_program_deinit - Program deinitialization (called just before exit)
125
 
 *
126
 
 * This function is called just before a program exists. If there are any OS
127
 
 * specific processing, e.g., freeing resourced allocated in os_program_init(),
128
 
 * it should be done here. It is also acceptable for this function to do
129
 
 * nothing.
130
 
 */
131
 
void os_program_deinit(void);
132
 
 
133
 
/**
134
 
 * os_setenv - Set environment variable
135
 
 * @name: Name of the variable
136
 
 * @value: Value to set to the variable
137
 
 * @overwrite: Whether existing variable should be overwritten
138
 
 * Returns: 0 on success, -1 on error
139
 
 *
140
 
 * This function is only used for wpa_cli action scripts. OS wrapper does not
141
 
 * need to implement this if such functionality is not needed.
142
 
 */
143
 
int os_setenv(const char *name, const char *value, int overwrite);
144
 
 
145
 
/**
146
 
 * os_unsetenv - Delete environent variable
147
 
 * @name: Name of the variable
148
 
 * Returns: 0 on success, -1 on error
149
 
 *
150
 
 * This function is only used for wpa_cli action scripts. OS wrapper does not
151
 
 * need to implement this if such functionality is not needed.
152
 
 */
153
 
int os_unsetenv(const char *name);
154
 
 
155
 
/**
156
 
 * os_readfile - Read a file to an allocated memory buffer
157
 
 * @name: Name of the file to read
158
 
 * @len: For returning the length of the allocated buffer
159
 
 * Returns: Pointer to the allocated buffer or %NULL on failure
160
 
 *
161
 
 * This function allocates memory and reads the given file to this buffer. Both
162
 
 * binary and text files can be read with this function. The caller is
163
 
 * responsible for freeing the returned buffer with os_free().
164
 
 */
165
 
char * os_readfile(const char *name, size_t *len);
166
 
 
167
 
/**
168
 
 * os_zalloc - Allocate and zero memory
169
 
 * @size: Number of bytes to allocate
170
 
 * Returns: Pointer to allocated and zeroed memory or %NULL on failure
171
 
 *
172
 
 * Caller is responsible for freeing the returned buffer with os_free().
173
 
 */
174
 
void * os_zalloc(size_t size);
175
 
 
176
 
 
177
 
/*
178
 
 * The following functions are wrapper for standard ANSI C or POSIX functions.
179
 
 * By default, they are just defined to use the standard function name and no
180
 
 * os_*.c implementation is needed for them. This avoids extra function calls
181
 
 * by allowing the C pre-processor take care of the function name mapping.
182
 
 *
183
 
 * If the target system uses a C library that does not provide these functions,
184
 
 * build_config.h can be used to define the wrappers to use a different
185
 
 * function name. This can be done on function-by-function basis since the
186
 
 * defines here are only used if build_config.h does not define the os_* name.
187
 
 * If needed, os_*.c file can be used to implement the functions that are not
188
 
 * included in the C library on the target system. Alternatively,
189
 
 * OS_NO_C_LIB_DEFINES can be defined to skip all defines here in which case
190
 
 * these functions need to be implemented in os_*.c file for the target system.
191
 
 */
192
 
 
193
 
#ifdef OS_NO_C_LIB_DEFINES
194
 
 
195
 
/**
196
 
 * os_malloc - Allocate dynamic memory
197
 
 * @size: Size of the buffer to allocate
198
 
 * Returns: Allocated buffer or %NULL on failure
199
 
 *
200
 
 * Caller is responsible for freeing the returned buffer with os_free().
201
 
 */
202
 
void * os_malloc(size_t size);
203
 
 
204
 
/**
205
 
 * os_realloc - Re-allocate dynamic memory
206
 
 * @ptr: Old buffer from os_malloc() or os_realloc()
207
 
 * @size: Size of the new buffer
208
 
 * Returns: Allocated buffer or %NULL on failure
209
 
 *
210
 
 * Caller is responsible for freeing the returned buffer with os_free().
211
 
 * If re-allocation fails, %NULL is returned and the original buffer (ptr) is
212
 
 * not freed and caller is still responsible for freeing it.
213
 
 */
214
 
void * os_realloc(void *ptr, size_t size);
215
 
 
216
 
/**
217
 
 * os_free - Free dynamic memory
218
 
 * @ptr: Old buffer from os_malloc() or os_realloc(); can be %NULL
219
 
 */
220
 
void os_free(void *ptr);
221
 
 
222
 
/**
223
 
 * os_memcpy - Copy memory area
224
 
 * @dest: Destination
225
 
 * @src: Source
226
 
 * @n: Number of bytes to copy
227
 
 * Returns: dest
228
 
 *
229
 
 * The memory areas src and dst must not overlap. os_memmove() can be used with
230
 
 * overlapping memory.
231
 
 */
232
 
void * os_memcpy(void *dest, const void *src, size_t n);
233
 
 
234
 
/**
235
 
 * os_memmove - Copy memory area
236
 
 * @dest: Destination
237
 
 * @src: Source
238
 
 * @n: Number of bytes to copy
239
 
 * Returns: dest
240
 
 *
241
 
 * The memory areas src and dst may overlap.
242
 
 */
243
 
void * os_memmove(void *dest, const void *src, size_t n);
244
 
 
245
 
/**
246
 
 * os_memset - Fill memory with a constant byte
247
 
 * @s: Memory area to be filled
248
 
 * @c: Constant byte
249
 
 * @n: Number of bytes started from s to fill with c
250
 
 * Returns: s
251
 
 */
252
 
void * os_memset(void *s, int c, size_t n);
253
 
 
254
 
/**
255
 
 * os_memcmp - Compare memory areas
256
 
 * @s1: First buffer
257
 
 * @s2: Second buffer
258
 
 * @n: Maximum numbers of octets to compare
259
 
 * Returns: An integer less than, equal to, or greater than zero if s1 is
260
 
 * found to be less than, to match, or be greater than s2. Only first n
261
 
 * characters will be compared.
262
 
 */
263
 
int os_memcmp(const void *s1, const void *s2, size_t n);
264
 
 
265
 
/**
266
 
 * os_strdup - Duplicate a string
267
 
 * @s: Source string
268
 
 * Returns: Allocated buffer with the string copied into it or %NULL on failure
269
 
 *
270
 
 * Caller is responsible for freeing the returned buffer with os_free().
271
 
 */
272
 
char * os_strdup(const char *s);
273
 
 
274
 
/**
275
 
 * os_strlen - Calculate the length of a string
276
 
 * @s: '\0' terminated string
277
 
 * Returns: Number of characters in s (not counting the '\0' terminator)
278
 
 */
279
 
size_t os_strlen(const char *s);
280
 
 
281
 
/**
282
 
 * os_strcasecmp - Compare two strings ignoring case
283
 
 * @s1: First string
284
 
 * @s2: Second string
285
 
 * Returns: An integer less than, equal to, or greater than zero if s1 is
286
 
 * found to be less than, to match, or be greatred than s2
287
 
 */
288
 
int os_strcasecmp(const char *s1, const char *s2);
289
 
 
290
 
/**
291
 
 * os_strncasecmp - Compare two strings ignoring case
292
 
 * @s1: First string
293
 
 * @s2: Second string
294
 
 * @n: Maximum numbers of characters to compare
295
 
 * Returns: An integer less than, equal to, or greater than zero if s1 is
296
 
 * found to be less than, to match, or be greater than s2. Only first n
297
 
 * characters will be compared.
298
 
 */
299
 
int os_strncasecmp(const char *s1, const char *s2, size_t n);
300
 
 
301
 
/**
302
 
 * os_strchr - Locate the first occurrence of a character in string
303
 
 * @s: String
304
 
 * @c: Character to search for
305
 
 * Returns: Pointer to the matched character or %NULL if not found
306
 
 */
307
 
char * os_strchr(const char *s, int c);
308
 
 
309
 
/**
310
 
 * os_strrchr - Locate the last occurrence of a character in string
311
 
 * @s: String
312
 
 * @c: Character to search for
313
 
 * Returns: Pointer to the matched character or %NULL if not found
314
 
 */
315
 
char * os_strrchr(const char *s, int c);
316
 
 
317
 
/**
318
 
 * os_strcmp - Compare two strings
319
 
 * @s1: First string
320
 
 * @s2: Second string
321
 
 * Returns: An integer less than, equal to, or greater than zero if s1 is
322
 
 * found to be less than, to match, or be greatred than s2
323
 
 */
324
 
int os_strcmp(const char *s1, const char *s2);
325
 
 
326
 
/**
327
 
 * os_strncmp - Compare two strings
328
 
 * @s1: First string
329
 
 * @s2: Second string
330
 
 * @n: Maximum numbers of characters to compare
331
 
 * Returns: An integer less than, equal to, or greater than zero if s1 is
332
 
 * found to be less than, to match, or be greater than s2. Only first n
333
 
 * characters will be compared.
334
 
 */
335
 
int os_strncmp(const char *s1, const char *s2, size_t n);
336
 
 
337
 
/**
338
 
 * os_strncpy - Copy a string
339
 
 * @dest: Destination
340
 
 * @src: Source
341
 
 * @n: Maximum number of characters to copy
342
 
 * Returns: dest
343
 
 */
344
 
char * os_strncpy(char *dest, const char *src, size_t n);
345
 
 
346
 
/**
347
 
 * os_strstr - Locate a substring
348
 
 * @haystack: String (haystack) to search from
349
 
 * @needle: Needle to search from haystack
350
 
 * Returns: Pointer to the beginning of the substring or %NULL if not found
351
 
 */
352
 
char * os_strstr(const char *haystack, const char *needle);
353
 
 
354
 
/**
355
 
 * os_snprintf - Print to a memory buffer
356
 
 * @str: Memory buffer to print into
357
 
 * @size: Maximum length of the str buffer
358
 
 * @format: printf format
359
 
 * Returns: Number of characters printed (not including trailing '\0').
360
 
 *
361
 
 * If the output buffer is truncated, number of characters which would have
362
 
 * been written is returned. Since some C libraries return -1 in such a case,
363
 
 * the caller must be prepared on that value, too, to indicate truncation.
364
 
 *
365
 
 * Note: Some C library implementations of snprintf() may not guarantee null
366
 
 * termination in case the output is truncated. The OS wrapper function of
367
 
 * os_snprintf() should provide this guarantee, i.e., to null terminate the
368
 
 * output buffer if a C library version of the function is used and if that
369
 
 * function does not guarantee null termination.
370
 
 *
371
 
 * If the target system does not include snprintf(), see, e.g.,
372
 
 * http://www.ijs.si/software/snprintf/ for an example of a portable
373
 
 * implementation of snprintf.
374
 
 */
375
 
int os_snprintf(char *str, size_t size, const char *format, ...);
376
 
 
377
 
#else /* OS_NO_C_LIB_DEFINES */
378
 
 
379
 
#ifndef os_malloc
380
 
#define os_malloc(s) malloc((s))
381
 
#endif
382
 
#ifndef os_realloc
383
 
#define os_realloc(p, s) realloc((p), (s))
384
 
#endif
385
 
#ifndef os_free
386
 
#define os_free(p) free((p))
387
 
#endif
388
 
 
389
 
#ifndef os_memcpy
390
 
#define os_memcpy(d, s, n) memcpy((d), (s), (n))
391
 
#endif
392
 
#ifndef os_memmove
393
 
#define os_memmove(d, s, n) memmove((d), (s), (n))
394
 
#endif
395
 
#ifndef os_memset
396
 
#define os_memset(s, c, n) memset(s, c, n)
397
 
#endif
398
 
#ifndef os_memcmp
399
 
#define os_memcmp(s1, s2, n) memcmp((s1), (s2), (n))
400
 
#endif
401
 
 
402
 
#ifndef os_strdup
403
 
#ifdef _MSC_VER
404
 
#define os_strdup(s) _strdup(s)
405
 
#else
406
 
#define os_strdup(s) strdup(s)
407
 
#endif
408
 
#endif
409
 
#ifndef os_strlen
410
 
#define os_strlen(s) strlen(s)
411
 
#endif
412
 
#ifndef os_strcasecmp
413
 
#ifdef _MSC_VER
414
 
#define os_strcasecmp(s1, s2) _stricmp((s1), (s2))
415
 
#else
416
 
#define os_strcasecmp(s1, s2) strcasecmp((s1), (s2))
417
 
#endif
418
 
#endif
419
 
#ifndef os_strncasecmp
420
 
#ifdef _MSC_VER
421
 
#define os_strncasecmp(s1, s2, n) _strnicmp((s1), (s2), (n))
422
 
#else
423
 
#define os_strncasecmp(s1, s2, n) strncasecmp((s1), (s2), (n))
424
 
#endif
425
 
#endif
426
 
#ifndef os_strchr
427
 
#define os_strchr(s, c) strchr((s), (c))
428
 
#endif
429
 
#ifndef os_strcmp
430
 
#define os_strcmp(s1, s2) strcmp((s1), (s2))
431
 
#endif
432
 
#ifndef os_strncmp
433
 
#define os_strncmp(s1, s2, n) strncmp((s1), (s2), (n))
434
 
#endif
435
 
#ifndef os_strncpy
436
 
#define os_strncpy(d, s, n) strncpy((d), (s), (n))
437
 
#endif
438
 
#ifndef os_strrchr
439
 
#define os_strrchr(s, c) strrchr((s), (c))
440
 
#endif
441
 
#ifndef os_strstr
442
 
#define os_strstr(h, n) strstr((h), (n))
443
 
#endif
444
 
 
445
 
#ifndef os_snprintf
446
 
#ifdef _MSC_VER
447
 
#define os_snprintf _snprintf
448
 
#else
449
 
#define os_snprintf snprintf
450
 
#endif
451
 
#endif
452
 
 
453
 
#endif /* OS_NO_C_LIB_DEFINES */
454
 
 
455
 
 
456
 
#ifdef OS_REJECT_C_LIB_FUNCTIONS
457
 
#define malloc OS_DO_NOT_USE_malloc
458
 
#define realloc OS_DO_NOT_USE_realloc
459
 
#define free OS_DO_NOT_USE_free
460
 
#define memcpy OS_DO_NOT_USE_memcpy
461
 
#define memmove OS_DO_NOT_USE_memmove
462
 
#define memset OS_DO_NOT_USE_memset
463
 
#define memcmp OS_DO_NOT_USE_memcmp
464
 
#undef strdup
465
 
#define strdup OS_DO_NOT_USE_strdup
466
 
#define strlen OS_DO_NOT_USE_strlen
467
 
#define strcasecmp OS_DO_NOT_USE_strcasecmp
468
 
#define strncasecmp OS_DO_NOT_USE_strncasecmp
469
 
#undef strchr
470
 
#define strchr OS_DO_NOT_USE_strchr
471
 
#undef strcmp
472
 
#define strcmp OS_DO_NOT_USE_strcmp
473
 
#undef strncmp
474
 
#define strncmp OS_DO_NOT_USE_strncmp
475
 
#undef strncpy
476
 
#define strncpy OS_DO_NOT_USE_strncpy
477
 
#define strrchr OS_DO_NOT_USE_strrchr
478
 
#define strstr OS_DO_NOT_USE_strstr
479
 
#undef snprintf
480
 
#define snprintf OS_DO_NOT_USE_snprintf
481
 
 
482
 
#define strcpy OS_DO_NOT_USE_strcpy
483
 
#endif /* OS_REJECT_C_LIB_FUNCTIONS */
484
 
 
485
 
#endif /* OS_H */