xref: /onnv-gate/usr/src/lib/udapl/udapl_tavor/include/dapl_osd.h (revision 9517:b4839b0aa7a4)
1*9517SBill.Taylor@Sun.COM /*
2*9517SBill.Taylor@Sun.COM  * CDDL HEADER START
3*9517SBill.Taylor@Sun.COM  *
4*9517SBill.Taylor@Sun.COM  * The contents of this file are subject to the terms of the
5*9517SBill.Taylor@Sun.COM  * Common Development and Distribution License (the "License").
6*9517SBill.Taylor@Sun.COM  * You may not use this file except in compliance with the License.
7*9517SBill.Taylor@Sun.COM  *
8*9517SBill.Taylor@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9517SBill.Taylor@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*9517SBill.Taylor@Sun.COM  * See the License for the specific language governing permissions
11*9517SBill.Taylor@Sun.COM  * and limitations under the License.
12*9517SBill.Taylor@Sun.COM  *
13*9517SBill.Taylor@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*9517SBill.Taylor@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9517SBill.Taylor@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*9517SBill.Taylor@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*9517SBill.Taylor@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9517SBill.Taylor@Sun.COM  *
19*9517SBill.Taylor@Sun.COM  * CDDL HEADER END
20*9517SBill.Taylor@Sun.COM  */
21*9517SBill.Taylor@Sun.COM 
22*9517SBill.Taylor@Sun.COM /*
23*9517SBill.Taylor@Sun.COM  * Copyright (c) 2002-2003, Network Appliance, Inc. All rights reserved.
24*9517SBill.Taylor@Sun.COM  */
25*9517SBill.Taylor@Sun.COM 
26*9517SBill.Taylor@Sun.COM /*
27*9517SBill.Taylor@Sun.COM  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
28*9517SBill.Taylor@Sun.COM  * Use is subject to license terms.
29*9517SBill.Taylor@Sun.COM  */
30*9517SBill.Taylor@Sun.COM 
31*9517SBill.Taylor@Sun.COM /*
32*9517SBill.Taylor@Sun.COM  *
33*9517SBill.Taylor@Sun.COM  * HEADER: dapl_osd.h
34*9517SBill.Taylor@Sun.COM  *
35*9517SBill.Taylor@Sun.COM  * PURPOSE: Operating System Dependent layer
36*9517SBill.Taylor@Sun.COM  * Description:
37*9517SBill.Taylor@Sun.COM  *	Provide OS dependent data structures & functions with
38*9517SBill.Taylor@Sun.COM  *	a canonical DAPL interface. Designed to be portable
39*9517SBill.Taylor@Sun.COM  *	and hide OS specific quirks of common functions.
40*9517SBill.Taylor@Sun.COM  *
41*9517SBill.Taylor@Sun.COM  * $Id: dapl_osd.h,v 1.38 2003/08/20 14:08:57 sjs2 Exp $
42*9517SBill.Taylor@Sun.COM  */
43*9517SBill.Taylor@Sun.COM 
44*9517SBill.Taylor@Sun.COM #ifndef _DAPL_OSD_H_
45*9517SBill.Taylor@Sun.COM #define	_DAPL_OSD_H_
46*9517SBill.Taylor@Sun.COM 
47*9517SBill.Taylor@Sun.COM #ifdef __cplusplus
48*9517SBill.Taylor@Sun.COM extern "C" {
49*9517SBill.Taylor@Sun.COM #endif
50*9517SBill.Taylor@Sun.COM 
51*9517SBill.Taylor@Sun.COM /*
52*9517SBill.Taylor@Sun.COM  * <assert.h> keys off of NDEBUG
53*9517SBill.Taylor@Sun.COM  */
54*9517SBill.Taylor@Sun.COM #ifdef	DAPL_DBG
55*9517SBill.Taylor@Sun.COM #undef	NDEBUG
56*9517SBill.Taylor@Sun.COM #else
57*9517SBill.Taylor@Sun.COM #define	NDEBUG
58*9517SBill.Taylor@Sun.COM #endif
59*9517SBill.Taylor@Sun.COM 
60*9517SBill.Taylor@Sun.COM #include <dat/udat.h>
61*9517SBill.Taylor@Sun.COM #include <assert.h>
62*9517SBill.Taylor@Sun.COM #include <errno.h>
63*9517SBill.Taylor@Sun.COM #include <pthread.h>
64*9517SBill.Taylor@Sun.COM #include <semaphore.h>
65*9517SBill.Taylor@Sun.COM #include <stdio.h>
66*9517SBill.Taylor@Sun.COM #include <stdlib.h>
67*9517SBill.Taylor@Sun.COM #include <string.h>
68*9517SBill.Taylor@Sun.COM #include <stdarg.h>
69*9517SBill.Taylor@Sun.COM #include <time.h>
70*9517SBill.Taylor@Sun.COM #include <syslog.h>
71*9517SBill.Taylor@Sun.COM #include <netdb.h>
72*9517SBill.Taylor@Sun.COM #include <atomic.h>
73*9517SBill.Taylor@Sun.COM #include "dapl_debug.h"
74*9517SBill.Taylor@Sun.COM 
75*9517SBill.Taylor@Sun.COM /*
76*9517SBill.Taylor@Sun.COM  * networking related headers
77*9517SBill.Taylor@Sun.COM  */
78*9517SBill.Taylor@Sun.COM #include <unistd.h>
79*9517SBill.Taylor@Sun.COM #include <fcntl.h>
80*9517SBill.Taylor@Sun.COM #include <sys/types.h>
81*9517SBill.Taylor@Sun.COM #include <sys/socket.h>
82*9517SBill.Taylor@Sun.COM #include <ctype.h>
83*9517SBill.Taylor@Sun.COM #include <arpa/inet.h>
84*9517SBill.Taylor@Sun.COM 
85*9517SBill.Taylor@Sun.COM #ifndef _INLINE_
86*9517SBill.Taylor@Sun.COM #define	_INLINE_
87*9517SBill.Taylor@Sun.COM #endif /* _INLINE_ */
88*9517SBill.Taylor@Sun.COM 
89*9517SBill.Taylor@Sun.COM /*
90*9517SBill.Taylor@Sun.COM  * initialization function
91*9517SBill.Taylor@Sun.COM  */
92*9517SBill.Taylor@Sun.COM void dapl_os_init(void);
93*9517SBill.Taylor@Sun.COM 
94*9517SBill.Taylor@Sun.COM #define	dapl_os_panic(args) 			\
95*9517SBill.Taylor@Sun.COM {					\
96*9517SBill.Taylor@Sun.COM 	fprintf(stderr, "PANIC in %s:%i:\n", __FILE__, __LINE__); \
97*9517SBill.Taylor@Sun.COM 	fprintf(stderr, args);			\
98*9517SBill.Taylor@Sun.COM 	exit(1);				\
99*9517SBill.Taylor@Sun.COM }
100*9517SBill.Taylor@Sun.COM 
101*9517SBill.Taylor@Sun.COM int dapl_os_get_env_bool(
102*9517SBill.Taylor@Sun.COM 	char		*env_str);
103*9517SBill.Taylor@Sun.COM 
104*9517SBill.Taylor@Sun.COM int dapl_os_get_env_val(
105*9517SBill.Taylor@Sun.COM 	char		*env_str,
106*9517SBill.Taylor@Sun.COM 	int		def_val);
107*9517SBill.Taylor@Sun.COM 
108*9517SBill.Taylor@Sun.COM /*
109*9517SBill.Taylor@Sun.COM  * Atomic operations
110*9517SBill.Taylor@Sun.COM  */
111*9517SBill.Taylor@Sun.COM typedef volatile DAT_COUNT DAPL_ATOMIC;
112*9517SBill.Taylor@Sun.COM 
113*9517SBill.Taylor@Sun.COM /*
114*9517SBill.Taylor@Sun.COM  * dapl_os_atomic_inc
115*9517SBill.Taylor@Sun.COM  *
116*9517SBill.Taylor@Sun.COM  * get the current value of '*v', and then increment it.
117*9517SBill.Taylor@Sun.COM  *
118*9517SBill.Taylor@Sun.COM  * This is equivalent to an IB atomic fetch and add of 1,
119*9517SBill.Taylor@Sun.COM  * except that a DAT_COUNT might be 32 bits, rather than 64
120*9517SBill.Taylor@Sun.COM  * and it occurs in local memory.
121*9517SBill.Taylor@Sun.COM  *
122*9517SBill.Taylor@Sun.COM  * DAT_COUNT dapl_os_atomic_inc(INOUT	DAPL_ATOMIC *v)
123*9517SBill.Taylor@Sun.COM  */
124*9517SBill.Taylor@Sun.COM #define	dapl_os_atomic_inc(v)	((DAT_COUNT)			\
125*9517SBill.Taylor@Sun.COM 				(atomic_add_32_nv((uint32_t *)(v), 1) - 1))
126*9517SBill.Taylor@Sun.COM 
127*9517SBill.Taylor@Sun.COM /*
128*9517SBill.Taylor@Sun.COM  * dapl_os_atomic_dec
129*9517SBill.Taylor@Sun.COM  *
130*9517SBill.Taylor@Sun.COM  * decrement the current value of '*v'. No return value is required.
131*9517SBill.Taylor@Sun.COM  *
132*9517SBill.Taylor@Sun.COM  * DAT_COUNT dapl_os_atomic_dec(INOUT	DAPL_ATOMIC *v)
133*9517SBill.Taylor@Sun.COM  */
134*9517SBill.Taylor@Sun.COM #define	dapl_os_atomic_dec(v)	assert(*v != 0);		\
135*9517SBill.Taylor@Sun.COM 				((DAT_COUNT)			\
136*9517SBill.Taylor@Sun.COM 				(atomic_add_32_nv((uint32_t *)(v), -1) + 1))
137*9517SBill.Taylor@Sun.COM 
138*9517SBill.Taylor@Sun.COM /*
139*9517SBill.Taylor@Sun.COM  * dapl_os_atomic_assign
140*9517SBill.Taylor@Sun.COM  *
141*9517SBill.Taylor@Sun.COM  * assign 'new_value' to '*v' if the current value
142*9517SBill.Taylor@Sun.COM  * matches the provided 'match_value'.
143*9517SBill.Taylor@Sun.COM  *
144*9517SBill.Taylor@Sun.COM  * Make no assignment if there is no match.
145*9517SBill.Taylor@Sun.COM  *
146*9517SBill.Taylor@Sun.COM  * Return the current value in any case.
147*9517SBill.Taylor@Sun.COM  *
148*9517SBill.Taylor@Sun.COM  * This matches the IBTA atomic operation compare & swap
149*9517SBill.Taylor@Sun.COM  * except that it is for local memory and a DAT_COUNT may
150*9517SBill.Taylor@Sun.COM  * be only 32 bits, rather than 64.
151*9517SBill.Taylor@Sun.COM  *
152*9517SBill.Taylor@Sun.COM  * DAT_COUNT dapl_os_atomic_assign(INOUT DAPL_ATOMIC *v,
153*9517SBill.Taylor@Sun.COM  *	IN DAT_COUNT match_value, IN DAT_COUNT new_value)
154*9517SBill.Taylor@Sun.COM  */
155*9517SBill.Taylor@Sun.COM #define	dapl_os_atomic_assign(v, match_value, new_value)		\
156*9517SBill.Taylor@Sun.COM 		atomic_cas_32((uint32_t *)(v), (uint32_t)(match_value),	\
157*9517SBill.Taylor@Sun.COM 		    (uint32_t)(new_value))
158*9517SBill.Taylor@Sun.COM 
159*9517SBill.Taylor@Sun.COM /*
160*9517SBill.Taylor@Sun.COM  * Thread Functions
161*9517SBill.Taylor@Sun.COM  */
162*9517SBill.Taylor@Sun.COM typedef pthread_t		DAPL_OS_THREAD;
163*9517SBill.Taylor@Sun.COM 
164*9517SBill.Taylor@Sun.COM DAT_RETURN
165*9517SBill.Taylor@Sun.COM dapl_os_thread_create(
166*9517SBill.Taylor@Sun.COM 	IN  void			(*func)	(void *),
167*9517SBill.Taylor@Sun.COM 	IN  void			*data,
168*9517SBill.Taylor@Sun.COM 	OUT DAPL_OS_THREAD		*thread_id);
169*9517SBill.Taylor@Sun.COM 
170*9517SBill.Taylor@Sun.COM 
171*9517SBill.Taylor@Sun.COM /*
172*9517SBill.Taylor@Sun.COM  * Lock Functions
173*9517SBill.Taylor@Sun.COM  */
174*9517SBill.Taylor@Sun.COM 
175*9517SBill.Taylor@Sun.COM typedef pthread_mutex_t 	DAPL_OS_LOCK;
176*9517SBill.Taylor@Sun.COM 
177*9517SBill.Taylor@Sun.COM /*
178*9517SBill.Taylor@Sun.COM  * DAT_RETURN dapl_os_lock_init(IN DAPL_OS_LOCK *m)
179*9517SBill.Taylor@Sun.COM  */
180*9517SBill.Taylor@Sun.COM #define	dapl_os_lock_init(m)	(void)					\
181*9517SBill.Taylor@Sun.COM 				((0 == pthread_mutex_init((m), NULL)) ?	\
182*9517SBill.Taylor@Sun.COM 					DAT_SUCCESS :			\
183*9517SBill.Taylor@Sun.COM 					(DAT_CLASS_ERROR | DAT_INTERNAL_ERROR))
184*9517SBill.Taylor@Sun.COM 
185*9517SBill.Taylor@Sun.COM /* DAT_RETURN dapl_os_lock(IN DAPL_OS_LOCK *m) */
186*9517SBill.Taylor@Sun.COM #define	dapl_os_lock(m)		((DAT_RETURN)(				\
187*9517SBill.Taylor@Sun.COM 				(0 == pthread_mutex_lock((m))) ?	\
188*9517SBill.Taylor@Sun.COM 					DAT_SUCCESS :			\
189*9517SBill.Taylor@Sun.COM 					(DAT_CLASS_ERROR | DAT_INTERNAL_ERROR)))
190*9517SBill.Taylor@Sun.COM 
191*9517SBill.Taylor@Sun.COM /* DAT_RETURN dapl_os_unlock(IN DAPL_OS_LOCK *m) */
192*9517SBill.Taylor@Sun.COM #define	dapl_os_unlock(m)	((DAT_RETURN)(				\
193*9517SBill.Taylor@Sun.COM 				(0 == pthread_mutex_unlock((m))) ?	\
194*9517SBill.Taylor@Sun.COM 					DAT_SUCCESS :			\
195*9517SBill.Taylor@Sun.COM 					(DAT_CLASS_ERROR | DAT_INTERNAL_ERROR)))
196*9517SBill.Taylor@Sun.COM 
197*9517SBill.Taylor@Sun.COM /* DAT_RETURN dapl_os_lock_destroy(IN DAPL_OS_LOCK *m) */
198*9517SBill.Taylor@Sun.COM #define	dapl_os_lock_destroy(m)	((DAT_RETURN)(				\
199*9517SBill.Taylor@Sun.COM 				(0 == pthread_mutex_destroy((m))) ?	\
200*9517SBill.Taylor@Sun.COM 					DAT_SUCCESS :			\
201*9517SBill.Taylor@Sun.COM 					(DAT_CLASS_ERROR | DAT_INTERNAL_ERROR)))
202*9517SBill.Taylor@Sun.COM /*
203*9517SBill.Taylor@Sun.COM  * Wait Objects
204*9517SBill.Taylor@Sun.COM  */
205*9517SBill.Taylor@Sun.COM 
206*9517SBill.Taylor@Sun.COM /*
207*9517SBill.Taylor@Sun.COM  * The wait object invariant: Presuming a call to dapl_os_wait_object_wait
208*9517SBill.Taylor@Sun.COM  * occurs at some point, there will be at least one wakeup after each call
209*9517SBill.Taylor@Sun.COM  * to dapl_os_wait_object_signal.  I.e. Signals are not ignored, though
210*9517SBill.Taylor@Sun.COM  * they may be coallesced.
211*9517SBill.Taylor@Sun.COM  */
212*9517SBill.Taylor@Sun.COM 
213*9517SBill.Taylor@Sun.COM typedef struct
214*9517SBill.Taylor@Sun.COM {
215*9517SBill.Taylor@Sun.COM     DAT_BOOLEAN		signaled;
216*9517SBill.Taylor@Sun.COM     pthread_cond_t	cv;
217*9517SBill.Taylor@Sun.COM     pthread_mutex_t	lock;
218*9517SBill.Taylor@Sun.COM } DAPL_OS_WAIT_OBJECT;
219*9517SBill.Taylor@Sun.COM 
220*9517SBill.Taylor@Sun.COM /* function prototypes */
221*9517SBill.Taylor@Sun.COM DAT_RETURN
222*9517SBill.Taylor@Sun.COM dapl_os_wait_object_init(
223*9517SBill.Taylor@Sun.COM     IN DAPL_OS_WAIT_OBJECT *wait_obj);
224*9517SBill.Taylor@Sun.COM 
225*9517SBill.Taylor@Sun.COM DAT_RETURN
226*9517SBill.Taylor@Sun.COM dapl_os_wait_object_wait(
227*9517SBill.Taylor@Sun.COM     IN	DAPL_OS_WAIT_OBJECT *wait_obj,
228*9517SBill.Taylor@Sun.COM     IN  DAT_TIMEOUT timeout_val);
229*9517SBill.Taylor@Sun.COM 
230*9517SBill.Taylor@Sun.COM DAT_RETURN
231*9517SBill.Taylor@Sun.COM dapl_os_wait_object_wakeup(
232*9517SBill.Taylor@Sun.COM     IN	DAPL_OS_WAIT_OBJECT *wait_obj);
233*9517SBill.Taylor@Sun.COM 
234*9517SBill.Taylor@Sun.COM DAT_RETURN
235*9517SBill.Taylor@Sun.COM dapl_os_wait_object_destroy(
236*9517SBill.Taylor@Sun.COM     IN	DAPL_OS_WAIT_OBJECT *wait_obj);
237*9517SBill.Taylor@Sun.COM 
238*9517SBill.Taylor@Sun.COM /*
239*9517SBill.Taylor@Sun.COM  * Memory Functions
240*9517SBill.Taylor@Sun.COM  */
241*9517SBill.Taylor@Sun.COM 
242*9517SBill.Taylor@Sun.COM /* void *dapl_os_alloc(int size) */
243*9517SBill.Taylor@Sun.COM #define	dapl_os_alloc(size)	malloc((size))
244*9517SBill.Taylor@Sun.COM 
245*9517SBill.Taylor@Sun.COM /* void *dapl_os_realloc(void *ptr, int size) */
246*9517SBill.Taylor@Sun.COM #define	dapl_os_realloc(ptr, size) realloc((ptr), (size))
247*9517SBill.Taylor@Sun.COM 
248*9517SBill.Taylor@Sun.COM /* void dapl_os_free(void *ptr, int size) */
249*9517SBill.Taylor@Sun.COM #define	dapl_os_free(ptr, size)	free((ptr))
250*9517SBill.Taylor@Sun.COM 
251*9517SBill.Taylor@Sun.COM /* void * dapl_os_memzero(void *loc, int size) */
252*9517SBill.Taylor@Sun.COM #define	dapl_os_memzero(loc, size)	memset((loc), 0, (size))
253*9517SBill.Taylor@Sun.COM 
254*9517SBill.Taylor@Sun.COM /* void * dapl_os_memcpy(void *dest, const void *src, int len) */
255*9517SBill.Taylor@Sun.COM #define	dapl_os_memcpy(dest, src, len)	memcpy((dest), (src), (len))
256*9517SBill.Taylor@Sun.COM 
257*9517SBill.Taylor@Sun.COM /* int dapl_os_memcmp(const void *mem1, const void *mem2, int len) */
258*9517SBill.Taylor@Sun.COM #define	dapl_os_memcmp(mem1, mem2, len)	memcmp((mem1), (mem2), (len))
259*9517SBill.Taylor@Sun.COM 
260*9517SBill.Taylor@Sun.COM /*
261*9517SBill.Taylor@Sun.COM  * String Functions
262*9517SBill.Taylor@Sun.COM  */
263*9517SBill.Taylor@Sun.COM 
264*9517SBill.Taylor@Sun.COM /* unsigned int dapl_os_strlen(const char *str) */
265*9517SBill.Taylor@Sun.COM #define	dapl_os_strlen(str)	strlen((str))
266*9517SBill.Taylor@Sun.COM /* char * dapl_os_strdup(const char *str) */
267*9517SBill.Taylor@Sun.COM #define	dapl_os_strdup(str)	strdup((str))
268*9517SBill.Taylor@Sun.COM /* char *strcpy(char *dest, char *src) */
269*9517SBill.Taylor@Sun.COM #define	dapl_os_strcpy(dest, src) 	strcpy((dest), (src))
270*9517SBill.Taylor@Sun.COM /* char *strncpy(char *s1, const char *s2, size_t n) */
271*9517SBill.Taylor@Sun.COM #define	dapl_os_strncpy(dest, src, len) strncpy((dest), (src), (len))
272*9517SBill.Taylor@Sun.COM /* char *strcat(char *dest, char *src) */
273*9517SBill.Taylor@Sun.COM #define	dapl_os_strcat(dest, src) 	strcat((dest), (src))
274*9517SBill.Taylor@Sun.COM 
275*9517SBill.Taylor@Sun.COM /*
276*9517SBill.Taylor@Sun.COM  * Timer Functions
277*9517SBill.Taylor@Sun.COM  */
278*9517SBill.Taylor@Sun.COM 
279*9517SBill.Taylor@Sun.COM typedef DAT_UINT64		DAPL_OS_TIMEVAL;
280*9517SBill.Taylor@Sun.COM 
281*9517SBill.Taylor@Sun.COM 
282*9517SBill.Taylor@Sun.COM typedef unsigned long long int	DAPL_OS_TICKS;
283*9517SBill.Taylor@Sun.COM 
284*9517SBill.Taylor@Sun.COM /* function prototypes */
285*9517SBill.Taylor@Sun.COM 
286*9517SBill.Taylor@Sun.COM /*
287*9517SBill.Taylor@Sun.COM  * Sleep for the number of micro seconds specified by the invoking
288*9517SBill.Taylor@Sun.COM  * function
289*9517SBill.Taylor@Sun.COM  *
290*9517SBill.Taylor@Sun.COM  * void dapl_os_sleep_usec(int sleep_time)
291*9517SBill.Taylor@Sun.COM  */
292*9517SBill.Taylor@Sun.COM #define	dapl_os_sleep_usec(sleep_time)	{				\
293*9517SBill.Taylor@Sun.COM 		struct timespec sleep_spec;				\
294*9517SBill.Taylor@Sun.COM 		sleep_spec.tv_sec = (sleep_time) / 100000;		\
295*9517SBill.Taylor@Sun.COM 		sleep_spec.tv_nsec = (sleep_time) % 100000 * 1000;	\
296*9517SBill.Taylor@Sun.COM 		nanosleep(&sleep_spec, NULL);				\
297*9517SBill.Taylor@Sun.COM 		}
298*9517SBill.Taylor@Sun.COM 
299*9517SBill.Taylor@Sun.COM DAT_RETURN dapl_os_get_time(DAPL_OS_TIMEVAL *);
300*9517SBill.Taylor@Sun.COM 
301*9517SBill.Taylor@Sun.COM /*
302*9517SBill.Taylor@Sun.COM  *
303*9517SBill.Taylor@Sun.COM  * Name Service Helper functions
304*9517SBill.Taylor@Sun.COM  *
305*9517SBill.Taylor@Sun.COM  */
306*9517SBill.Taylor@Sun.COM #if defined(IBHOSTS_NAMING)
307*9517SBill.Taylor@Sun.COM #define	dapls_osd_getaddrinfo(name, addr_ptr)		\
308*9517SBill.Taylor@Sun.COM 				getaddrinfo((name), NULL, NULL, (addr_ptr))
309*9517SBill.Taylor@Sun.COM #define	dapls_osd_freeaddrinfo(addr) freeaddrinfo((addr))
310*9517SBill.Taylor@Sun.COM 
311*9517SBill.Taylor@Sun.COM #endif /* IBHOSTS_NAMING */
312*9517SBill.Taylor@Sun.COM 
313*9517SBill.Taylor@Sun.COM /*
314*9517SBill.Taylor@Sun.COM  * *printf format helpers. We use the C string constant concatenation
315*9517SBill.Taylor@Sun.COM  * ability to define 64 bit formats, which unfortunatly are non standard
316*9517SBill.Taylor@Sun.COM  * in the C compiler world. E.g. %llx for gcc, %I64x for Windows
317*9517SBill.Taylor@Sun.COM  */
318*9517SBill.Taylor@Sun.COM #define	F64d   "%lld"
319*9517SBill.Taylor@Sun.COM #define	F64u   "%llu"
320*9517SBill.Taylor@Sun.COM #define	F64x   "%llx"
321*9517SBill.Taylor@Sun.COM #define	F64X   "%llX"
322*9517SBill.Taylor@Sun.COM 
323*9517SBill.Taylor@Sun.COM 
324*9517SBill.Taylor@Sun.COM /*
325*9517SBill.Taylor@Sun.COM  *  Conversion Functions
326*9517SBill.Taylor@Sun.COM  */
327*9517SBill.Taylor@Sun.COM 
328*9517SBill.Taylor@Sun.COM /* long int dapl_os_strtol(const char *nptr, char **endptr, int base) */
329*9517SBill.Taylor@Sun.COM #define	dapl_os_strtol(nptr, endptr, base)	strtol((nptr), (endptr), (base))
330*9517SBill.Taylor@Sun.COM 
331*9517SBill.Taylor@Sun.COM /*
332*9517SBill.Taylor@Sun.COM  *  Helper Functions
333*9517SBill.Taylor@Sun.COM  */
334*9517SBill.Taylor@Sun.COM 
335*9517SBill.Taylor@Sun.COM 
336*9517SBill.Taylor@Sun.COM #define	dapl_os_assert(expression)	assert((expression))
337*9517SBill.Taylor@Sun.COM #define	dapl_os_printf			printf
338*9517SBill.Taylor@Sun.COM #define	dapl_os_vprintf(fmt, args)	vprintf((fmt), (args))
339*9517SBill.Taylor@Sun.COM #define	dapl_os_syslog(fmt, args)	vsyslog(LOG_USER | LOG_DEBUG,	\
340*9517SBill.Taylor@Sun.COM 						(fmt), (args))
341*9517SBill.Taylor@Sun.COM #ifdef __cplusplus
342*9517SBill.Taylor@Sun.COM }
343*9517SBill.Taylor@Sun.COM #endif
344*9517SBill.Taylor@Sun.COM 
345*9517SBill.Taylor@Sun.COM #endif /* _DAPL_OSD_H_ */
346