X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libsysio%2Fsrc%2Freadlink.c;h=f08374482870869482914e7e4e12ca96b9b4bc72;hb=b6298eaa3e08a581a7bbc5a4ee95c1f07401dfb5;hp=8693dc3d94ff34239f1c33f2cf843bc7f8d5249d;hpb=567285197e592000b7a713d65b66e27314a11c2f;p=fs%2Flustre-release.git diff --git a/libsysio/src/readlink.c b/libsysio/src/readlink.c index 8693dc3..f083744 100644 --- a/libsysio/src/readlink.c +++ b/libsysio/src/readlink.c @@ -41,21 +41,21 @@ * lee@sandia.gov */ -#if defined(__linux__) -#define _BSD_SOURCE -#endif #include #include #include #include -#include #include #include "sysio.h" #include "inode.h" #include "sysio-symbols.h" +#ifdef HAVE_POSIX_1003_READLINK +ssize_t +#else int +#endif SYSIO_INTERFACE_NAME(readlink)(const char *path, char *buf, size_t bufsiz) { struct intent intent; @@ -70,15 +70,14 @@ SYSIO_INTERFACE_NAME(readlink)(const char *path, char *buf, size_t bufsiz) if (err) goto out; ino = pno->p_base->pb_ino; - if (!S_ISLNK(ino->i_stbuf.st_mode)) { - err = -EINVAL; - goto error; - } err = (*ino->i_ops.inop_readlink)(pno, buf, bufsiz); + if (err) + goto error; + error: P_RELE(pno); out: - SYSIO_INTERFACE_RETURN(err < 0 ? -1 : err, err >= 0 ? 0 : err); + SYSIO_INTERFACE_RETURN(err, err >= 0 ? 0 : err); } #ifdef REDSTORM