Whamcloud - gitweb
b=16098
[fs/lustre-release.git] / libcfs / include / libcfs / darwin / darwin-utils.h
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  *
4  * GPL HEADER START
5  *
6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 only,
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License version 2 for more details (a copy is included
16  * in the LICENSE file that accompanied this code).
17  *
18  * You should have received a copy of the GNU General Public License
19  * version 2 along with this program; If not, see
20  * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
21  *
22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23  * CA 95054 USA or visit www.sun.com if you need additional information or
24  * have any questions.
25  *
26  * GPL HEADER END
27  */
28 /*
29  * Copyright  2008 Sun Microsystems, Inc. All rights reserved
30  * Use is subject to license terms.
31  */
32 /*
33  * This file is part of Lustre, http://www.lustre.org/
34  * Lustre is a trademark of Sun Microsystems, Inc.
35  */
36
37 #ifndef __LIBCFS_DARWIN_UTILS_H__
38 #define __LIBCFS_DARWIN_UTILS_H__
39
40 #ifndef __LIBCFS_LIBCFS_H__
41 #error Do not #include this file directly. #include <libcfs/libcfs.h> instead
42 #endif
43
44 #include <sys/random.h> 
45
46 #ifdef __KERNEL__
47 inline int isspace(char c);
48 char *strpbrk(const char *cs, const char *ct);
49 char * strsep(char **s, const char *ct);
50 size_t strnlen(const char * s, size_t count);
51 char * strstr(const char *in, const char *str);
52 char * strrchr(const char *p, int ch);
53 char * ul2dstr(unsigned long address, char *buf, int len);
54
55 #define simple_strtol(a1, a2, a3)               strtol(a1, a2, a3)
56 #define simple_strtoul(a1, a2, a3)              strtoul(a1, a2, a3)
57 #define simple_strtoll(a1, a2, a3)              strtoq(a1, a2, a3)
58 #define simple_strtoull(a1, a2, a3)             strtouq(a1, a2, a3)
59
60 #define test_bit(i, a)                          isset(a, i)
61 #define set_bit(i, a)                           setbit(a, i)
62 #define clear_bit(i, a)                         clrbit(a, i)
63
64 #define get_random_bytes(buf, len)              read_random(buf, len)
65
66 #endif  /* __KERNEL__ */
67
68 #ifndef min_t
69 #define min_t(type,x,y) \
70         ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
71 #endif
72 #ifndef max_t
73 #define max_t(type,x,y) \
74         ({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
75 #endif
76
77 #define do_div(n,base)                          \
78         ({                                      \
79          __u64 __n = (n);                       \
80          __u32 __base = (base);                 \
81          __u32 __mod;                           \
82                                                 \
83          __mod = __n % __base;                  \
84          n = __n / __base;                      \
85          __mod;                                 \
86          })
87
88 #define NIPQUAD(addr)                   \
89         ((unsigned char *)&addr)[0],    \
90         ((unsigned char *)&addr)[1],    \
91         ((unsigned char *)&addr)[2],    \
92         ((unsigned char *)&addr)[3]
93
94 #define HIPQUAD NIPQUAD
95
96 #ifndef LIST_CIRCLE
97 #define LIST_CIRCLE(elm, field)                                 \
98         do {                                                    \
99                 (elm)->field.le_prev = &(elm)->field.le_next;   \
100         } while (0)
101 #endif
102
103 #endif /* __XNU_UTILS_H__ */