diff options
authorPeter Seebach <peter.seebach@windriver.com>2014-06-13 13:31:33 -0500
committerPeter Seebach <peter.seebach@windriver.com>2014-06-13 13:35:24 -0500
commitd2198c6537031dd1d75f9bcdf601f67a370b75b5 (patch)
parent14925786b55202d8147b0af719038e8a23ef73c0 (diff)
Don't follow symlinks for lutimes()
Also for lstat, but that probably never matters because in Linux you will never actually call lstat without working really hard at it, because you end up calling __lxstat anyway. (Was already doing the right thing for Darwin.)
3 files changed, 6 insertions, 3 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt
index 7820e4f..d61a4ed 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,3 +1,6 @@
+ * (seebs) don't follow symlinks for lutimes.
* (seebs) start noticing umask, mask it out from open or mkdir
calls rather than relying on underlying open/mkdir to do it.
diff --git a/ports/linux/wrapfuncs.in b/ports/linux/wrapfuncs.in
index e2b661b..3b8955a 100644
--- a/ports/linux/wrapfuncs.in
+++ b/ports/linux/wrapfuncs.in
@@ -18,10 +18,10 @@ int openat64(int dirfd, const char *path, int flags, ...{mode_t mode}); /* flags
int __openat64_2(int dirfd, const char *path, int flags); /* flags=0 */
int creat64(const char *path, mode_t mode);
int stat(const char *path, struct stat *buf); /* real_func=pseudo_stat */
-int lstat(const char *path, struct stat *buf); /* real_func=pseudo_lstat */
+int lstat(const char *path, struct stat *buf); /* real_func=pseudo_lstat, flags=AT_SYMLINK_NOFOLLOW */
int fstat(int fd, struct stat *buf); /* real_func=pseudo_fstat */
int stat64(const char *path, struct stat64 *buf); /* real_func=pseudo_stat64 */
-int lstat64(const char *path, struct stat64 *buf); /* real_func=pseudo_lstat64 */
+int lstat64(const char *path, struct stat64 *buf); /* real_func=pseudo_lstat64, flags=AT_SYMLINK_NOFOLLOW */
int fstat64(int fd, struct stat64 *buf); /* real_func=pseudo_fstat64 */
int __xstat64(int ver, const char *path, struct stat64 *buf);
int __lxstat64(int ver, const char *path, struct stat64 *buf); /* flags=AT_SYMLINK_NOFOLLOW */
diff --git a/ports/unix/wrapfuncs.in b/ports/unix/wrapfuncs.in
index e0e9739..5f30ae6 100644
--- a/ports/unix/wrapfuncs.in
+++ b/ports/unix/wrapfuncs.in
@@ -14,7 +14,7 @@ FTS *fts_open(char * const *path_argv, int options, int (*compar)(const FTSENT *
int ftw(const char *path, int (*fn)(const char *, const struct stat *, int), int nopenfd);
int nftw(const char *path, int (*fn)(const char *, const struct stat *, int, struct FTW *), int nopenfd, int flag);
int glob(const char *pattern, int flags, int (*errfunc)(const char *, int), glob_t *pglob);
-int lutimes(const char *path, const struct timeval *tv);
+int lutimes(const char *path, const struct timeval *tv); /* flags=AT_SYMLINK_NOFOLLOW */
char *mkdtemp(char *template);
char *mktemp(char *template);
long pathconf(const char *path, int name);