OpenSolaris_b135/cmd/prtfru/main.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, 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 2002 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#include <libintl.h>
#include <locale.h>
#include <stdio.h>

#include "libfru.h"
#include "prtfru.h"


static void
usage(const char *command)
{
	(void) fprintf(stderr,
		gettext("Usage:  %s [ -d ] | [ -clx ] [ container ]\n"),
		command);
}

int
main(int argc, char *argv[])
{
	char  *command = argv[0], *searchpath = NULL;

	int   containers_only = 0, dtd = 0, list_only = 0, nodtd = 0, option,
		status, xml = 0;


	(void) setlocale(LC_ALL, "");
	(void) textdomain(TEXT_DOMAIN);

	opterr = 0;	/*  "getopt" should not print to "stderr"  */
	while ((option = getopt(argc, argv, "cdlx")) != EOF) {
		switch (option) {
		case 'c':
			containers_only = 1;
			nodtd = 1;
			break;
		case 'd':
			dtd = 1;
			break;
		case 'l':
			list_only = 1;
			nodtd = 1;
			break;
		case 'x':
			xml = 1;
			nodtd = 1;
			break;
		default:
			usage(command);
			return (1);
		}
	}

	argc -= optind;
	argv += optind;

	if (dtd) {
		if (nodtd || (argc > 0)) {
			usage(command);
			(void) fprintf(stderr,
			    gettext("Specify \"-d\" alone\n"));
			return (1);
		}

		return (output_dtd());
	}

	switch (argc) {
	case 0:
		break;
	case 1:
		searchpath = argv[0];
		if (!searchpath[0]) {
			usage(command);
			(void) fprintf(stderr,
			    gettext("\"container\" should not be empty\n"));
			return (1);
		}
		break;
	default:
		usage(command);
		return (1);
	}


	/*
	 * Select the data source and print all the data
	 */
	if ((status = fru_open_data_source("picl")) != FRU_SUCCESS) {
		(void) fprintf(stderr,
		    gettext("Error opening FRU ID data source:  %s\n"),
		    fru_strerror(status));
		return (1);
	}

	return (prtfru(searchpath, containers_only, list_only, xml));
}