X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fchdir-safer.c;h=a6f77b0afc8c3e5b772248a7126a44a1805605cc;hb=4e765f32d65fe20b118366c8cab7bde74a916652;hp=a5c9a4d1214b9796d17abe3d4ee6f4f4e8cc9b38;hpb=5b66f060813b0b6042c0814ec1ab06e65f775063;p=gnulib.git diff --git a/lib/chdir-safer.c b/lib/chdir-safer.c index a5c9a4d12..a6f77b0af 100644 --- a/lib/chdir-safer.c +++ b/lib/chdir-safer.c @@ -1,6 +1,6 @@ /* much like chdir(2), but safer - Copyright (C) 2005-2006, 2008 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2008-2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,8 +29,8 @@ #include #include "same-inode.h" -#ifndef ELOOP -# define ELOOP 0 +#ifndef HAVE_READLINK +# define HAVE_READLINK 0 #endif /* Like chdir, but fail if DIR is a symbolic link to a directory (or @@ -50,8 +50,10 @@ chdir_no_follow (char const *dir) /* If open follows symlinks, lstat DIR and fstat FD to ensure that they are the same file; if they are different files, set errno to ELOOP (the same value that open uses for symlinks with - O_NOFOLLOW) so the caller can report a failure. */ - if (! HAVE_WORKING_O_NOFOLLOW) + O_NOFOLLOW) so the caller can report a failure. + Skip this check if HAVE_READLINK == 0, which should be the case + on any system that lacks symlink support. */ + if (HAVE_READLINK && ! HAVE_WORKING_O_NOFOLLOW) { struct stat sb1; result = lstat (dir, &sb1);