* terms of the GNU Lesser General Public License
* (see cit/LGPL or http://www.gnu.org/licenses/lgpl.html)
*
- * Cplant(TM) Copyright 1998-2003 Sandia Corporation.
+ * Cplant(TM) Copyright 1998-2006 Sandia Corporation.
* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
* license for use of this work by or on behalf of the US Government.
* Export of this program may require a license from the United States
int err;
struct inode *ino;
- ro = IS_RDONLY(pno, pno->p_base->pb_ino);
+ ro = IS_RDONLY(pno);
w = flags & (O_WRONLY|O_RDWR);
if (w == (O_WRONLY|O_RDWR)) {
/*
if (!err) {
ino = parent->p_base->pb_ino;
assert(ino);
- err =
- !IS_RDONLY(parent, ino)
- ? (*ino->i_ops.inop_open)(pno, flags, mode)
- : -EROFS;
+ err = (*ino->i_ops.inop_open)(pno, flags, mode);
}
} else if ((flags & (O_CREAT|O_EXCL)) == (O_CREAT|O_EXCL))
err = -EEXIST;
else if (!ino)
err = _sysio_p_validate(pno, NULL, NULL);
+#ifdef O_NOFOLLOW
+ else if (flags & O_NOFOLLOW && S_ISLNK(ino->i_stbuf.st_mode))
+ err = -ELOOP;
+#endif
else {
/*
* Simple open of pre-existing file.
#endif
va_end(ap);
mode &= ~(_sysio_umask & 0777) | 07000; /* apply umask */
-
- if (flags & O_EXCL) {
- /*
- * Tell others we intend to create this file.
- */
- intent.int_opmask |= INT_CREAT;
- }
+ intent.int_opmask |= INT_CREAT;
}
#ifdef O_NOFOLLOW
if (flags & O_NOFOLLOW)
#ifdef __GLIBC__
#undef __open
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(open), __open)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(open),
+ PREPEND(__, SYSIO_INTERFACE_NAME(open)))
#undef open64
sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(open), SYSIO_INTERFACE_NAME(open64))
#undef __open64
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(open), __open64)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(open),
+ PREPEND(__, SYSIO_INTERFACE_NAME(open64)))
#endif
#ifdef REDSTORM
#undef __libc_open64
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(open), __libc_open64)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(open),
+ PREPEND(__, SYSIO_INTERFACE_NAME(libc_open64)))
#endif
#ifdef BSD
#undef _open
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(open), _open)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(open),
+ PREPEND(_, SYSIO_INTERFACE_NAME(open)))
#endif
int
#ifdef __GLIBC__
#undef __close
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(close), __close)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(close),
+ PREPEND(__, SYSIO_INTERFACE_NAME(close)))
#endif
#ifdef BSD
#undef _close
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(close), _close)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(close),
+ PREPEND(_, SYSIO_INTERFACE_NAME(close)))
#endif
int
SYSIO_INTERFACE_NAME(creat)(const char *path, mode_t mode)
{
- return open(path, O_CREAT|O_WRONLY|O_TRUNC, mode);
+ return SYSIO_INTERFACE_NAME(open)(path, O_CREAT|O_WRONLY|O_TRUNC, mode);
}
#ifdef __GLIBC__
#undef __creat
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(creat), __creat)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(creat),
+ PREPEND(__, SYSIO_INTERFACE_NAME(creat)))
#undef creat64
#ifndef HAVE_LUSTRE_HACK
sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(creat), SYSIO_INTERFACE_NAME(creat64))
#else
/* XXX workaround SuSE SLES 8, glibc-2.2.5 */
-sysio_sym_strong_alias(SYSIO_INTERFACE_NAME(creat), SYSIO_INTERFACE_NAME(creat64))
+sysio_sym_strong_alias(SYSIO_INTERFACE_NAME(creat),
+ SYSIO_INTERFACE_NAME(creat64))
#endif
#undef __creat64
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(creat), __creat64)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(creat),
+ PREPEND(__, SYSIO_INTERFACE_NAME(creat64)))
#endif
#ifdef REDSTORM
#undef __libc_creat
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(creat), __libc_creat)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(creat),
+ PREPEND(__, SYSIO_INTERFACE_NAME(libc_creat)))
#endif
#ifdef BSD
#undef _creat
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(creat), _creat)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(creat),
+ PREPEND(_, SYSIO_INTERFACE_NAME(creat)))
#endif
mode_t
#ifdef REDSTORM
#undef __umask
-sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(umask), __umask)
+sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(umask),
+ PREPEND(__, SYSIO_INTERFACE_NAME(umask)))
#endif