glibc/sysdeps/unix/sysv/linux/mips/xstatconv.c
Ulrich Drepper 6d4752d8b9 Update.
1998-11-27  Philip Blundell  <pb@nexus.co.uk>

	Fixes to allow compilation with static NSS:
	* nss/Makefile: Make explicit the dependency of getent on
	libnss_files.a.
	[build_static_nss]: Define $(otherlibs) appropriately.
	* nss/Depend: Add a dependency on `resolv'.

1998-11-27  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	Partial support for MIPS ISO C 9x exception handling:
	* sysdeps/mips/fclrexcpt.c: New file.
	* sysdeps/mips/ftestexcept.c: New file.
	* sysdeps/mips/fgetexcptflg.c: New file.
	* sysdeps/mips/fesetround.c: New file.
	* sysdeps/mips/fegetround.c: New file.
	* sysdeps/mips/fegetenv.c: New file.
	* sysdeps/mips/fesetenv.c: New file.
	* sysdeps/mips/feupdateenv.c: Likewise.
	* sysdeps/mips/bits/fenv.h: New file.

1998-11-28  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* sysdeps/unix/sysv/linux/mips/bits/signum.h: Remove inclusion of
	<asm/signal.h> and add needed symbols from <asm/signal.h>; bring
	in sync with linux specific version.

	Patches by Ralf Baechle <ralf@uni-koblenz.de> for mips-linux:

	* sysdeps/unix/mips/sysdep.S: Define _errno as weak_alias, rewrite
	errno declaration.

	* sysdeps/unix/sysv/linux/mips/ustat.c: Use INLINE_SYSCALL instead
	of calling __syscall_*.
	* sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise.

	* sysdeps/unix/sysv/linux/mips/syscalls.list: Update entries.

	* sysdeps/unix/sysv/linux/mips/sys/syscall.h: Add missing SYS_*
	constants, correct values according to Linux 2.1.130.

	* sysdeps/unix/sysv/linux/mips/pwrite.c: New file.
	* sysdeps/unix/sysv/linux/mips/pwrite64.c: New file.
	* sysdeps/unix/sysv/linux/mips/pread.c: New file.
	* sysdeps/unix/sysv/linux/mips/pread64.c: New file.

	* sysdeps/mips/Makefile (sysdep_routines): Use += instead of a
	:=.

	* sysdeps/unix/sysv/linux/mips/bits/ipc.h: Remove ipc_kludge.

	* sysdeps/unix/sysv/linux/mips/xstatconv.c: New file.

	* sysdeps/unix/sysv/linux/mips/xstat.c: Removed.

	* sysdeps/unix/sysv/linux/mips/sys/ucontext.h: New file.

	* sysdeps/unix/sysv/linux/mips/kernel_termios.h: Add copyright
	message, change name of include protection, remove inclusion of
	<bits/termios.h>.

	* sysdeps/unix/sysv/linux/mips/kernel_sigaction.h
	(old_kernel_sigaction): Define.
	(struct kernel_sigaction): Rename sa_handler to k_sa_handler.

	* sysdeps/unix/sysv/linux/mips/bits/time.h: Removed, we can use
	the general linux version.
	* sysdeps/unix/sysv/linux/mips/bits/stat.h (_STAT_VER_KERNEL): Added.

	* sysdeps/unix/sysv/linux/mips/bits/socket.h: Update file.

1998-09-03  Philip Blundell  <pb@nexus.co.uk>

	* sysdeps/arm/bits/endian.h (__FLOAT_WORD_ORDER): Define to big
	endian.
	* math/math_private.h: Use __FLOAT_WORD_ORDER rather than
	BYTE_ORDER.
	* string/endian.h: If __FLOAT_WORD_ORDER wasn't defined by
	<bits/endian.h>, make it the same as __BYTE_ORDER.

1998-11-26  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* Makeconfig ($(common-objpfx)sysd-dirs): Use automatic variables
	if possible.
	($(common-objpfx)sysd-sorted): Likewise.

1998-11-27  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* sysdeps/libm-ieee754/e_log.c (__ieee754_log): Add declaration of
	local variables t1,t2 only if needed.

	* sysdeps/libm-ieee754/s_truncf.c (__truncf): Likewise.
	* sysdeps/libm-ieee754/s_trunc.c (__trunc): Likewise.

	* sysdeps/mips/mul_1.S (Loop): Add closing comment to avoid
	warning.

1998-11-27  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* math/math.h: Add brace to correct #if expression.

1998-11-26  Philip Blundell  <philb@gnu.org>

	Undo change of 1998-11-12:
	* sysdeps/unix/sysv/linux/netlink/netlink.h: Deleted.
	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Remove
	netlink/netlink.h.
	* sysdeps/unix/sysv/linux/Dist: Likewise.

1998-11-22  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	* nis/nis_print.c (nis_print_entry): Changes to match Solaris output.

1998-11-26  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* sysdeps/generic/pselect.c (__pselect): Change interface,
	set/restore sigmask.

	* misc/sys/select.h: Change declaration according to Stevens' Unix
	Network Programming.
	* include/sys/select.h (__pselect): Likewise.
	Reported by <bwelling@anomaly.munge.com> [PR libc/872].

	* include/fpu_control.h: New file, contains __setfpucw
	declaration.

	* sysdeps/generic/fpu_control.h: Remove __setfpucw declaration,
	it's an internal symbol.
	* sysdeps/alpha/fpu/fpu_control.h: Likewise.
	* sysdeps/arm/fpu/fpu_control.h: Likewise.
	* sysdeps/i386/fpu_control.h: Likewise.
	* sysdeps/m68k/fpu_control.h: Likewise.
	* sysdeps/powerpc/fpu_control.h: Likewise.
	* sysdeps/sparc/sparc32/fpu/fpu_control.h: Likewise.
	* sysdeps/sparc/sparc64/fpu/fpu_control.h: Likewise.
1998-11-28 21:06:13 +00:00

121 lines
3.5 KiB
C

/* Convert between the kernel's `struct stat' format, and libc's.
Copyright (C) 1991, 1995, 1996, 1997, 1998 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <string.h>
static inline int
xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
{
switch (vers)
{
case _STAT_VER_KERNEL:
/* Nothing to do. The struct is in the form the kernel expects.
We should have short-circuted before we got here, but for
completeness... */
*(struct kernel_stat *) ubuf = *kbuf;
break;
case _STAT_VER_LINUX:
{
struct stat *buf = ubuf;
/* Convert to current kernel version of `struct stat'. */
buf->st_dev = kbuf->st_dev;
buf->st_pad1[0] = 0; buf->st_pad1[1] = 0; buf->st_pad1[2] = 0;
buf->st_ino = kbuf->st_ino;
buf->st_mode = kbuf->st_mode;
buf->st_nlink = kbuf->st_nlink;
buf->st_uid = kbuf->st_uid;
buf->st_gid = kbuf->st_gid;
buf->st_rdev = kbuf->st_rdev;
buf->st_pad2[0] = 0; buf->st_pad2[1] = 0;
buf->st_pad3 = 0;
buf->st_size = kbuf->st_size;
buf->st_blksize = kbuf->st_blksize;
buf->st_blocks = kbuf->st_blocks;
buf->st_atime = kbuf->st_atime; buf->__reserved0 = 0;
buf->st_mtime = kbuf->st_mtime; buf->__reserved1 = 0;
buf->st_ctime = kbuf->st_ctime; buf->__reserved2 = 0;
buf->st_pad4[0] = 0; buf->st_pad4[1] = 0;
buf->st_pad4[2] = 0; buf->st_pad4[3] = 0;
buf->st_pad4[4] = 0; buf->st_pad4[5] = 0;
buf->st_pad4[6] = 0; buf->st_pad4[7] = 0;
}
break;
default:
__set_errno (EINVAL);
return -1;
}
return 0;
}
static inline int
xstat64_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
{
#ifdef XSTAT_IS_XSTAT64
return xstat_conv (vers, kbuf, ubuf);
#else
switch (vers)
{
case _STAT_VER_LINUX:
{
struct stat64 *buf = ubuf;
buf->st_dev = kbuf->st_dev;
buf->st_pad1[0] = 0; buf->st_pad1[1] = 0; buf->st_pad1[2] = 0;
buf->st_ino = kbuf->st_ino;
buf->st_mode = kbuf->st_mode;
buf->st_nlink = kbuf->st_nlink;
buf->st_uid = kbuf->st_uid;
buf->st_gid = kbuf->st_gid;
buf->st_rdev = kbuf->st_rdev;
buf->st_pad2[0] = 0; buf->st_pad2[1] = 0;
buf->st_pad3 = 0;
buf->st_size = kbuf->st_size;
buf->st_blksize = kbuf->st_blksize;
buf->st_blocks = kbuf->st_blocks;
buf->st_atime = kbuf->st_atime; buf->__reserved0 = 0;
buf->st_mtime = kbuf->st_mtime; buf->__reserved1 = 0;
buf->st_ctime = kbuf->st_ctime; buf->__reserved2 = 0;
buf->st_pad4[0] = 0; buf->st_pad4[1] = 0;
buf->st_pad4[2] = 0; buf->st_pad4[3] = 0;
buf->st_pad4[4] = 0; buf->st_pad4[5] = 0;
buf->st_pad4[6] = 0; buf->st_pad4[7] = 0;
}
break;
/* If struct stat64 is different from struct stat then
_STAT_VER_KERNEL does not make sense. */
case _STAT_VER_KERNEL:
default:
__set_errno (EINVAL);
return -1;
}
return 0;
#endif
}