diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/lib/brand/lx/lx_brand/common/file.c | 18 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/lx_brand/common/lx_brand.c | 2 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h | 1 |
3 files changed, 20 insertions, 1 deletions
diff --git a/usr/src/lib/brand/lx/lx_brand/common/file.c b/usr/src/lib/brand/lx/lx_brand/common/file.c index c0e4caadc9..c3fcc39738 100644 --- a/usr/src/lib/brand/lx/lx_brand/common/file.c +++ b/usr/src/lib/brand/lx/lx_brand/common/file.c @@ -743,12 +743,30 @@ lx_linkat(uintptr_t ext1, uintptr_t p1, uintptr_t ext2, uintptr_t p2, } int +lx_readlink(uintptr_t p1, uintptr_t p2, uintptr_t p3) +{ + int ret; + + if ((size_t)p3 <= 0) + return (-EINVAL); + + ret = readlink((char *)p1, (char *)p2, (size_t)p3); + if (ret < 0) + return (-errno); + + return (ret); +} + +int lx_readlinkat(uintptr_t ext1, uintptr_t p1, uintptr_t p2, uintptr_t p3) { int atfd = (int)ext1; char pathbuf[MAXPATHLEN]; int ret; + if ((size_t)p3 <= 0) + return (-EINVAL); + ret = getpathat(atfd, p1, pathbuf, sizeof (pathbuf)); if (ret < 0) return (ret); diff --git a/usr/src/lib/brand/lx/lx_brand/common/lx_brand.c b/usr/src/lib/brand/lx/lx_brand/common/lx_brand.c index 976817ccec..1079de8690 100644 --- a/usr/src/lib/brand/lx/lx_brand/common/lx_brand.c +++ b/usr/src/lib/brand/lx/lx_brand/common/lx_brand.c @@ -1020,7 +1020,7 @@ static struct lx_sysent sysents[] = { {"select", NULL, NOSYS_OBSOLETE, 0}, /* 82 */ {"symlink", symlink, SYS_PASSTHRU, 2}, /* 83 */ {"oldlstat", NULL, NOSYS_OBSOLETE, 0}, /* 84 */ - {"readlink", readlink, SYS_PASSTHRU, 3}, /* 85 */ + {"readlink", lx_readlink, 0, 3}, /* 85 */ {"uselib", NULL, NOSYS_KERNEL, 0}, /* 86 */ {"swapon", NULL, NOSYS_KERNEL, 0}, /* 87 */ {"reboot", lx_reboot, 0, 4}, /* 88 */ diff --git a/usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h b/usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h index cc84b3ec32..5bd4e5887a 100644 --- a/usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h +++ b/usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h @@ -68,6 +68,7 @@ extern int lx_fcntl(uintptr_t, uintptr_t, uintptr_t); extern int lx_fcntl64(uintptr_t, uintptr_t, uintptr_t); extern int lx_flock(uintptr_t, uintptr_t); extern int lx_open(uintptr_t, uintptr_t, uintptr_t); +extern int lx_readlink(uintptr_t, uintptr_t, uintptr_t); extern int lx_readdir(uintptr_t, uintptr_t, uintptr_t); extern int lx_getdents(uintptr_t, uintptr_t, uintptr_t); extern int lx_getdents64(uintptr_t, uintptr_t, uintptr_t); |