usr/src/lib/libc/port/gen/fmtmsg.c
author raf
Mon, 10 Apr 2006 12:27:38 -0700
changeset 1778 6357a59054f7
parent 0 68f95e015346
child 1914 8a8c5f225b1b
permissions -rw-r--r--
6404383 select() behaviour changed in Solaris 10, breaking binary compatibility
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * with the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
/*	Copyright (c) 1988 AT&T	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
/*	  All Rights Reserved  	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
 * fmtmsg.c
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
 *  Contains:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
 *	fmtmsg()	Writes a message in standard format.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
 *	addseverity()	Adds a severity definition to the list of known
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
 *			severity definitions.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
 *	Notes:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
 *	  - None of these functions can use strtok().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 * Header Files Referenced:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 *	<stdio.h>		C Standard I/O Definitions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 *	<string.h>		C string handling definitions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 *	<fcntl.h>		UNIX file control definitions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 *	<errno.h>		UNIX error numbers and definitions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 *	<fmtmsg.h>		Global definitions for fmtmsg()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 *	<stdlib.h>		miscellaneous function declarations
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
#pragma weak fmtmsg = _fmtmsg
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
#pragma weak addseverity = _addseverity
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
#include "synonyms.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
#include "mtlib.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
#include "libc.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
#include <stddef.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
#include <stdio.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
#include <string.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
#include <fcntl.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
#include <errno.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
#include <fmtmsg.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
#include <stdlib.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
#include <thread.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
#include <synch.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
#include <alloca.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
 * External functions referenced:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
 *	(Others may be defined in header files above)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
 *	getenv		Extracts data from the environment
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
 *	libc_malloc	Allocates space from main memory
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
 *	libc_free	Frees space allocated via libc_malloc()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
 *	strtol		Convert string to "long"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
 *	clearerr	Clears an error on a stream (this is to make "lint"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
 *			happy)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
 * Local Constant Definitions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
 * Boolean constants
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
 *	TRUE	Boolean value for "true" (any bits on)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
 *	FALSE	Boolean value for "false" (all bits off)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
#ifndef	FALSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
#define	FALSE		(0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
#ifndef TRUE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
#define	TRUE		(1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
#define	MAX_MSG_SIZE	1024
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
 * Keywords for fields named in the MSGVERB environment variable.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
#define	ST_LBL		"label"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
#define	ST_SEV		"severity"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
#define	ST_TXT		"text"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
#define	ST_TAG		"tag"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
#define	ST_ACT		"action"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
 *	The following constants define the value of the "msgverb"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
 *	variable.  This variable tells fmtmsg() which parts of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
 *	standard message it is to display.  If !(msgverb&MV_SET),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
 *	fmtmsg() will interrogate the "MSGVERB" environment variable
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
 *	and set "msgverb" accordingly.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
 *	NOTE:  This means that if MSGVERB changes after the first call
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
 *	       to fmtmsg(), it will be ignored.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
 *	Constants:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
 *		MV_INV	Check MSGVERB environment variable (invalidates value)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
 *		MV_SET	MSGVERB checked, msgverb value valid
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
 *		MV_LBL	"label" selected
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
 *		MV_SEV	"severity" selected
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
 *		MV_TXT	"text" selected
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
 *		MV_TAG	"messageID" selected
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
 *		MV_ACT	"action" selected
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
 *		MV_ALL	All components selected
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
 *		MV_DFLT	Default value for MSGVERB
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
#define	MV_INV		0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
#define	MV_SET		0x0001
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
#define	MV_LBL		0x0002
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
#define	MV_SEV		0x0004
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
#define	MV_TXT		0x0008
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
#define	MV_TAG		0x0010
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
#define	MV_ACT		0x0020
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
#define	MV_ALL		(MV_LBL|MV_SEV|MV_TXT|MV_TAG|MV_ACT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
#define	MV_DFLT		(MV_LBL|MV_SEV|MV_TXT|MV_TAG|MV_ACT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
 * Strings defining the different severities of a message.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
 * Internationalization may demand that these come from the message database
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
#define	SV_UNK		"UNKNOWN"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
#define	SV_HALT		"HALT"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
#define	SV_ERROR	"ERROR"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
#define	SV_WARN		"WARNING"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
#define	SV_INF		"INFO"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
 * Text string if none is provided:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
#define	DEFLT_TEXT	"No text provided with this message"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
 * Text string introduction for "action".  This may have to come from
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
 * the message database because of internationalization.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
#define	ACTINTRO	"TO FIX: "
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
#define	ACTINTROLN	8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
 * SEPSTR is the string that separates the "label" from what follows it,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
 * and the severity from what follows it.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
#define	SEPSTR		": "
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
#define	SEPSTRLN	2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
 * Miscellaneous constants:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
 *	CONNAME		Filesystem entry name for the system console
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
#define	CONNAME		"/dev/console"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
 * Local data type definitions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
 * Severity string structure
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
 *	struct sevstr
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
 *		sevvalue	Value of the severity-level being defined
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
 *		sevkywd		Keyword identifying the severity
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
 *		sevprptr	Pointer to the string associated with the value
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
 *		sevnext		Pointer to the next value in the list.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
 *	Restrictions:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
 *		sevvalue	Must be a non-negative integer (>=0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
 *	There are three (possibly null) lists of these structures.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
 *	  1)	is the list of standard severities
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
 *	  2)	is the list of severity-levels defined by SEV_LEVEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
 *	  3)	is the list of severity-levels defined by calls to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
 *		addseverity()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
struct sevstr {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
	int		sevvalue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
	const char	*sevkywd;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
	const char	*sevprstr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
	struct sevstr  *sevnext;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
 * Local Static Data
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
 *	msgverb		int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
 *			Contains the internal representation or the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
 *			MSGVERB environment variable.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
 *	sevlook		TRUE if fmtmsg() has to look at SEV_LEVEL the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
 *			next time it is called.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
 *	paugsevs	struct sevstr *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
 *			Head of the linked list of structures that define
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
 *			severities that augment the standard severities,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
 *			as defined by addseverity().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
 *	penvsevs	struct sevstrs *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
 *			Head of the linked list of structures that define
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
 *			severities that augment the standard severities,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
 *			as defined by SEV_LEVEL.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
 *	pstdsevs	struct sevstrs *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
 *			Head of the linked list of structures that define
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
 *			the standard severities.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
static mutex_t fmt_lock = DEFAULTMUTEX;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
static	int		msgverb		= 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
static	int		sevlook		= TRUE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
static	struct sevstr  *paugsevs	= (struct sevstr *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
static	struct sevstr  *penvsevs	= (struct sevstr *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
static	struct sevstr	sevstrs[]	= {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
	{ MM_HALT,	"", SV_HALT,	&sevstrs[1]},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
	{ MM_ERROR,    "", SV_ERROR,	&sevstrs[2]},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
	{ MM_WARNING,  "", SV_WARN, 	&sevstrs[3]},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
	{ MM_INFO,	"", SV_INF,  	(struct sevstr *)NULL},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
static	struct sevstr  *pstdsevs	= &sevstrs[0];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
 * static char *exttok(str, delims)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
 *	const char   *str
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
 *	const char   *delims
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
 *	This function examines the string pointed to by "str", looking
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
 *	for the first occurrence of any of the characters in the string
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
 *	whose address is "delims".  It returns the address of that
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
 *	character or (char *)NULL if there was nothing to search.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
 * Arguments:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
 *	str	Address of the string to search
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
 *	delims	Address of the string containing delimiters
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
 * Returns:  char *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
 *	Returns the address of the first occurrence of any of the characters
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
 *	in "delim" in the string "str" (incl '\0').  If there was nothing
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
 *	to search, the function returns (char *)NULL.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
 * Notes:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
 *    - This function is needed because strtok() can't be used inside a
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
 *	function.  Besides, strtok() is destructive in the string, which
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
 *	is undesirable in many circumstances.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
 *    - This function understands escaped delimiters as non-delimiters.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
 *	Delimiters are escaped by preceding them with '\' characters.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
 *	The '\' character also must be escaped.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
static char *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
exttok(const char *tok, const char *delims)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
	char	*tokend;	/* Ptr to the end of the token */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	char	*p, *q;		/* Temp pointers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
	 * Algorithm:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
	 *    1.  Get the starting address(new string or where we
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
	 *	  left off).  If nothing to search, return(char *)NULL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
	 *    2.  Find the end of the string
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
	 *    3.  Look for the first unescaped delimiter closest to the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
	 *	  beginning of the string
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
	 *    4.  Remember where we left off
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
	 *    5.  Return a pointer to the delimiter we found
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
	/* Begin at the beginning, if any */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
	if (tok == (char *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
		return ((char *)NULL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
	/* Find end of the token string */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
	tokend = (char *)tok + (ptrdiff_t)strlen(tok);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
	/* Look for the 1st occurrence of any delimiter */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
	for (p = (char *)delims; *p != '\0'; p++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
		for (q = strchr(tok, (int)*p);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
		    (q != 0) && (q != tok) && (*(q - (ptrdiff_t)1) == '\\');
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
		    q = strchr(q + (ptrdiff_t)1, (int)*p))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
			;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
		if ((q != 0) && (q < tokend))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
			tokend = q;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
	/* Done */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
	return (tokend);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
 * char *noesc(str)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
 *	This function squeezes out all of the escaped character sequences
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
 *	from the string <str>.  It returns a pointer to that string.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
 *  Arguments:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
 *	str	char *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
 *		The string that is to have its escaped characters removed.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
 *  Returns:  char *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
 *	This function returns its argument <str> always.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
 *  Notes:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
 *	This function potentially modifies the string it is given.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
static char *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
noesc(char *str)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
	char   *p;		/* Temp string pointer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
	char   *q;		/* Temp string pointer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
	/* Look for an escaped character */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
	p = str;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
	while (*p && (*p != '\\')) p++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
	 * If there was at least one, squeeze them out
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
	 * Otherwise, don't touch the argument string
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
	if (*p) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
		q = p++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
		while (*q++ = *p++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
			if (*p == '\\')
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
				p++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
	/* Finished.  Return our argument */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
	return (str);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
 * struct sevstr *getauxsevs(ptr)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
 *	Parses a string that is in the format of the severity definitions.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
 *	Returns a pointer to a (malloc'd) structure that contains the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
 *	definition, or (struct sevstr *)NULL if none was parsed.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
 * Arguments:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
 *	ptr	char *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
 *		References the string from which data is to be extracted.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
 *		If (char *)NULL, continue where we left off.  Otherwise,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
 *		start with the string referenced by ptr.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
 * Returns: struct sevstr *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
 *	A pointer to a malloc'd structure containing the severity definition
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
 *	parsed from string, or (struct sevstr *)NULL if none.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
 * Notes:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
 *    - This function is destructive to the string referenced by its argument.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
/* Static data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
static	char		*leftoff = (char *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
static	struct sevstr *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
getauxsevs(char *ptr)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
	char		*current;	/* Ptr to current sev def'n */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
	char		*tokend;	/* Ptr to end of current sev def'n */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
	char		*kywd;		/* Ptr to extracted kywd */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
	char		*valstr;		/* Ptr to extracted sev value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
	char		*prstr;		/* Ptr to extracted print str */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
	char		*p;		/* Temp pointer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
	int		val;		/* Converted severity value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
	int		done;		/* Flag, sev def'n found and ok? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
	struct sevstr  *rtnval;		/* Value to return */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
	/* Start anew or start where we left off? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
	current = (ptr == (char *)NULL) ? leftoff : ptr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
	/* If nothing to parse, return (char *)NULL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
	if (current == (char *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
		return ((struct sevstr *)NULL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
	 * Look through the string "current" for a token of the form
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
	 * <kywd>,<sev>,<printstring> delimited by ':' or '\0'
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
	/* Loop initializations */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
	done = FALSE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
	rtnval = (struct sevstr *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
	while (!done) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
		/* Eat leading junk */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
		while (*(tokend = exttok(current, ":,")) == ':') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
			current = tokend + (ptrdiff_t)1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   435
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
		/* If we've found a <kywd>,... */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
		if (*tokend == ',') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
			kywd = current;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
			*tokend = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
			/* Look for <kywd>,<sev>,... */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
			current = tokend + (ptrdiff_t)1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
			if (*(tokend = exttok(current, ":,")) == ',') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
				valstr = current;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   445
				*tokend = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   446
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   447
				current = tokend + (ptrdiff_t)1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
				prstr = current;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
				/* Make sure <sev> > 4 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
				val = (int)strtol(noesc(valstr), &p, 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
				if ((val > 4) && (p == tokend)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
					/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   455
					 * Found <kywd>,<sev>,<printstring>.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   456
					 * remember where we left off
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
					 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
					if (*(tokend =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
						exttok(current, ":")) == ':') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
						*tokend = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
						leftoff = tokend +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
						    (ptrdiff_t)1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
					} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
						leftoff = (char *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
					}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   468
					/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   469
					 * Alloc structure to contain
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
					 * severity definition
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
					 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
					rtnval = libc_malloc(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
					    sizeof (struct sevstr));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   474
					if (rtnval != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   475
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   476
						/* Fill in structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   477
						rtnval->sevkywd = noesc(kywd);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   478
						rtnval->sevvalue = val;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
						rtnval->sevprstr = noesc(prstr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
						rtnval->sevnext =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
						    (struct sevstr *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
					}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
					done = TRUE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
				} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   485
					/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   486
					 * Invalid severity value,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   487
					 * eat thru end of token
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   488
					 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   489
					current = tokend;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   490
					if (*(tokend = exttok(prstr, ":")) ==
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   491
					    ':') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   492
						current++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   493
					}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   494
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   495
			} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   496
				/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   497
				 * Invalid severity definition,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   498
				 * eat thru end of token
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   499
				 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   500
				current = tokend;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   501
				if (*tokend == ':')
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   502
					current++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   503
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   504
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   505
			/* End of string found */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   506
			done = TRUE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   507
			leftoff = (char *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   508
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   509
	} /* while (!done) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   510
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   511
	/* Finished */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   512
	return (rtnval);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   513
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   514
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   515
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   516
 * void msgverbset()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   517
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   518
 *	Parces the argument of the MSGVERB environment variable and places
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   519
 *	a representation of the value of that value in "msgverb"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   520
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   521
 * Arguments:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   522
 *	None:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   523
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   524
 * Returns: void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   525
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   526
 * Notes:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   527
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   528
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   529
static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   530
msgverbset(void)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   531
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   532
	char   *opts;			/* Pointer to MSGVERB's value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   533
	char   *alloced;		/* Pointer to MSGVERB's value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   534
	char   *tok;			/* Pointer to current token */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   535
	char   *tokend;			/* Pointer to end of current token */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   536
	char   *nexttok;		/* Pointer to next token */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   537
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   538
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   539
	/* Rid ourselves of junk in "msgverb" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   540
	msgverb = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   541
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   542
	/* Get the value of MSGVERB.  If none, use default value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   543
	if ((opts = getenv(MSGVERB)) == (char *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   544
		msgverb = MV_DFLT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   545
	} else { /* MSGVERB has a value.  Interpret it */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   546
		if ((alloced = libc_malloc(strlen(opts) + 1)) == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   547
			msgverb = MV_DFLT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   548
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   549
			/* Make a copy of the value of MSGVERB */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   550
			nexttok = strcpy(alloced, opts);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   551
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   552
			/* Parse the options given by the user */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   553
			while ((tok = nexttok) != (char *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   554
				/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   555
				 * Find end of the next token and squeeze
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   556
				 * out escaped characters
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   557
				 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   558
				tokend = exttok(tok, ":");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   559
				tok = noesc(tok);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   560
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   561
				/* Delimit token and mark next, if any */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   562
				if (*tokend == ':') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   563
					nexttok = tokend + (ptrdiff_t)1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   564
					*tokend = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   565
				} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   566
					nexttok = (char *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   567
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   568
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   569
				/* Check for "text" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   570
				if (strcmp(tok, ST_TXT) == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   571
					msgverb |= MV_TXT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   572
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   573
					/* Check for "label" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   574
				} else if (strcmp(tok, ST_LBL) == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   575
					msgverb |= MV_LBL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   576
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   577
					/* Check for "action */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   578
				} else if (strcmp(tok, ST_ACT) == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   579
					msgverb |= MV_ACT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   580
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   581
					/* Check for "severity" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   582
				} else if (strcmp(tok, ST_SEV) == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   583
					msgverb |= MV_SEV;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   584
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   585
					/* Check for "tag" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   586
				} else if (strcmp(tok, ST_TAG) == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   587
					msgverb |= MV_TAG;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   588
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   589
					/* Unknown, ignore MSGVERB value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   590
				} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   591
					msgverb = MV_DFLT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   592
					nexttok = (char *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   593
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   594
			} /* do while */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   595
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   596
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   597
			 * Use default if no keywords on MSGVERB
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   598
			 * environment variable
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   599
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   600
			if (msgverb == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   601
				msgverb = MV_DFLT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   602
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   603
			/* Free allocated space */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   604
			libc_free(alloced);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   605
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   606
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   607
	/* Finished */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   608
	/* return; */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   609
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   610
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   611
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   612
 * void sevstrset()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   613
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   614
 *	This function builds a structure containing auxillary severity
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   615
 *	definitions.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   616
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   617
 *  Arguments:  None
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   618
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   619
 *  Returns:  Void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   620
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   621
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   622
static char *sevspace = (char *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   623
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   624
static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   625
sevstrset(void)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   626
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   627
	struct sevstr  *plast;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   628
	struct sevstr  *psev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   629
	char		*value;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   630
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   631
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   632
	/* Look for SEV_LEVEL definition */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   633
	if ((value = getenv(SEV_LEVEL)) != (char *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   634
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   635
		/* Allocate space and make a copy of the value of SEV_LEVEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   636
		if ((sevspace = libc_malloc(strlen(value) + 1)) != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   637
			(void) strcpy(sevspace, value);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   638
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   639
			/* Continue for all severity descriptions */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   640
			psev = getauxsevs(sevspace);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   641
			plast = (struct sevstr *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   642
			if (psev != (struct sevstr *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   643
				penvsevs = psev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   644
				plast = psev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   645
				while (psev = getauxsevs((char *)NULL)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   646
					plast->sevnext = psev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   647
					plast = psev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   648
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   649
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   650
		} /* if sevspace != (char *)NULL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   651
	} /* if value != (char *)NULL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   652
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   653
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   654
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   655
 * int addseverity(value, string)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   656
 *	int	value		Value of the severity
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   657
 *	const char   *string	Print-string for the severity
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   658
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   659
 *  Arguments:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   660
 *	value		int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   661
 *			The integer value of the severity being added
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   662
 *	string		char *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   663
 *			A pointer to the character-string to be printed
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   664
 *			whenever a severity of "value" is printed
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   665
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   666
 *  Returns:  int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   667
 *	Zero if successful, -1 if failed. The function can fail under
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   668
 *	the following circumstances:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   669
 *	  - libc_malloc() fails
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   670
 *	  - The "value" is one of the reserved values.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   671
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   672
 *	This function permits C applications to define severity-levels
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   673
 *	that augment the standard levels and those defined by the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   674
 *	SEV_LEVEL environment variable.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   675
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   676
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   677
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   678
addseverity(int value, const char *string)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   679
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   680
	struct sevstr  *p;		/* Temp ptr to severity structs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   681
	struct sevstr  *q;		/* Temp ptr(follower) to severity */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   682
	int		found;		/* FLAG, element found in the list */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   683
	int		rtnval;		/* Value to return to the caller */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   684
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   685
	/* Make sure we're not trying to redefine one of the reserved values */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   686
	if (value <= 4) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   687
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   688
		return (-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   689
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   690
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   691
	lmutex_lock(&fmt_lock);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   692
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   693
	/* Make sure we've interpreted SEV_LEVEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   694
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   695
	if (sevlook) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   696
		sevstrset();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   697
		sevlook = FALSE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   698
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   699
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   700
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   701
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   702
	 * Leaf through the list.  We may be redefining or removing a
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   703
	 * definition
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   704
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   705
	q = (struct sevstr *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   706
	found = FALSE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   707
	for (p = paugsevs; !found && (p != (struct sevstr *)NULL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   708
	    p = p->sevnext) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   709
		if (p->sevvalue == value) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   710
			/* We've a match.  Remove or modify the entry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   711
			if (string == (char *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   712
				if (q == (struct sevstr *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   713
					paugsevs = p->sevnext;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   714
				} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   715
					q->sevnext = p->sevnext;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   716
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   717
				libc_free(p);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   718
			} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   719
				p->sevprstr = string;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   720
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   721
			found = TRUE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   722
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   723
		q = p;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   724
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   725
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   726
	/* Adding a definition */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   727
	if (!found && (string != (char *)NULL)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   728
		/* Allocate space for the severity structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   729
		if ((p = libc_malloc(sizeof (struct sevstr))) == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   730
			lmutex_unlock(&fmt_lock);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   731
			return (-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   732
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   733
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   734
		/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   735
		 * Fill in the new structure with the data supplied and add to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   736
		 * the head of the augmented severity list.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   737
		 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   738
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   739
		p->sevkywd = (char *)NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   740
		p->sevprstr = string;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   741
		p->sevvalue = value;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   742
		p->sevnext = paugsevs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   743
		paugsevs = p;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   744
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   745
		/* Successfully added a new severity */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   746
		rtnval = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   747
	} else if (string == (char *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   748
		/* Attempting to undefined a non-defined severity */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   749
		rtnval = -1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   750
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   751
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   752
		/* Successfully redefined a severity */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   753
		rtnval = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   754
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   755
	/* Finished, successful */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   756
	lmutex_unlock(&fmt_lock);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   757
	return (rtnval);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   758
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   759
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   760
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   761
 * Utility function for converting an integer to a string, avoiding stdio.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   762
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   763
static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   764
itoa(int n, char *s)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   765
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   766
	char buf[12];		/* 32 bits fits in 10 decimal digits */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   767
	char *cp = buf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   768
	uint_t un = (n < 0)? -n : n;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   769
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   770
	do {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   771
		*cp++ = "0123456789"[un % 10];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   772
		un /= 10;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   773
	} while (un);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   774
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   775
	if (n < 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   776
		*s++ = '-';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   777
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   778
	do {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   779
		*s++ = *--cp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   780
	} while (cp > buf);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   781
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   782
	*s = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   783
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   784
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   785
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   786
 * void writemsg(buf, size, verbosity, label, severity, text, action, tag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   787
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   788
 * Arguments:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   789
 *	char	*buf		The buffer in which to format the message
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   790
 *	size_t	size		The size of the buffer
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   791
 * 	int	verbosity	A bit-string that indicates which components
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   792
 *				are to be written
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   793
 * 	const char   *label	The address of the label-component
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   794
 * 	int	severity	The severity value of the message
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   795
 * 	const char   *text	The address of the text-component
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   796
 * 	const char   *action	The address of the action-component
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   797
 * 	const char   *tag	The address of the tag-component
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   798
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   799
 *	This function formats the message consisting of the label-component,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   800
 *	severity-component, text-component, action-component, and tag-
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   801
 *	component into the provided buffer.  The "verbosity" argument
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   802
 *	tells which components can be selected.  Any or all of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   803
 *	components can be their null-values.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   804
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   805
 * Returns:  void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   806
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   807
 * Notes:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   808
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   809
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   810
static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   811
writemsg(char *buf, size_t size,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   812
	int verbosity, const char *label, int severity,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   813
	const char *text, const char *action, const char *tag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   814
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   815
	struct sevstr  *psev;		/* Ptr for severity str list */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   816
	char		*p;		/* General purpose pointer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   817
	char		*sevpstr = NULL;  /* Pointer to severity string */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   818
	int		l1indent;	/* # chars to indent line 1 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   819
	int		l2indent;	/* # chars to indent line 2 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   820
	int		textindent;	/* # spaces to indent text */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   821
	int		actindent = 0;	/* # spaces to indent action */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   822
	int		i;		/* General purpose counter */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   823
	int		dolabel;	/* TRUE if label to be written */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   824
	int		dotext;		/* TRUE if text to be written */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   825
	int		dosev;		/* TRUE if severity to be written */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   826
	int		doaction;	/* TRUE if action to be written */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   827
	int		dotag;		/* TRUE if tag to be written */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   828
	char		c;		/* Temp, multiuse character */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   829
	char		sevpstrbuf[15];	/* Space for SV=%d */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   830
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   831
	char		lcllbl[MM_MXLABELLN+1];	/* Space for (possibly */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   832
						/* truncated) label */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   833
	char		lcltag[MM_MXTAGLN+1];	/* Space for (possibly */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   834
						/* truncated) tag */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   835
	char		*ebuf = buf + size - 2;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   836
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   837
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   838
	 * initialize variables.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   839
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   840
	sevpstrbuf[0] = (char)0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   841
	lcllbl[0] = (char)0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   842
	lcltag[0] = (char)0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   843
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   844
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   845
	 * Figure out what fields are to be written (all are optional)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   846
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   847
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   848
	dolabel  = (verbosity & MV_LBL) && (label != MM_NULLLBL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   849
	dosev    = (verbosity & MV_SEV) && (severity != MM_NULLSEV);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   850
	dotext   = (verbosity & MV_TXT) && (text != MM_NULLTXT);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   851
	doaction = (verbosity & MV_ACT) && (action != MM_NULLACT);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   852
	dotag    = (verbosity & MV_TAG) && (tag != MM_NULLTAG);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   853
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   854
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   855
	 * Figure out how much we'll need to indent the text of the message
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   856
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   857
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   858
	/* Count the label of the message, if requested */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   859
	textindent = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   860
	if (dolabel) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   861
		(void) strncpy(lcllbl, label, (size_t)MM_MXLABELLN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   862
		lcllbl[MM_MXLABELLN] = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   863
		textindent = (int)strlen(lcllbl) + SEPSTRLN;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   864
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   865
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   866
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   867
	 * If severity req'd, determine the severity string and factor
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   868
	 * into indent count.  Severity string generated by:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   869
	 *	1.  Search the standard list of severities.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   870
	 *	2.  Search the severities added by the application.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   871
	 *	3.  Search the severities added by the environment.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   872
	 *	4.  Use the default (SV=n where n is the value of the severity).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   873
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   874
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   875
	if (dosev) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   876
		/* Search the default severity definitions */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   877
		psev = pstdsevs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   878
		while (psev != (struct sevstr *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   879
			if (psev->sevvalue == severity)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   880
				break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   881
			psev = psev->sevnext;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   882
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   883
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   884
		if (psev == (struct sevstr *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   885
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   886
			 * Search the severity definitions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   887
			 * added by the application
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   888
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   889
			psev = paugsevs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   890
			while (psev != (struct sevstr *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   891
				if (psev->sevvalue == severity)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   892
					break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   893
				psev = psev->sevnext;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   894
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   895
			if (psev == (struct sevstr *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   896
				/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   897
				 * Search the severity definitions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   898
				 * added by the environment
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   899
				 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   900
				psev = penvsevs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   901
				while (psev != (struct sevstr *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   902
					if (psev->sevvalue == severity)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   903
						break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   904
					psev = psev->sevnext;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   905
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   906
				if (psev == (struct sevstr *)NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   907
					/* Use default string, SV=severity */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   908
					(void) strcpy(sevpstrbuf, "SV=");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   909
					itoa(severity, &sevpstrbuf[3]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   910
					sevpstr = sevpstrbuf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   911
				} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   912
					sevpstr = (char *)psev->sevprstr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   913
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   914
			} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   915
				sevpstr = (char *)psev->sevprstr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   916
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   917
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   918
			sevpstr = (char *)psev->sevprstr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   919
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   920
		/* Factor into indent counts */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   921
		textindent += (int)strlen(sevpstr) + SEPSTRLN;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   922
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   923
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   924
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   925
	 * Figure out the indents.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   926
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   927
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   928
	if (doaction && dotext) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   929
		if (textindent > ACTINTROLN) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   930
			l1indent = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   931
			l2indent = textindent - ACTINTROLN;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   932
			actindent = textindent;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   933
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   934
			l2indent = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   935
			actindent = ACTINTROLN;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   936
			if (dosev || dolabel) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   937
				l1indent = ACTINTROLN - textindent;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   938
				textindent = ACTINTROLN;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   939
			} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   940
				textindent = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   941
				l1indent = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   942
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   943
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   944
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   945
		l1indent = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   946
		l2indent = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   947
		if (doaction) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   948
			actindent = textindent + ACTINTROLN;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   949
		} else if (dotext) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   950
			actindent = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   951
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   952
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   953
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   954
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   955
	 * Write the message.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   956
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   957
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   958
	/* Write the LABEL, if requested */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   959
	if (dolabel) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   960
		/* Write spaces to align on the ':' char, if needed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   961
		while (--l1indent >= 0 && buf < ebuf)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   962
			*buf++ = ' ';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   963
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   964
		/* Write the label */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   965
		buf += strlcpy(buf, lcllbl, ebuf - buf);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   966
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   967
		/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   968
		 * Write the separator string
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   969
		 * (if another component is to follow)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   970
		 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   971
		if (dosev || dotext || doaction || dotag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   972
			buf += strlcpy(buf, SEPSTR, ebuf - buf);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   973
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   974
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   975
	/* Write the SEVERITY, if requested */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   976
	if (dosev) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   977
		/* Write spaces to align on the ':' char, if needed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   978
		while (--l1indent >= 0 && buf < ebuf)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   979
			*buf++ = ' ';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   980
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   981
		/* Write the severity print-string */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   982
		buf += strlcpy(buf, sevpstr, ebuf - buf);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   983
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   984
		/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   985
		 * Write the separator string
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   986
		 * (if another component is to follow)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   987
		 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   988
		if (dotext || doaction || dotag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   989
			buf += strlcpy(buf, SEPSTR, ebuf - buf);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   990
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   991
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   992
	/* Write the TEXT, if requested */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   993
	if (dotext) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   994
		p = (char *)text;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   995
		for (c = *p++; c != NULL && buf < ebuf; c = *p++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   996
			*buf++ = c;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   997
			if (c == '\n') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   998
				for (i = 0; i < textindent && buf < ebuf; i++)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   999
					*buf++ = ' ';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1000
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1001
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1002
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1003
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1004
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1005
	 * Write ACTION if requested.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1006
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1007
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1008
	if (doaction) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1009
		if (dotext && buf < ebuf) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1010
			*buf++ = '\n';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1011
			while (--l2indent >= 0 && buf < ebuf)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1012
				*buf++ = ' ';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1013
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1014
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1015
		/* Write the action-string's introduction */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1016
		buf += strlcpy(buf, ACTINTRO, ebuf - buf);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1017
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1018
		/* Write the "action" string */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1019
		p = (char *)action;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1020
		for (c = *p++; c != NULL && buf < ebuf; c = *p++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1021
			*buf++ = c;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1022
			if (c == '\n') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1023
				for (i = 0; i < actindent && buf < ebuf; i++)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1024
					*buf++ = ' ';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1025
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1026
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1027
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1028
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1029
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1030
	 * Write the TAG if requested
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1031
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1032
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1033
	if (dotag) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1034
		if (doaction)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1035
			buf += strlcpy(buf, "  ", ebuf - buf);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1036
		else if (dotext && buf < ebuf)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1037
			*buf++ = '\n';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1038
		(void) strncpy(lcltag, tag, (size_t)MM_MXTAGLN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1039
		lcltag[MM_MXTAGLN] = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1040
		buf += strlcpy(buf, lcltag, ebuf - buf);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1041
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1042
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1043
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1044
	 * Write terminating newline and null byte.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1045
	 * We reserved space for these at the start.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1046
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1047
	*buf++ = '\n';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1048
	*buf++ = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1049
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1050
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1051
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1052
 * int	fmtmsg(class, label, severity, text, action, tag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1053
 *	long	class
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1054
 *	const char   *label
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1055
 *	int	severity
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1056
 *	const char   *text
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1057
 *	const char   *action
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1058
 *	const char   *tag
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1059
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1060
 *	If requested, the fmtmsg() function writes a message to the standard
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1061
 *      error stream in the standard message format.  Also if requested, it
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1062
 *	will write a message to the system console.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1063
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1064
 *	Arguments:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1065
 *	    class	Fields which classify the message for the system
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1066
 *			logging facility
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1067
 *	    label	A character-string that is printed as the "label"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1068
 *			of the message.  Typically identifies the source
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1069
 *			of the message
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1070
 *	    severity	Identifies the severity of the message.  Either one
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1071
 *			of the standard severities, or possibly one of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1072
 *			augmented severities
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1073
 *	    text	Pointer to the text of the message
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1074
 *	    action	Pointer to a char string that describes some type
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1075
 *			of corrective action.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1076
 *	    tag		A character-string that is printed as the "tag" or
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1077
 *			the message.  Typically a pointer to documentation
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1078
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1079
 *	Returns:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1080
 *	    -1 if nothing was generated, 0 if everything requested was
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1081
 *	    generated, or flags if partially generated.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1082
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1083
 *	Needs:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1084
 *	  - Nothing special for 4.0.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1085
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1086
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1087
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1088
fmtmsg(long class, const char *label, int severity,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1089
const char *text, const char *action, const char *tag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1090
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1091
	int	rtnval;		/* Value to return */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1092
	FILE	*console;	/* Ptr to "console" stream */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1093
	char	*message1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1094
	char	*message2;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1095
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1096
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1097
	 * Determine the "verbosity" of the message.  If "msgverb" is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1098
	 * already set, don't interrogate the "MSGVERB" environment vbl.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1099
	 * If so, interrogate "MSGVERB" and do initialization stuff also.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1100
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1101
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1102
	lmutex_lock(&fmt_lock);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1103
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1104
	if (!(msgverb & MV_SET)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1105
		msgverbset();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1106
		msgverb |= MV_SET;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1107
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1108
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1109
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1110
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1111
	 * Extract the severity definitions from the SEV_LEVEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1112
	 * environment variable and save away for later.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1113
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1114
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1115
	if (sevlook) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1116
		sevstrset();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1117
		sevlook = FALSE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1118
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1119
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1120
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1121
	/* Set up the default text component [if text==(char *)NULL] */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1122
	if (text == (char *)NULL)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1123
		text = DEFLT_TEXT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1124
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1125
	/* Prepare the message for stderr if requested */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1126
	if (class & MM_PRINT) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1127
		message1 = alloca(MAX_MSG_SIZE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1128
		writemsg(message1, MAX_MSG_SIZE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1129
		    msgverb, label, severity, text, action, tag);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1130
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1131
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1132
	/* Prepare the message for the console if requested */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1133
	if (class & MM_CONSOLE) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1134
		message2 = alloca(MAX_MSG_SIZE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1135
		writemsg(message2, MAX_MSG_SIZE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1136
		    MV_ALL, label, severity, text, action, tag);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1137
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1138
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1139
	lmutex_unlock(&fmt_lock);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1140
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1141
	rtnval = MM_OK;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1142
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1143
	/* Write the message to stderr if requested */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1144
	if (class & MM_PRINT) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1145
		clearerr(stderr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1146
		(void) fputs(message1, stderr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1147
		if (ferror(stderr))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1148
			rtnval |= MM_NOMSG;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1149
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1150
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1151
	/* Write the message to the console if requested */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1152
	if (class & MM_CONSOLE) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1153
		if ((console = fopen(CONNAME, "w")) != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1154
			clearerr(console);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1155
			(void) fputs(message2, console);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1156
			if (ferror(console))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1157
				rtnval |= MM_NOCON;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1158
			(void) fclose(console);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1159
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1160
			rtnval |= MM_NOCON;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1161
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1162
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1163
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1164
	if ((rtnval & (MM_NOCON | MM_NOMSG)) == (MM_NOCON | MM_NOMSG))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1165
		rtnval = MM_NOTOK;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1166
	return (rtnval);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
  1167
}