| /* |
| * CDDL HEADER START |
| * |
| * The contents of this file are subject to the terms of the |
| * Common Development and Distribution License, Version 1.0 only |
| * (the "License"). You may not use this file except in compliance |
| * with the License. |
| * |
| * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
| * or http://www.opensolaris.org/os/licensing. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * |
| * When distributing Covered Code, include this CDDL HEADER in each |
| * file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
| * If applicable, add the following below this CDDL HEADER, with the |
| * fields enclosed by brackets "[]" replaced with your own identifying |
| * information: Portions Copyright [yyyy] [name of copyright owner] |
| * |
| * CDDL HEADER END |
| */ |
| /* |
| * Copyright 2004 Sun Microsystems, Inc. All rights reserved. |
| * Use is subject to license terms. |
| */ |
| |
| |
| |
| #include "libuutil_common.h" |
| |
| #include <errno.h> |
| #include <libintl.h> |
| #include <stdarg.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <strings.h> |
| |
| #define FACILITY_FMT "%s (%s): " |
| |
| #if !defined(TEXT_DOMAIN) |
| #define TEXT_DOMAIN "SYS_TEST" |
| #endif |
| |
| static const char * |
| strseverity(uu_dprintf_severity_t severity) |
| { |
| switch (severity) { |
| case UU_DPRINTF_SILENT: |
| return (dgettext(TEXT_DOMAIN, "silent")); |
| case UU_DPRINTF_FATAL: |
| return (dgettext(TEXT_DOMAIN, "FATAL")); |
| case UU_DPRINTF_WARNING: |
| return (dgettext(TEXT_DOMAIN, "WARNING")); |
| case UU_DPRINTF_NOTICE: |
| return (dgettext(TEXT_DOMAIN, "note")); |
| case UU_DPRINTF_INFO: |
| return (dgettext(TEXT_DOMAIN, "info")); |
| case UU_DPRINTF_DEBUG: |
| return (dgettext(TEXT_DOMAIN, "debug")); |
| default: |
| return (dgettext(TEXT_DOMAIN, "unspecified")); |
| } |
| } |
| |
| uu_dprintf_t * |
| uu_dprintf_create(const char *name, uu_dprintf_severity_t severity, |
| uint_t flags) |
| { |
| uu_dprintf_t *D; |
| |
| if (name != NULL && |
| uu_check_name(name, UU_NAME_DOMAIN) == -1) { |
| uu_set_error(UU_ERROR_INVALID_ARGUMENT); |
| return (NULL); |
| } |
| |
| if ((D = uu_zalloc(sizeof (uu_dprintf_t))) == NULL) |
| return (NULL); |
| |
| if (name != NULL) { |
| D->uud_name = strdup(name); |
| if (D->uud_name == NULL) { |
| uu_free(D); |
| return (NULL); |
| } |
| } else { |
| D->uud_name = NULL; |
| } |
| |
| D->uud_severity = severity; |
| D->uud_flags = flags; |
| |
| return (D); |
| } |
| |
| /*PRINTFLIKE3*/ |
| void |
| uu_dprintf(uu_dprintf_t *D, uu_dprintf_severity_t severity, |
| const char *format, ...) |
| { |
| va_list alist; |
| |
| /* XXX Assert that severity is not UU_DPRINTF_SILENT. */ |
| |
| if (severity > D->uud_severity) |
| return; |
| |
| (void) fprintf(stderr, FACILITY_FMT, D->uud_name, |
| strseverity(severity)); |
| |
| va_start(alist, format); |
| (void) vfprintf(stderr, format, alist); |
| va_end(alist); |
| } |
| |
| void |
| uu_dprintf_destroy(uu_dprintf_t *D) |
| { |
| if (D->uud_name) |
| free(D->uud_name); |
| |
| uu_free(D); |
| } |
| |
| const char * |
| uu_dprintf_getname(uu_dprintf_t *D) |
| { |
| return (D->uud_name); |
| } |