/*****************************************************************************\
 * 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.
 ****************************************************************************/
_Noreturn 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);
}
