1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright (c) 2002-2003, Network Appliance, Inc. All rights reserved.
24 */
25
26 /*
27 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
28 * Use is subject to license terms.
29 */
30
31 #pragma ident "%Z%%M% %I% %E% SMI"
32
33 /*
34 *
35 * MODULE: dat_osd.c
36 *
37 * PURPOSE: Operating System Dependent layer
38 * Description:
39 * Provide OS dependent functions with a canonical DAPL
40 * interface. Designed to be portable and hide OS specific quirks
41 * of common functions.
42 *
43 * $Id: dat_osd.c,v 1.8 2003/08/15 20:09:52 jlentini Exp $
44 */
45
46 #include "dat_osd.h"
47
48
49 /*
50 *
51 * Constants
52 *
53 */
54
55 #define DAT_DBG_TYPE_ENV "DAT_DBG_TYPE"
56 #define DAT_DBG_DEST_ENV "DAT_DBG_DEST"
57
58
59 /*
60 *
61 * Enumerations
62 *
63 */
64
65 typedef int DAT_OS_DBG_DEST;
66
67 typedef enum
68 {
69 DAT_OS_DBG_DEST_STDOUT = 0x1,
70 DAT_OS_DBG_DEST_SYSLOG = 0x2,
71 DAT_OS_DBG_DEST_ALL = 0x3
72 } DAT_OS_DBG_DEST_TYPE;
73
74
75 /*
76 *
77 * Global Variables
78 *
79 */
80
81 static DAT_OS_DBG_TYPE_VAL g_dbg_type = 0;
82 static DAT_OS_DBG_DEST g_dbg_dest = DAT_OS_DBG_DEST_STDOUT;
83
84
85 /*
86 * Function: dat_os_dbg_init
87 */
88
89 void
dat_os_dbg_init(void)90 dat_os_dbg_init(void)
91 {
92 char *dbg_type;
93 char *dbg_dest;
94
95 if (NULL != (dbg_type = dat_os_getenv(DAT_DBG_TYPE_ENV))) {
96 g_dbg_type = dat_os_strtol(dbg_type, NULL, 0);
97 }
98
99 if (NULL != (dbg_dest = dat_os_getenv(DAT_DBG_DEST_ENV))) {
100 g_dbg_dest = dat_os_strtol(dbg_dest, NULL, 0);
101 }
102 }
103
104
105 /*
106 * Function: dat_os_dbg_print
107 */
108
109 void
dat_os_dbg_print(DAT_OS_DBG_TYPE_VAL type,const char * fmt,...)110 dat_os_dbg_print(
111 DAT_OS_DBG_TYPE_VAL type,
112 const char *fmt,
113 ...)
114 {
115 if ((DAT_OS_DBG_TYPE_ERROR == type) || (type & g_dbg_type)) {
116 va_list args;
117
118 va_start(args, fmt);
119
120 if (DAT_OS_DBG_DEST_STDOUT & g_dbg_dest) {
121 (void) vfprintf(stdout, fmt, args);
122 (void) fflush(stdout);
123 }
124
125 if (DAT_OS_DBG_DEST_SYSLOG & g_dbg_dest) {
126 vsyslog(LOG_USER | LOG_DEBUG, fmt, args);
127 }
128
129 va_end(args);
130 }
131 }
132
133
134 /*
135 * Function: dat_os_library_load
136 */
137
138 DAT_RETURN
dat_os_library_load(const char * library_path,DAT_OS_LIBRARY_HANDLE * library_handle_ptr)139 dat_os_library_load(
140 const char *library_path,
141 DAT_OS_LIBRARY_HANDLE *library_handle_ptr)
142 {
143 DAT_OS_LIBRARY_HANDLE library_handle;
144
145 if (NULL != (library_handle = dlopen(library_path, RTLD_NOW))) {
146 if (NULL != library_handle_ptr) {
147 *library_handle_ptr = library_handle;
148 }
149
150 return (DAT_SUCCESS);
151 } else {
152 dat_os_dbg_print(DAT_OS_DBG_TYPE_ERROR,
153 "DAT: library load failure: %s\n",
154 dlerror());
155 return (DAT_INTERNAL_ERROR);
156 }
157 }
158
159
160 /*
161 * Function: dat_os_library_unload
162 */
163
164 DAT_RETURN
dat_os_library_unload(const DAT_OS_LIBRARY_HANDLE library_handle)165 dat_os_library_unload(
166 const DAT_OS_LIBRARY_HANDLE library_handle)
167 {
168 if (0 != dlclose(library_handle)) {
169 return (DAT_INTERNAL_ERROR);
170 } else {
171 return (DAT_SUCCESS);
172 }
173 }
174