X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libsysio%2Fsrc%2Freadlink.c;h=c8e74366bf63049f6191089cd76439787558e8e9;hb=e224b50dffb0e0b7aeacb1ed1d664de8b0b5748a;hp=7053c623738758e7901b9d8880b41eae506fe543;hpb=5e9021d9a3d57883ab5e915bb019e5774d364df6;p=fs%2Flustre-release.git diff --git a/libsysio/src/readlink.c b/libsysio/src/readlink.c index 7053c62..c8e7436 100644 --- a/libsysio/src/readlink.c +++ b/libsysio/src/readlink.c @@ -45,13 +45,18 @@ #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; @@ -66,14 +71,15 @@ SYSIO_INTERFACE_NAME(readlink)(const char *path, char *buf, size_t bufsiz) if (err) goto out; ino = pno->p_base->pb_ino; - err = (*ino->i_ops.inop_readlink)(pno, buf, bufsiz); - if (err) + if (!S_ISLNK(ino->i_stbuf.st_mode)) { + err = -EINVAL; goto error; - + } + err = (*ino->i_ops.inop_readlink)(pno, buf, bufsiz); error: P_RELE(pno); out: - SYSIO_INTERFACE_RETURN(err, err >= 0 ? 0 : err); + SYSIO_INTERFACE_RETURN(err < 0 ? -1 : err, err >= 0 ? 0 : err); } #ifdef REDSTORM