/* hostname.c - Get/Set the hostname
 *
 * Copyright 2012 Andre Renaud <andre@bluewatersys.com>
 *
 * http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/hostname.html

USE_HOSTNAME(NEWTOY(hostname, "bF:", TOYFLAG_BIN))

config HOSTNAME
  bool "hostname"
  default y
  help
    usage: hostname [-b] [-F FILENAME] [newname]

    Get/Set the current hostname

    -b  Set hostname to 'localhost' if otherwise unset
    -F  Set hostname to contents of FILENAME
*/

#define FOR_hostname
#include "toys.h"

GLOBALS(
  char *fname;
)

void hostname_main(void)
{
  char *hostname = *toys.optargs;

  if (TT.fname && (hostname = xreadfile(TT.fname, 0, 0))) {
    if (!*chomp(hostname)) {
      if (CFG_TOYBOX_FREE) free(hostname);
      if (!(toys.optflags&FLAG_b)) error_exit("empty '%s'", TT.fname);
      hostname = 0;
    }
  }

  if (!hostname && (toys.optflags&FLAG_b))
    if (gethostname(toybuf, sizeof(toybuf)-1) || !*toybuf)
      hostname = "localhost";

  if (hostname) {
    if (sethostname(hostname, strlen(hostname)))
      perror_exit("set '%s'", hostname);
  } else {
    if (gethostname(toybuf, sizeof(toybuf)-1)) perror_exit("gethostname");
    xputs(toybuf);
  }
}
