about summary refs log tree commit diff
path: root/sysdeps/mach
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach')
-rw-r--r--sysdeps/mach/hurd/gethostid.c16
-rw-r--r--sysdeps/mach/hurd/gethostname.c23
-rw-r--r--sysdeps/mach/hurd/sethostid.c19
-rw-r--r--sysdeps/mach/hurd/sethostname.c12
4 files changed, 34 insertions, 36 deletions
diff --git a/sysdeps/mach/hurd/gethostid.c b/sysdeps/mach/hurd/gethostid.c
index 5a3309266e..a413a50308 100644
--- a/sysdeps/mach/hurd/gethostid.c
+++ b/sysdeps/mach/hurd/gethostid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 96 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -17,17 +17,19 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
-#include <errno.h>
 #include <unistd.h>
 #include <hurd.h>
+#include "hurdhost.h"
 
 /* Return the current machine's Internet number.  */
 long int
 DEFUN_VOID(gethostid)
 {
-  int hostid;
-  error_t err;
-  if (err = __USEPORT (PROC, __proc_gethostid (port, &hostid)))
-    return __hurd_fail (err);
-  return hostid;
+  /* The hostid is just the contents of the file /etc/hostid,
+     kept as text of hexadecimal digits.  */
+  char buf[8];
+  ssize_t n = _hurd_get_host_config ("/etc/hostid", buf, sizeof buf);
+  if (n < 0)
+    return -1;
+  return strtol (buf, NULL, 16);
 }
diff --git a/sysdeps/mach/hurd/gethostname.c b/sysdeps/mach/hurd/gethostname.c
index 94a0537d91..06703ead6a 100644
--- a/sysdeps/mach/hurd/gethostname.c
+++ b/sysdeps/mach/hurd/gethostname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -17,11 +17,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
-#include <errno.h>
 #include <unistd.h>
-#include <hurd.h>
-#include <hurd/port.h>
-#include <string.h>
+#include "hurdhost.h"
 
 /* Put the name of the current host in no more than LEN bytes of NAME.
    The result is null-terminated if LEN is large enough for the full
@@ -30,19 +27,9 @@ int
 DEFUN(__gethostname, (name, len),
       char *name AND size_t len)
 {
-  error_t err;
-  char *buf = name;
-  mach_msg_type_number_t buflen = len;
-  if (err = __USEPORT (PROC, __proc_gethostname (port, &buf, &buflen)))
-    return __hurd_fail (err);
-  if (buf != name)
-    {
-      memcpy (name, buf, len < buflen ? len : buflen);
-      __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen);
-    }
-  if (buflen > len)
-    return __hurd_fail (ENAMETOOLONG);
-  return 0;
+  /* The host name is just the contents of the file /etc/hostname.  */
+  ssize_t n = _hurd_get_host_config ("/etc/hostname", name, len);
+  return n < 0 ? -1 : 0;
 }
 
 weak_alias (__gethostname, gethostname)
diff --git a/sysdeps/mach/hurd/sethostid.c b/sysdeps/mach/hurd/sethostid.c
index dc8153caa6..64f5e0c1c6 100644
--- a/sysdeps/mach/hurd/sethostid.c
+++ b/sysdeps/mach/hurd/sethostid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -17,15 +17,26 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
-#include <errno.h>
 #include <unistd.h>
 #include <hurd.h>
+#include "hurdhost.h"
+#include "../stdio-common/_itoa.h"
 
 /* Set the current machine's Internet number to ID.
    This call is restricted to the super-user.  */
 int
 DEFUN(sethostid, (id), long int id)
 {
-  error_t err = __USEPORT (PROC, __proc_sethostid (port, id));
-  return err ? __hurd_fail (err) : 0;
+  char buf[8], *bp;
+  ssize_t n;
+
+  /* The hostid is kept in the file /etc/hostid,
+     eight characters of upper-case hexadecimal.  */
+
+  bp = _itoa_word (id, &buf[sizeof buf], 16, 1);
+  while (bp > buf)
+    *--bp = '0';
+
+  n = _hurd_set_host_config ("/etc/hostid", buf, sizeof buf);
+  return n < 0 ? -1 : 0;
 }
diff --git a/sysdeps/mach/hurd/sethostname.c b/sysdeps/mach/hurd/sethostname.c
index 2c019cf99e..d07e69d395 100644
--- a/sysdeps/mach/hurd/sethostname.c
+++ b/sysdeps/mach/hurd/sethostname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 96 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -17,9 +17,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
-#include <errno.h>
 #include <unistd.h>
-#include <hurd.h>
+#include "hurdhost.h"
 
 /* Set the name of the current host to NAME, which is LEN bytes long.
    This call is restricted to the super-user.  */
@@ -27,8 +26,7 @@ int
 DEFUN(sethostname, (name, len),
       CONST char *name AND size_t len)
 {
-  error_t err = __USEPORT (PROC, __proc_sethostname (port, name, len));
-  if (err)
-    return __hurd_fail (err);
-  return 0;
+  /* The host name is just the contents of the file /etc/hostname.  */
+  ssize_t n = _hurd_set_host_config ("/etc/hostname", name, len);
+  return n < 0 ? -1 : 0;
 }