diff options
author | root <root> | 2011-07-05 09:24:11 +0000 |
---|---|---|
committer | root <root> | 2011-07-05 09:24:11 +0000 |
commit | c386664b94e2392f2d2cca35d7f8e9c6cb3c85c2 (patch) | |
tree | 5e82b156b8395dd502ff1028fb4cb1e2528030f4 /eio.c | |
parent | f40f89e5846a01dba0a726a5f30fde548ad63c0c (diff) |
realpath
Diffstat (limited to 'eio.c')
-rw-r--r-- | eio.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -837,6 +837,10 @@ int eio_poll (void) /*****************************************************************************/ /* work around various missing functions */ +#if _POSIX_VERSION < 200809L +# define realpath(path,resolved_path) (errno = ENOSYS, 0) +#endif + #if !HAVE_PREADWRITE # undef pread # undef pwrite @@ -1776,6 +1780,11 @@ eio_execute (etp_worker *self, eio_req *req) case EIO_SYMLINK: req->result = symlink (req->ptr1, req->ptr2); break; case EIO_MKNOD: req->result = mknod (req->ptr1, (mode_t)req->int2, (dev_t)req->offs); break; + case EIO_REALPATH: req->flags |= EIO_FLAG_PTR2_FREE; + req->ptr2 = realpath (req->ptr1, 0); + req->result = req->ptr2 ? strlen (req->ptr2) : -1; + break; + case EIO_READLINK: ALLOC (PATH_MAX); req->result = readlink (req->ptr1, req->ptr2, PATH_MAX); break; @@ -2002,6 +2011,11 @@ eio_req *eio_readlink (const char *path, int pri, eio_cb cb, void *data) return eio__1path (EIO_READLINK, path, pri, cb, data); } +eio_req *eio_realpath (const char *path, int pri, eio_cb cb, void *data) +{ + return eio__1path (EIO_REALPATH, path, pri, cb, data); +} + eio_req *eio_stat (const char *path, int pri, eio_cb cb, void *data) { return eio__1path (EIO_STAT, path, pri, cb, data); |