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 /* 23 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef __CONV_DOT_H 28 #define __CONV_DOT_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 /* 33 * Local include file for conversion library. 34 */ 35 #include <conv.h> 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 /* 42 * Some format strings differ depending on whether they are used for 32-bit 43 * or 64-bit values. 44 */ 45 #if defined(_ELF64) 46 #define MSG_GBL_FMT_DEC MSG_GBL_FMT_DEC_64 47 #define MSG_GBL_FMT_DECS MSG_GBL_FMT_DECS_64 48 #define MSG_GBL_FMT_HEX MSG_GBL_FMT_HEX_64 49 #define MSG_GBL_FMT_HEXS MSG_GBL_FMT_HEXS_64 50 51 #define MSG_SYM_FMT_VAL MSG_SYM_FMT_VAL_64 52 #else 53 #define MSG_GBL_FMT_DEC MSG_GBL_FMT_DEC_32 54 #define MSG_GBL_FMT_DECS MSG_GBL_FMT_DECS_32 55 #define MSG_GBL_FMT_HEX MSG_GBL_FMT_HEX_32 56 #define MSG_GBL_FMT_HEXS MSG_GBL_FMT_HEXS_32 57 58 #define MSG_SYM_FMT_VAL MSG_SYM_FMT_VAL_32 59 #endif 60 61 62 63 /* 64 * Map an integer into a descriptive string. 65 * 66 * entry: 67 * buf - A buffer into which this routine can format 68 * a result string, if necessary. 69 * bufsize - sizeof(buf) 70 * val - The value for which a string is desired. 71 * flags - CONV_FMT_* values to be passed to conv_invalid_val() if 72 * necessary. The caller is reponsible for having examined 73 * the CONV_FMT_ALT_* part of flags and passing the proper 74 * msg array. 75 * num_msg - # of Msg entries in msg. 76 * msg - Array of num_msg Msg items corresponding to the possible 77 * strings corresponding to val. 78 * 79 * exit: 80 * If val lies in the range [0-(num_msg-1)], then the string 81 * corresponding to it is returned. If val is outside the range, 82 * conv_invalid_val() is called to format an ASCII representation 83 * of it into string, and that is returned. 84 * 85 * note: 86 * Ideally, this would be a function defined in globals.c. 87 * However, it uses the MSG_ORIG macro, which uses an array 88 * that is local to each module. Hence, this is a static function, 89 * defined by this macro. Once defined by a module, the routine 90 * is called normally. 91 */ 92 #define DEFINE_conv_map2str \ 93 static \ 94 const char * \ 95 conv_map2str(Conv_inv_buf_t *inv_buf, int val, Conv_fmt_flags_t flags, \ 96 int num_msg, const Msg *msg) \ 97 { \ 98 if ((val >= 0) && (val < num_msg)) \ 99 return (MSG_ORIG(msg[val])); \ 100 \ 101 /* If we get here, it's an unknown value */ \ 102 return (conv_invalid_val(inv_buf, val, flags)); \ 103 } 104 105 /* # of elements in an array */ 106 #define ARRAY_NELTS(arr) (sizeof (arr) / sizeof (*arr)) 107 108 109 110 #ifdef __cplusplus 111 } 112 #endif 113 114 #endif /* __CONV_DOT_H */ 115