From 57003dd777187d6b6975cfa59d8511f6c0c3af06 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 13 Apr 2013 00:42:13 +0200 Subject: [PATCH] Add gethostname(2). --- libc/Makefile | 1 + libc/gethostname.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ libc/include/unistd.h | 2 +- 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 libc/gethostname.cpp diff --git a/libc/Makefile b/libc/Makefile index 5afd48a0..dbc5d54c 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -220,6 +220,7 @@ getdtablesize.o \ getegid.o \ geteuid.o \ getgid.o \ +gethostname.o \ getpagesize.o \ getpid.o \ getppid.o \ diff --git a/libc/gethostname.cpp b/libc/gethostname.cpp new file mode 100644 index 00000000..58a550ca --- /dev/null +++ b/libc/gethostname.cpp @@ -0,0 +1,40 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2013. + + This file is part of the Sortix C Library. + + The Sortix C Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + The Sortix C Library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with the Sortix C Library. If not, see . + + gethostname.cpp + Get the hostname. + +*******************************************************************************/ + +#include +#include +#include +#include + +extern "C" int gethostname(char* name, size_t len) +{ + const char* hostname = getenv("HOSTNAME"); + if ( !hostname ) + hostname = "sortix"; + size_t hostname_len = strlen(hostname); + if ( len < hostname_len+1 ) + return errno = ENAMETOOLONG, -1; + strcpy(name, hostname); + return 0; +} diff --git a/libc/include/unistd.h b/libc/include/unistd.h index 901f416a..80cce606 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -115,7 +115,6 @@ int fexecve(int, char* const [], char* const []); long fpathconf(int, int); int getgroups(int, gid_t []); long gethostid(void); -int gethostname(char*, size_t); char* getlogin(void); int getlogin_r(char*, size_t); int getopt(int, char* const [], const char*); @@ -170,6 +169,7 @@ char* getcwd(char*, size_t); char* get_current_dir_name(void); gid_t getegid(void); uid_t geteuid(void); +int gethostname(char*, size_t); pid_t getpid(void); pid_t getppid(void); uid_t getuid(void);