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.