ftp.nice.ch/pub/next/unix/network/news/nn.6.4.16.s.tar.gz#/nn/hostname.c

This is hostname.c in view mode; [Download] [Up]

/*
 *	(c) Copyright 1990, Kim Fabricius Storm.  All rights reserved.
 *
 *	"generic" gethostname() emulation:
 * 
 *	Possibilities are used in following order:
 *
 *	HAVE_GETHOSTNAME		-- use gethostname()
 *	HAVE_UNAME			-- use sysV uname().nodename
 *	HOSTNAME_FILE "/.../..."	-- read hostname from file
 *	HOSTNAME_WHOAMI			-- use sysname from whoami.h
 *	HOSTNAME "host"			-- hard-coded hostname
 *	You lose!
 */

#include "config.h"

#undef DONE

#ifdef HAVE_GETHOSTNAME
/*
 *	Easy -- we already got it
 */
#define DONE
#endif

#ifndef DONE
#ifdef HAVE_UNAME
/*
 *	System V uname() is available.	Use nodename field.
 */

#include <sys/utsname.h>

gethostname(name, length)
char *name;
int length;
{
    struct utsname un;

    uname(&un);
    strncpy(name, un.nodename, length);
}
#define DONE
#endif
#endif

#ifndef DONE
#ifdef HOSTNAME_FILE
/*
 *	Hostname is available in a file.
 *	The name of the file is defined in HOSTNAME_FILE.
 *	This is not intended to fail (or exit would have been via nn_exit)
 */

gethostname(name, length)
char *name;
int length;
{
    FILE *f;
    register char *p;
    
    f = fopen(HOSTNAME_FILE, "r"); /* Generic code -- don't use open_file */
    if (f == NULL) goto err;
    if (fgets(name, length, f) == NULL) goto err;
    if ((p = strchr(name, NL)) != NULL) *p = NUL;
    fclose(f);
    return;
    
err:    
    fprintf(stderr, "HOSTNAME NOT FOUND IN %s\n", HOSTNAME_FILE);
    exit(77);
}
#define DONE
#endif
#endif

#ifndef DONE
#ifdef HOSTNAME_WHOAMI
/*
 *	Hostname is found in whoami.h
 */

gethostname(name, length)
char *name;
int length;
{
    FILE *f;
    char buf[512];
    register char *p, *q;
    
    f = fopen("/usr/include/whoami.h", "r");
    if (f == NULL) goto err;
    
    while (fgets(buf, 512, f) != NULL) {
	if (buf[0] != '#') continue;
	if ((p = strchr(buf, '"')) == NULL) continue;
	*p++ = NUL;
	if (strncmp(buf, "#define sysname", 15)) continue;
	if ((q = strchr(p, '"')) == NULL) break;
	*q = NUL;
	strncpy(name, p, length);
	return;
    }
    
 err:
    fprintf(stderr, "HOSTNAME (sysname) NOT DEFINED IN whoami.h\n");
    exit(77);
}
#define DONE
#endif
#endif

#ifndef DONE
#ifdef HOSTNAME
gethostname(name, length)
char *name;
int length;
{
    strncpy(name, HOSTNAME, length);
}
#define DONE
#endif
#endif

#ifndef DONE
YOU LOSE ON GETHOSTNAME -- DEFINE HOSTNAME IN CONFIG.H
#endif

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.