summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/perl/lib/gethostname.pl
blob: 1739e0622e6ee4c711fb04bbaff0cd478c6c1ef1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#
# Simple package to get the hostname via __sysctl(2).
#
# Written 13-Feb-96 by Jörg Wunsch, interface business GmbH Dresden.
# Placed in the public domain.
#
# $FreeBSD$
#

package gethostname;

require "sys/syscall.ph";
require "sys/sysctl.ph";

#
# usage:
#
# require "gethostname.pl";
# printf "This machine is named \"%s\".\n", &gethostname;
#

sub main'gethostname {
    # get hostname via sysctl(2)
    local($name, $oldval, $oldlen, $len);
    $name = pack("LL", &CTL_KERN, &KERN_HOSTNAME);
    # 64-byte string to get the hostname
    $oldval = " " x 64;
    $oldlen = pack("L", length($oldval));
    syscall(&SYS___sysctl, $name, 2, $oldval, $oldlen, 0, 0) != -1 ||
	die "Cannot get hostname via sysctl(2), errno = $!\n";

    ($len) = unpack("L", $oldlen);
    return substr($oldval, 0, $len - 1);
}

1;
OpenPOWER on IntegriCloud