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