X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fsymlinkat.c;h=fc5bb526f809260d63277851738a43f1b9de13d2;hb=a6b16b69fe1cad695b270dd5bf3deb2850fc4dd1;hp=6fe752f14aca86dbf6a57671553f5a67637486ed;hpb=d4356ced2b562ac55101ab23a5321114c41e0eda;p=gnulib.git diff --git a/lib/symlinkat.c b/lib/symlinkat.c index 6fe752f14..fc5bb526f 100644 --- a/lib/symlinkat.c +++ b/lib/symlinkat.c @@ -1,5 +1,5 @@ /* Create a symlink relative to an open directory. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2011 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 @@ -20,19 +20,15 @@ #include -#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ -#include "openat.h" -#include "openat-priv.h" -#include "save-cwd.h" - #if !HAVE_SYMLINK -/* Mingw lacks symlink, so this wrapper is trivial. */ +/* Mingw lacks symlink, and it is more efficient to provide a trivial + wrapper than to go through at-func.c to call rpl_symlink. */ # include int -symlinkat (char const *path1 _UNUSED_PARAMETER_, int fd _UNUSED_PARAMETER_, - char const *path2 _UNUSED_PARAMETER_) +symlinkat (char const *path1 _GL_UNUSED, int fd _GL_UNUSED, + char const *path2 _GL_UNUSED) { errno = ENOSYS; return -1; @@ -78,29 +74,3 @@ symlinkat (char const *contents, int fd, char const *file) } #endif /* HAVE_SYMLINK */ - -/* Gnulib provides a readlink stub for mingw; use it for distinction - between EINVAL and ENOENT, rather than always failing with ENOSYS. */ - -/* POSIX 2008 says that unlike readlink, readlinkat returns 0 for - success instead of the buffer length. But this would render - readlinkat worthless since readlink does not guarantee a - NUL-terminated buffer. Assume this was a bug in POSIX. */ - -/* Read the contents of symlink FILE into buffer BUF of size LEN, in the - directory open on descriptor FD. If possible, do it without changing - the working directory. Otherwise, resort to using save_cwd/fchdir, - then readlink/restore_cwd. If either the save_cwd or the restore_cwd - fails, then give a diagnostic and exit nonzero. */ - -#define AT_FUNC_NAME readlinkat -#define AT_FUNC_F1 readlink -#define AT_FUNC_POST_FILE_PARAM_DECLS , char *buf, size_t len -#define AT_FUNC_POST_FILE_ARGS , buf, len -#define AT_FUNC_RESULT ssize_t -#include "at-func.c" -#undef AT_FUNC_NAME -#undef AT_FUNC_F1 -#undef AT_FUNC_POST_FILE_PARAM_DECLS -#undef AT_FUNC_POST_FILE_ARGS -#undef AT_FUNC_RESULT