/*****************************************************************************\
 * common.c
 *****************************************************************************
 *  Copyright (C) 2002-2005 The Regents of the University of California.
 *  Produced at the Lawrence Livermore National Laboratory.
 *  Written by Dave Peterson <dsp@llnl.gov> <dave_peterson@pobox.com>.
 *  UCRL-CODE-2003-012
 *  All rights reserved.
 *
 *  This file is part of nvramtool, a utility for reading/writing coreboot
 *  parameters and displaying information from the coreboot table.
 *  For details, see https://coreboot.org/nvramtool.
 *
 *  Please also read the file DISCLAIMER which is included in this software
 *  distribution.
 *
 *  This program is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License (as published by the
 *  Free Software Foundation) version 2, dated June 1991.
 *
 *  This program is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the terms and
 *  conditions of the GNU General Public License for more details.
\*****************************************************************************/

#include "common.h"

/* basename of this program, as reported by argv[0] */
const char prog_name[] = "nvramtool";

/* version of this program */
const char prog_version[] = "2.1";

/****************************************************************************
 * get_line_from_file
 *
 * Get a line of input from file 'f'.  Store result in 'line' which is an
 * array of 'line_buf_size' bytes.
 ****************************************************************************/
int get_line_from_file(FILE * f, char line[], int line_buf_size)
{
	if (fgets(line, line_buf_size, f) == NULL)
		return LINE_EOF;

	/* If the file contains a line that is too long, then it's best
	 * to let the user know right away rather than passing back a
	 * truncated result that will lead to problems later on.
	 */
	return (strlen(line) == ((size_t) (line_buf_size - 1))) ?
	    LINE_TOO_LONG : OK;
}

/****************************************************************************
 * out_of_memory
 *
 * We ran out of memory.  Print an error message and die.
 ****************************************************************************/
void out_of_memory(void)
{
	fprintf(stderr, "%s: Out of memory.\n", prog_name);
	exit(1);
}

/****************************************************************************
 * usage
 *
 * Write a usage message to 'outfile'.  If 'outfile' is 'stderr' then exit
 * with a value of 1.  Otherwise exit with a value of 0.
 ****************************************************************************/
void usage(FILE * outfile)
{
	fprintf(outfile,
		"Usage: %s [-y LAYOUT_FILE | -t] PARAMETER ...\n\n"
		"       Read/write coreboot parameters or show info from "
		"coreboot table.\n\n"
		"       -y LAYOUT_FILE: Use CMOS layout specified by "
		"LAYOUT_FILE.\n"
		"       -t:             Use CMOS layout specified by CMOS option "
		"table.\n"
		"       -C CBFS_FILE:   Use CBFS file for layout and CMOS data.\n"
		"       -D CMOS_FILE:   Use CMOS file for CMOS data (overrides CMOS of -C).\n"
		"       [-n] -r NAME:   Show parameter NAME.  If -n is given, "
		"show value only.\n"
		"       -e NAME:        Show all possible values for parameter "
		"NAME.\n"
		"       -a:             Show names and values for all "
		"parameters.\n"
		"       -w NAME=VALUE:  Set parameter NAME to VALUE.\n"
		"       -p INPUT_FILE:  Set parameters according to INPUT_FILE.\n"
		"       -i:             Same as -p but file contents taken from "
		"standard input.\n"
		"       -c [VALUE]:     Show CMOS checksum or set checksum to "
		"VALUE.\n"
		"       -l [ARG]:       Show coreboot table info for ARG, or "
		"all ARG choices.\n"
		"       -L OUTPUT_BIN   Write CMOS layout file in binary format\n"
		"       -H OUTPUT_HDR   Write CMOS layout file in header format\n"
		"       -d:             Show low-level dump of coreboot table.\n"
		"       -Y:             Show CMOS layout info.\n"
		"       -b OUTPUT_FILE: Dump CMOS memory contents to file.\n"
		"       -B INPUT_FILE:  Write file contents to CMOS memory.\n"
		"       -x:             Show hex dump of CMOS memory.\n"
		"       -X DUMPFILE:    Show hex dump of CMOS dumpfile.\n"
		"       -v:             Show version info for this program.\n"
		"       -h:             Show this message.\n", prog_name);
	exit(outfile == stderr);
}
