1139969Simp/*-
21556Srgrimes * Copyright (c) 1988, 1993
31556Srgrimes *	The Regents of the University of California.  All rights reserved.
41556Srgrimes *
51556Srgrimes * Redistribution and use in source and binary forms, with or without
61556Srgrimes * modification, are permitted provided that the following conditions
71556Srgrimes * are met:
81556Srgrimes * 1. Redistributions of source code must retain the above copyright
91556Srgrimes *    notice, this list of conditions and the following disclaimer.
101556Srgrimes * 2. Redistributions in binary form must reproduce the above copyright
111556Srgrimes *    notice, this list of conditions and the following disclaimer in the
121556Srgrimes *    documentation and/or other materials provided with the distribution.
131556Srgrimes * 4. Neither the name of the University nor the names of its contributors
141556Srgrimes *    may be used to endorse or promote products derived from this software
151556Srgrimes *    without specific prior written permission.
161556Srgrimes *
171556Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
181556Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
191556Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
201556Srgrimes * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
211556Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
221556Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
231556Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
241556Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
251556Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
261556Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
271556Srgrimes * SUCH DAMAGE.
281556Srgrimes */
291556Srgrimes
30114433Sobrien#if 0
311556Srgrimes#ifndef lint
3220415Sstevestatic char const copyright[] =
331556Srgrimes"@(#) Copyright (c) 1988, 1993\n\
341556Srgrimes	The Regents of the University of California.  All rights reserved.\n";
351556Srgrimes#endif /* not lint */
361556Srgrimes
371556Srgrimes#ifndef lint
3836012Scharnierstatic char sccsid[] = "@(#)hostname.c	8.1 (Berkeley) 5/31/93";
39114433Sobrien#endif /* not lint */
4036012Scharnier#endif
4199109Sobrien#include <sys/cdefs.h>
4299109Sobrien__FBSDID("$FreeBSD$");
431556Srgrimes
441556Srgrimes#include <sys/param.h>
451556Srgrimes
461556Srgrimes#include <err.h>
471556Srgrimes#include <stdio.h>
481556Srgrimes#include <stdlib.h>
491556Srgrimes#include <string.h>
501556Srgrimes#include <unistd.h>
511556Srgrimes
52194795Sdelphijstatic void usage(void);
5320415Ssteve
541556Srgrimesint
5590110Simpmain(int argc, char *argv[])
561556Srgrimes{
571556Srgrimes	int ch, sflag;
581556Srgrimes	char *p, hostname[MAXHOSTNAMELEN];
591556Srgrimes
601556Srgrimes	sflag = 0;
61165006Skientzle	while ((ch = getopt(argc, argv, "fs")) != -1)
621556Srgrimes		switch (ch) {
63165004Skientzle		case 'f':
64165006Skientzle			/*
65165006Skientzle			 * On Linux, "hostname -f" prints FQDN.
66165006Skientzle			 * BSD "hostname" always prints FQDN by
67165006Skientzle			 * default, so we accept but ignore -f.
68165006Skientzle			 */
69165004Skientzle			break;
701556Srgrimes		case 's':
711556Srgrimes			sflag = 1;
721556Srgrimes			break;
731556Srgrimes		case '?':
741556Srgrimes		default:
7520415Ssteve			usage();
761556Srgrimes		}
771556Srgrimes	argc -= optind;
781556Srgrimes	argv += optind;
791556Srgrimes
8020415Ssteve	if (argc > 1)
8120415Ssteve		usage();
8220415Ssteve
831556Srgrimes	if (*argv) {
8476877Skris		if (sethostname(*argv, (int)strlen(*argv)))
851556Srgrimes			err(1, "sethostname");
861556Srgrimes	} else {
8776877Skris		if (gethostname(hostname, (int)sizeof(hostname)))
881556Srgrimes			err(1, "gethostname");
8991084Smarkm		if (sflag) {
9091084Smarkm			p = strchr(hostname, '.');
9191084Smarkm			if (p != NULL)
9291084Smarkm				*p = '\0';
9391084Smarkm		}
941556Srgrimes		(void)printf("%s\n", hostname);
951556Srgrimes	}
961556Srgrimes	exit(0);
971556Srgrimes}
9820415Ssteve
99194795Sdelphijstatic void
10090110Simpusage(void)
10120415Ssteve{
10220415Ssteve
103165006Skientzle	(void)fprintf(stderr, "usage: hostname [-fs] [name-of-host]\n");
10420415Ssteve	exit(1);
10520415Ssteve}
106