OpenSolaris_b135/cmd/svr4pkg/libinst/qreason.c

Compare this file to the similar file:
Show the results in this format:

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (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.
 */

/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */


/*
 * System includes
 */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <locale.h>
#include <libintl.h>

/*
 * local pkg command library includes
 */

#include "libinst.h"
#include "messages.h"

/*
 * forward declarations
 */

static char	*qreasonNoZonename(int caller, int retcode, int started);
static char	*qreasonWithZonename(int caller, int retcode, int started);

/*
 * *****************************************************************************
 * global external (public) functions
 * *****************************************************************************
 */

/*
 * Name:	qreason
 * Description:	return message describing specified "quit reason"
 * Arguments:	caller - integer describing the "caller:
 *			Caller identities:
 *			0 - pkginstall - pkgask
 *			1 - pkginstall - pkgadd
 *			2 - pkginstall - mailmsg
 *			3 - pkgremove - quitmsg
 *			4 - pkgremove - mailmsg
 *		retcode - integer return code describing "reason"
 *		includeZonename - integer describing zone for reason
 *			== 0 - do not include a zone name in the message
 *			!= 0 - include a zone name in the message
 * Returns:	char *
 * NOTE:	all messages are returned from static space that does not need
 *		to be free()ed when no longer needed
 * NOTE:	imbedded "%s"s in returned messages are consistent with the
 *		caller and zone name inclusion:
 *			0 - no %s's
 *			1 - one %s - package name
 *			2 - three %s - package name, rootpath, package instance
 *			3 - one %s - package name
 *			4 - two %s - package name, rootpath
 *		If "includeZonename" is true, an extra "%s" is added at the
 *		end of each message for the zone name to be included.
 */

char *
qreason(int caller, int retcode, int started, int includeZonename)
{
	if (includeZonename == 0) {
		return (qreasonNoZonename(caller, retcode, started));
	}

	return (qreasonWithZonename(caller, retcode, started));
}

/*
 * *****************************************************************************
 * static internal (private) functions
 * *****************************************************************************
 */

static char *
qreasonNoZonename(int caller, int retcode, int started)
{
	switch (retcode) {
	    case  0:
	    case 10:
	    case 20:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_SUC);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_SUC0);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_SUC1);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_SUC0);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_SUC1);
		    default:
			return (MSG_UNKREQ);
		}

	    case  1:
	    case 11:
	    case 21:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_FAIL);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_FAIL0);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_FAIL1);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_FAIL0);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_FAIL1);
		    default:
			return (MSG_UNKREQ);
		}

	    case  2:
	    case 12:
	    case 22:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_PARFAIL);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_PARFAIL0);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_PARFAIL1);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_PARFAIL0);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_PARFAIL1);
		    default:
			return (MSG_UNKREQ);
		}

	    case  3:
	    case 13:
	    case 23:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_USER);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_USER0);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_USER1);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_USER0);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_USER1);
		    default:
			return (MSG_UNKREQ);
		}

	    case  4:
	    case 14:
	    case 24:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_SUA);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_SUA0);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_SUA1);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_SUA0);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_SUA1);
		    default:
			return (MSG_UNKREQ);
		}

	    case  5:
	    case 15:
	    case 25:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_SUI);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_SUI0);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_SUI1);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_SUI0);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_SUI1);
		    default:
			return (MSG_UNKREQ);
		}

	    case 99:
		if (started) {
			switch (caller) {
			    case 0: /* pkginstall - pkgask */
				return (MSG_RE_IEPI);
			    case 1: /* pkginstall - pkgadd */
				return (MSG_IN_IEPI0);
			    case 2: /* pkginstall - mailmsg */
				return (MSG_IN_IEPI1);
			    case 3: /* pkgremove - quitmsg */
				return (MSG_RM_IEPI0);
			    case 4: /* pkgremove - mailmsg */
				return (MSG_RM_IEPI1);
			    default:
				return (MSG_UNKREQ);
			}
		}

		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_IE);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_IE0);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_IE1);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_IE0);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_IE1);
		    default:
			return (MSG_UNKREQ);
		}

	    default:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_UNK);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_UNK0);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_UNK1);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_UNK0);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_UNK1);
		    default:
			return (MSG_UNKREQ);
		}
	}
}

static char *
qreasonWithZonename(int caller, int retcode, int started)
{
	switch (retcode) {
	    case  0:
	    case 10:
	    case 20:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_SUC_ZONE);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_SUC0_ZONE);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_SUC1_ZONE);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_SUC0_ZONE);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_SUC1_ZONE);
		    default:
			return (MSG_UNKREQ_ZONE);
		}

	    case  1:
	    case 11:
	    case 21:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_FAIL_ZONE);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_FAIL0_ZONE);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_FAIL1_ZONE);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_FAIL0_ZONE);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_FAIL1_ZONE);
		    default:
			return (MSG_UNKREQ_ZONE);
		}

	    case  2:
	    case 12:
	    case 22:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_PARFAIL_ZONE);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_PARFAIL0_ZONE);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_PARFAIL1_ZONE);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_PARFAIL0_ZONE);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_PARFAIL1_ZONE);
		    default:
			return (MSG_UNKREQ_ZONE);
		}

	    case  3:
	    case 13:
	    case 23:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_USER_ZONE);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_USER0_ZONE);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_USER1_ZONE);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_USER0_ZONE);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_USER1_ZONE);
		    default:
			return (MSG_UNKREQ_ZONE);
		}

	    case  4:
	    case 14:
	    case 24:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_SUA_ZONE);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_SUA0_ZONE);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_SUA1_ZONE);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_SUA0_ZONE);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_SUA1_ZONE);
		    default:
			return (MSG_UNKREQ_ZONE);
		}

	    case  5:
	    case 15:
	    case 25:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_SUI_ZONE);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_SUI0_ZONE);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_SUI1_ZONE);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_SUI0_ZONE);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_SUI1_ZONE);
		    default:
			return (MSG_UNKREQ_ZONE);
		}

	    case 99:
		if (started) {
			switch (caller) {
			    case 0: /* pkginstall - pkgask */
				return (MSG_RE_IEPI_ZONE);
			    case 1: /* pkginstall - pkgadd */
				return (MSG_IN_IEPI0_ZONE);
			    case 2: /* pkginstall - mailmsg */
				return (MSG_IN_IEPI1_ZONE);
			    case 3: /* pkgremove - quitmsg */
				return (MSG_RM_IEPI0_ZONE);
			    case 4: /* pkgremove - mailmsg */
				return (MSG_RM_IEPI1_ZONE);
			    default:
				return (MSG_UNKREQ_ZONE);
			}
		}

		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_IE_ZONE);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_IE0_ZONE);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_IE1_ZONE);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_IE0_ZONE);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_IE1_ZONE);
		    default:
			return (MSG_UNKREQ_ZONE);
		}

	    default:
		switch (caller) {
		    case 0: /* pkginstall - pkgask */
			return (MSG_RE_UNK_ZONE);
		    case 1: /* pkginstall - pkgadd */
			return (MSG_IN_UNK0_ZONE);
		    case 2: /* pkginstall - mailmsg */
			return (MSG_IN_UNK1_ZONE);
		    case 3: /* pkgremove - quitmsg */
			return (MSG_RM_UNK0_ZONE);
		    case 4: /* pkgremove - mailmsg */
			return (MSG_RM_UNK1_ZONE);
		    default:
			return (MSG_UNKREQ_ZONE);
		}
	}
}