Commit 61b3aaaa authored by Max Kellermann's avatar Max Kellermann

lib/nfs/Connection: add method Stat(path)

parent b5119d79
...@@ -35,6 +35,21 @@ extern "C" { ...@@ -35,6 +35,21 @@ extern "C" {
#include <poll.h> /* for POLLIN, POLLOUT */ #include <poll.h> /* for POLLIN, POLLOUT */
inline bool inline bool
NfsConnection::CancellableCallback::Stat(nfs_context *ctx,
const char *path,
Error &error)
{
int result = nfs_stat_async(ctx, path, Callback, this);
if (result < 0) {
error.Format(nfs_domain, "nfs_stat_async() failed: %s",
nfs_get_error(ctx));
return false;
}
return true;
}
inline bool
NfsConnection::CancellableCallback::Open(nfs_context *ctx, NfsConnection::CancellableCallback::Open(nfs_context *ctx,
const char *path, int flags, const char *path, int flags,
Error &error) Error &error)
...@@ -177,6 +192,21 @@ NfsConnection::RemoveLease(NfsLease &lease) ...@@ -177,6 +192,21 @@ NfsConnection::RemoveLease(NfsLease &lease)
} }
bool bool
NfsConnection::Stat(const char *path, NfsCallback &callback, Error &error)
{
assert(!callbacks.Contains(callback));
auto &c = callbacks.Add(callback, *this, false);
if (!c.Stat(context, path, error)) {
callbacks.Remove(c);
return false;
}
ScheduleSocket();
return true;
}
bool
NfsConnection::Open(const char *path, int flags, NfsCallback &callback, NfsConnection::Open(const char *path, int flags, NfsCallback &callback,
Error &error) Error &error)
{ {
......
...@@ -64,6 +64,8 @@ class NfsConnection : SocketMonitor, DeferredMonitor { ...@@ -64,6 +64,8 @@ class NfsConnection : SocketMonitor, DeferredMonitor {
connection(_connection), connection(_connection),
open(_open), close_fh(nullptr) {} open(_open), close_fh(nullptr) {}
bool Stat(nfs_context *context, const char *path,
Error &error);
bool Open(nfs_context *context, const char *path, int flags, bool Open(nfs_context *context, const char *path, int flags,
Error &error); Error &error);
bool Stat(nfs_context *context, struct nfsfh *fh, bool Stat(nfs_context *context, struct nfsfh *fh,
...@@ -155,6 +157,7 @@ public: ...@@ -155,6 +157,7 @@ public:
void AddLease(NfsLease &lease); void AddLease(NfsLease &lease);
void RemoveLease(NfsLease &lease); void RemoveLease(NfsLease &lease);
bool Stat(const char *path, NfsCallback &callback, Error &error);
bool Open(const char *path, int flags, NfsCallback &callback, bool Open(const char *path, int flags, NfsCallback &callback,
Error &error); Error &error);
bool Stat(struct nfsfh *fh, NfsCallback &callback, Error &error); bool Stat(struct nfsfh *fh, NfsCallback &callback, Error &error);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment