Skip to content

Commit

Permalink
* hurd/Makefile (routines): Add get-host, set-host.
Browse files Browse the repository at this point in the history
	(distribute): Add hurdhost.h.
	* hurd/hurdhost.h: New file.
	* sysdeps/mach/hurd/gethostname.c: Use _hurd_get_host_config.
	* sysdeps/mach/hurd/gethostid.c: Likewise.
	* sysdeps/mach/hurd/sethostname.c: Use _hurd_set_host_config.
	* sysdeps/mach/hurd/sethostid.c: Likewise.
	* hurd/get-host.c: New file.
	* hurd/set-host.c: New file.

	* math/Makefile (headers): Add fpu_control.h.
	(aux): New variable, list fpu_control and setfpucw.
	* sysdeps/generic/fpu_control.c: New file.
	* sysdeps/stub/fpu_control.h: New file.
	* sysdeps/unix/sysv/linux/m68k/fpu_control.h: Moved to ...
	* sysdeps/m68k/fpu_control.h: here.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h: Moved to ...
	* sysdeps/i386/fpu_control.h: here.
	* sysdeps/unix/sysv/linux/alpha/fpu_control.h: Moved to ...
	* sysdeps/alpha/fpu/fpu_control.h: here.  Fixed copyright.
	* sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Remove
	setfpucw, fpu_control.
	* sysdeps/unix/sysv/linux/alpha/fpu_control.c: File removed.
	* sysdeps/unix/sysv/linux/setfpucw.c: Moved to ...
	* sysdeps/generic/setfpucw.c: here.
	(__fpu_control): Variable removed.
	(__setfpucw): Use SET even if zero.
  • Loading branch information
Roland McGrath committed Jun 16, 1996
1 parent f9496a7 commit 5fbef18
Show file tree
Hide file tree
Showing 17 changed files with 273 additions and 56 deletions.
28 changes: 28 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,33 @@
Sat Jun 15 18:13:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>

* hurd/Makefile (routines): Add get-host, set-host.
(distribute): Add hurdhost.h.
* hurd/hurdhost.h: New file.
* sysdeps/mach/hurd/gethostname.c: Use _hurd_get_host_config.
* sysdeps/mach/hurd/gethostid.c: Likewise.
* sysdeps/mach/hurd/sethostname.c: Use _hurd_set_host_config.
* sysdeps/mach/hurd/sethostid.c: Likewise.
* hurd/get-host.c: New file.
* hurd/set-host.c: New file.

* math/Makefile (headers): Add fpu_control.h.
(aux): New variable, list fpu_control and setfpucw.
* sysdeps/generic/fpu_control.c: New file.
* sysdeps/stub/fpu_control.h: New file.
* sysdeps/unix/sysv/linux/m68k/fpu_control.h: Moved to ...
* sysdeps/m68k/fpu_control.h: here.
* sysdeps/unix/sysv/linux/i386/fpu_control.h: Moved to ...
* sysdeps/i386/fpu_control.h: here.
* sysdeps/unix/sysv/linux/alpha/fpu_control.h: Moved to ...
* sysdeps/alpha/fpu/fpu_control.h: here. Fixed copyright.
* sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Remove
setfpucw, fpu_control.
* sysdeps/unix/sysv/linux/alpha/fpu_control.c: File removed.
* sysdeps/unix/sysv/linux/setfpucw.c: Moved to ...
* sysdeps/generic/setfpucw.c: here.
(__fpu_control): Variable removed.
(__setfpucw): Use SET even if zero.

* elf/dl-deps.c (_dl_map_object_deps): Set MAP's mark bit before loop.
Set mark bits of deps as opened, instead of as scanned.

Expand Down
4 changes: 3 additions & 1 deletion hurd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ server-interfaces := hurd/msg faultexc

routines = hurdstartup hurdinit \
hurdid hurdlookup hurdpid hurdrlimit hurdprio hurdexec \
get-host set-host \
path-lookup \
setauth \
pid2task task2pid \
Expand All @@ -57,7 +58,8 @@ sig = hurdsig hurdfault siginfo hurd-raise preempt-sig \
dtable = dtable port2fd new-fd alloc-fd intern-fd \
getdport openport \
fd-close fd-read fd-write hurdioctl ctty-input ctty-output
distribute = hurdstartup.h hurdfault.h faultexc.defs intr-rpc.defs intr-rpc.h
distribute = hurdstartup.h hurdfault.h hurdhost.h \
faultexc.defs intr-rpc.defs intr-rpc.h

# XXX this is a temporary hack; see hurdmalloc.h
routines += hurdmalloc
Expand Down
57 changes: 57 additions & 0 deletions hurd/get-host.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/* Get a host configuration item kept as the whole contents of a file.
Copyright (C) 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
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */

#include <hurd.h>
#include "hurdhost.h"

ssize_t
_hurd_get_host_config (const char *item, char *buf, size_t buflen)
{
error_t err;
char *data;
mach_msg_type_number_t nread, more;
file_t config = __file_name_lookup (item, O_RDONLY, 0);
if (config == MACH_PORT_NULL)
return -1;

data = buf;
err = __io_read (config, &data, &nread, -1, buflen);
if (! err)
/* Check if there is more in the file we didn't read. */
err = __io_readable (config, &more);
__mach_port_deallocate (__mach_task_self (), config);
if (err)
return __hurd_fail (err);
if (data != buf)
{
memcpy (buf, data, nread);
__vm_deallocate (__mach_task_self (), (vm_address_t) data, nread);
}

/* Remove newlines in case someone wrote the file by hand. */
while (buf[nread - 1] == '\n')
buf[--nread] = '\0';

if (more)
/* If we didn't read the whole file, tell the caller to use a bigger
buffer next time. */
return __hurd_fail (ENAMETOOLONG);

return nread;
}
28 changes: 28 additions & 0 deletions hurd/hurdhost.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/* Host configuration items kept as the whole contents of a file.
Copyright (C) 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
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */

/* Fetch and atomically store the contents of the file ITEM.
Returns the size read or written, or -1 for errors.
If BUFLEN is not big enough to contain the whole contents,
BUFLEN bytes of BUF are filled in and we fail with ENAMETOOLONG. */

ssize_t _hurd_get_host_config (const char *item,
char *buf, size_t buflen);
ssize_t _hurd_set_host_config (const char *item,
const char *value, size_t valuelen);
48 changes: 48 additions & 0 deletions hurd/set-host.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/* Set a host configuration item kept as the whole contents of a file.
Copyright (C) 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
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */

#include <hurd.h>
#include "hurdhost.h"

ssize_t
_hurd_set_host_config (const char *item, const char *value, size_t valuelen)
{
error_t err;
mach_msg_type_number_t nwrote;
file_t new, dir;

dir = __file_name_split (item, &item);
if (dir == MACH_PORT_NULL)
return -1;

/* Create a new node. */
err = __dir_mkfile (dir, O_CREAT|O_TRUNC, 0600, &new);
if (! err)
{
/* Write the contents. */
err = __io_write (new, value, valuelen, 0, &nwrote);
if (! err)
/* Atomically link the new node onto the name. */
err = __dir_link (dir, item, 0);
__mach_port_deallocate (__mach_task_self (), new);
}
__mach_port_deallocate (__mach_task_self (), dir);

return nread;
}
4 changes: 3 additions & 1 deletion math/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@
subdir := math

# Installed header files.
headers := math.h mathcalls.h __math.h huge_val.h nan.h
headers := math.h mathcalls.h __math.h huge_val.h nan.h fpu_control.h

# Internal header files.
distribute := math_private.h machine/asm.h machine/endian.h

# FPU support code.
aux := fpu_control setfpucw

# Build the -lm library.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
/* Copyright (C) 1993 Olaf Flebbe
This file is part of the Linux C Library.
/* FPU control word bits. Alpha version.
Copyright (C) 1996 Free Software Foundation, Inc.
Contributed by Olaf Flebbe.
The Linux C Library is free software; you can redistribute it and/or
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The Linux C Library is distributed in the hope that it will be useful,
The GNU 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
Library General Public License for more details. */
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */

#ifndef _ALPHA_FPU_CONTROL_H
#define _ALPHA_FPU_CONTROL_H
Expand All @@ -28,7 +36,7 @@ Library General Public License for more details. */
* OM: Overflow mask
* UM: Underflow mask
* PM: Precision (inexact result) mask
*
*
* Mask bit is 1 means no interrupt.
*
* PC: Precision control
Expand All @@ -51,7 +59,7 @@ Library General Public License for more details. */
#include <features.h>

/* masking of interrupts */
#define _FPU_MASK_IM 0x01
#define _FPU_MASK_IM 0x01
#define _FPU_MASK_DM 0x02
#define _FPU_MASK_ZM 0x04
#define _FPU_MASK_OM 0x08
Expand Down Expand Up @@ -84,7 +92,7 @@ Library General Public License for more details. */
one can use /d to get round to +infinity with no extra overhead
(so long as the default isn't changed, of course...)
- exceptions on overflow, zero divide and NaN */
#define _FPU_DEFAULT 0x1f72
#define _FPU_DEFAULT 0x1f72

/* IEEE: same as above, but exceptions */
#define _FPU_IEEE 0x1f7f
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@azstarnet.com).
/* Default FPU control word initialization.
Copyright (C) 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
modify it under the terms of the GNU Library General Public License as
Expand All @@ -18,4 +19,6 @@ Cambridge, MA 02139, USA. */

#include <fpu_control.h>

/* This module defines `__fpu_control' with the default value. */

fpu_control_t __fpu_control = _FPU_DEFAULT;
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,5 @@ __setfpucw (fpu_control_t set)

/* Preserve the reserved bits, and set the rest as the user
specified (or the default, if the user gave zero). */
_FPU_SETCW ((cw & _FPU_RESERVED) | ((set ?: _FPU_DEFAULT) & ~_FPU_RESERVED));
_FPU_SETCW ((cw & _FPU_RESERVED) | (set & ~_FPU_RESERVED));
}

/* The startup code in init-first.c calls __setfpucw (__fpu_control). */

fpu_control_t __fpu_control;
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
/* FPU control word bits. i387 version.
Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Olaf Flebbe.
Expand Down
File renamed without changes.
16 changes: 9 additions & 7 deletions sysdeps/mach/hurd/gethostid.c
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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);
}
23 changes: 5 additions & 18 deletions sysdeps/mach/hurd/gethostname.c
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -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)
Loading

0 comments on commit 5fbef18

Please sign in to comment.