[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commits] r10624 - in /fsf/trunk/libc: ChangeLog hurd/hurd/fd.h hurd/lookup-at.c sysdeps/mach/hurd/linkat.c
- To: commits@xxxxxxxxxx
- Subject: [commits] r10624 - in /fsf/trunk/libc: ChangeLog hurd/hurd/fd.h hurd/lookup-at.c sysdeps/mach/hurd/linkat.c
- From: eglibc@xxxxxxxxxx
- Date: Thu, 03 Jun 2010 07:04:11 -0000
Author: eglibc
Date: Thu Jun 3 00:04:08 2010
New Revision: 10624
Log:
Import glibc-mainline for 2010-06-03
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/hurd/hurd/fd.h
fsf/trunk/libc/hurd/lookup-at.c
fsf/trunk/libc/sysdeps/mach/hurd/linkat.c
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Thu Jun 3 00:04:08 2010
@@ -1,3 +1,12 @@
+2010-06-02 Emilio Pozuelo Monfort <pochu27@xxxxxxxxx>
+
+ * hurd/lookup-at.c (__file_name_lookup_at): Accept
+ AT_SYMLINK_FOLLOW in AT_FLAGS. Fail with EINVAL if both
+ AT_SYMLINK_FOLLOW and AT_SYMLINK_NOFOLLOW are present
+ in AT_FLAGS.
+ * hurd/hurd/fd.h (__file_name_lookup_at): Update comment.
+ * sysdeps/mach/hurd/linkat.c (linkat): Pass O_NOLINK in FLAGS.
+
2010-05-28 Luis Machado <luisgpm@xxxxxxxxxx>
* sysdeps/powerpc/powerpc32/power7/memcpy.S: Exchange srdi for srwi.
Modified: fsf/trunk/libc/hurd/hurd/fd.h
==============================================================================
--- fsf/trunk/libc/hurd/hurd/fd.h (original)
+++ fsf/trunk/libc/hurd/hurd/fd.h Thu Jun 3 00:04:08 2010
@@ -254,8 +254,9 @@
const sigset_t *sigmask);
/* Variant of file_name_lookup used in *at function implementations.
- AT_FLAGS should contain only AT_SYMLINK_NOFOLLOW; other bits
- cause EINVAL. */
+ AT_FLAGS may only contain AT_SYMLINK_FOLLOW or AT_SYMLINK_NOFOLLOW,
+ which will remove and add O_NOLINK from FLAGS respectively.
+ Other bits cause EINVAL. */
extern file_t __file_name_lookup_at (int fd, int at_flags,
const char *file_name,
int flags, mode_t mode);
Modified: fsf/trunk/libc/hurd/lookup-at.c
==============================================================================
--- fsf/trunk/libc/hurd/lookup-at.c (original)
+++ fsf/trunk/libc/hurd/lookup-at.c Thu Jun 3 00:04:08 2010
@@ -30,8 +30,14 @@
error_t err;
file_t result;
+ if ((at_flags & AT_SYMLINK_FOLLOW) && (at_flags & AT_SYMLINK_NOFOLLOW))
+ return (__hurd_fail (EINVAL), MACH_PORT_NULL);
+
flags |= (at_flags & AT_SYMLINK_NOFOLLOW) ? O_NOLINK : 0;
at_flags &= ~AT_SYMLINK_NOFOLLOW;
+ if (at_flags & AT_SYMLINK_FOLLOW)
+ flags &= ~O_NOLINK;
+ at_flags &= ~AT_SYMLINK_FOLLOW;
if (at_flags != 0)
return (__hurd_fail (EINVAL), MACH_PORT_NULL);
Modified: fsf/trunk/libc/sysdeps/mach/hurd/linkat.c
==============================================================================
--- fsf/trunk/libc/sysdeps/mach/hurd/linkat.c (original)
+++ fsf/trunk/libc/sysdeps/mach/hurd/linkat.c Thu Jun 3 00:04:08 2010
@@ -1,5 +1,5 @@
/* Make a link between file names relative to open directories. Hurd version.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006,2010 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
@@ -38,7 +38,9 @@
file_t oldfile, linknode, todir;
char *toname;
- oldfile = __file_name_lookup_at (fromfd, flags, from, 0, 0);
+ /* POSIX says linkat doesn't follow symlinks by default, so pass
+ O_NOLINK. That can be overridden by AT_SYMLINK_FOLLOW in FLAGS. */
+ oldfile = __file_name_lookup_at (fromfd, flags, from, O_NOLINK, 0);
if (oldfile == MACH_PORT_NULL)
return -1;