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 (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 27 #include <sys/types.h> 28 #include <stdio.h> 29 #include <errno.h> 30 #include <libintl.h> 31 #include <locale.h> 32 #include <stdlib.h> 33 #include <stdarg.h> 34 35 #include <sys/nsctl/rdcerr.h> 36 #include <sys/nsctl/cfg.h> 37 38 #include <sys/unistat/spcs_dtrinkets.h> 39 #include <sys/unistat/spcs_etrinkets.h> 40 #include <sys/unistat/spcs_s.h> 41 #include <sys/unistat/spcs_s_u.h> 42 #include <sys/unistat/spcs_s_impl.h> 43 #include <sys/unistat/spcs_errors.h> 44 45 46 int rdc_severity; 47 char *rdc_error_str; 48 char err[RDC_ERR_SIZE]; 49 50 void 51 rdc_set_error(spcs_s_info_t *ustatus, int context, int severity, 52 char *errorstr, ...) 53 { 54 char msg[1024]; 55 va_list ap; 56 57 bzero(err, RDC_ERR_SIZE); 58 switch (context) { 59 case RDC_INTERNAL: 60 rdc_severity = severity; 61 if (errorstr) { 62 va_start(ap, errorstr); 63 vsprintf(err, errorstr, ap); 64 va_end(ap); 65 } 66 rdc_error_str = dgettext("librdc", err ? err : ""); 67 break; 68 69 case RDC_OS: 70 rdc_severity = severity ? severity : RDC_FATAL; 71 rdc_error_str = strerror(errno); 72 break; 73 74 case RDC_SPCS: 75 rdc_severity = severity ? severity : RDC_FATAL; 76 rdc_error_str = spcs_s_string(*ustatus, msg); 77 break; 78 79 case RDC_DSCFG: 80 rdc_error_str = cfg_error(&rdc_severity); 81 break; 82 83 default: 84 break; 85 } 86 87 spcs_log("librdc", NULL, dgettext("librdc", "%s"), 88 rdc_error_str ? rdc_error_str : ""); 89 90 } 91 92 char * 93 rdc_error(int *severity) 94 { 95 if (severity != NULL) 96 *severity = rdc_severity; 97 return (rdc_error_str ? rdc_error_str : ""); 98 }