aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/nfs/Connection.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-10-06 20:06:54 +0200
committerMax Kellermann <max@duempel.org>2014-10-07 06:35:50 +0200
commit07b50f6c6985581f2db397b3adfacda09deba390 (patch)
tree2c3e4b1850a549825ddf10ef97f6619574809962 /src/lib/nfs/Connection.cxx
parent61b3aaaa0791ca6ac327de6c44a107b99ce78926 (diff)
downloadmpd-07b50f6c6985581f2db397b3adfacda09deba390.tar.gz
mpd-07b50f6c6985581f2db397b3adfacda09deba390.tar.xz
mpd-07b50f6c6985581f2db397b3adfacda09deba390.zip
lib/nfs/Connection: add methods {Open,Read,Close}Directory()
Diffstat (limited to 'src/lib/nfs/Connection.cxx')
-rw-r--r--src/lib/nfs/Connection.cxx43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/lib/nfs/Connection.cxx b/src/lib/nfs/Connection.cxx
index 33e75a7c5..012e4daa2 100644
--- a/src/lib/nfs/Connection.cxx
+++ b/src/lib/nfs/Connection.cxx
@@ -50,6 +50,21 @@ NfsConnection::CancellableCallback::Stat(nfs_context *ctx,
}
inline bool
+NfsConnection::CancellableCallback::OpenDirectory(nfs_context *ctx,
+ const char *path,
+ Error &error)
+{
+ int result = nfs_opendir_async(ctx, path, Callback, this);
+ if (result < 0) {
+ error.Format(nfs_domain, "nfs_opendir_async() failed: %s",
+ nfs_get_error(ctx));
+ return false;
+ }
+
+ return true;
+}
+
+inline bool
NfsConnection::CancellableCallback::Open(nfs_context *ctx,
const char *path, int flags,
Error &error)
@@ -207,6 +222,34 @@ NfsConnection::Stat(const char *path, NfsCallback &callback, Error &error)
}
bool
+NfsConnection::OpenDirectory(const char *path, NfsCallback &callback,
+ Error &error)
+{
+ assert(!callbacks.Contains(callback));
+
+ auto &c = callbacks.Add(callback, *this, true);
+ if (!c.OpenDirectory(context, path, error)) {
+ callbacks.Remove(c);
+ return false;
+ }
+
+ ScheduleSocket();
+ return true;
+}
+
+const struct nfsdirent *
+NfsConnection::ReadDirectory(struct nfsdir *dir)
+{
+ return nfs_readdir(context, dir);
+}
+
+void
+NfsConnection::CloseDirectory(struct nfsdir *dir)
+{
+ return nfs_closedir(context, dir);
+}
+
+bool
NfsConnection::Open(const char *path, int flags, NfsCallback &callback,
Error &error)
{