summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--netfs/ice/entryResolver.h7
-rw-r--r--netfs/ice/typeConverter.cpp2
-rw-r--r--netfs/ice/typeConverter.h8
-rw-r--r--netfs/lib/entCache.cpp16
-rw-r--r--netfs/lib/entCache.h2
5 files changed, 15 insertions, 20 deletions
diff --git a/netfs/ice/entryResolver.h b/netfs/ice/entryResolver.h
index b5efbc3..cbdc789 100644
--- a/netfs/ice/entryResolver.h
+++ b/netfs/ice/entryResolver.h
@@ -1,16 +1,11 @@
#ifndef NETFS_ENTRYRESOLVER_H
#define NETFS_ENTRYRESOLVER_H
-#include <string>
-#include <stdlib.h>
-
-template <class entry_t>
+template <typename id_t, typename name_t>
class EntryResolver {
public:
virtual ~EntryResolver() = default;
- using name_t = std::string;
-
virtual void getID(const name_t &, id_t *) const = 0;
virtual void getName(const id_t &, name_t *) const = 0;
};
diff --git a/netfs/ice/typeConverter.cpp b/netfs/ice/typeConverter.cpp
index 0e3ce7f..8e75326 100644
--- a/netfs/ice/typeConverter.cpp
+++ b/netfs/ice/typeConverter.cpp
@@ -1,7 +1,7 @@
#include "typeConverter.h"
#include <boost/numeric/conversion/cast.hpp>
-EntryTypeConverter::EntryTypeConverter(const EntryResolver<uid_t> & u, const EntryResolver<gid_t> & g) :
+EntryTypeConverter::EntryTypeConverter(const UserLookup & u, const GroupLookup & g) :
userLookup(u),
groupLookup(g)
{
diff --git a/netfs/ice/typeConverter.h b/netfs/ice/typeConverter.h
index b8d6fcd..fedd204 100644
--- a/netfs/ice/typeConverter.h
+++ b/netfs/ice/typeConverter.h
@@ -16,15 +16,17 @@ class DLL_PUBLIC TypeConverter {
class DLL_PUBLIC EntryTypeConverter : public TypeConverter {
public:
- EntryTypeConverter(const EntryResolver<uid_t> &, const EntryResolver<gid_t> &);
+ using UserLookup = EntryResolver<uid_t, std::string>;
+ using GroupLookup = EntryResolver<gid_t, std::string>;
+ EntryTypeConverter(const UserLookup &, const GroupLookup &);
// Attributes
struct stat convert(const NetFS::Attr &) const;
NetFS::Attr convert(const struct stat &) const;
protected:
- const EntryResolver<uid_t> & userLookup;
- const EntryResolver<gid_t> & groupLookup;
+ const UserLookup & userLookup;
+ const GroupLookup & groupLookup;
};
#endif
diff --git a/netfs/lib/entCache.cpp b/netfs/lib/entCache.cpp
index 9b78dff..d62f4bf 100644
--- a/netfs/lib/entCache.cpp
+++ b/netfs/lib/entCache.cpp
@@ -54,18 +54,16 @@ template<class key_t>
typename EntCache<entry_t>::entry_ptr
EntCache<entry_t>::getEntry(const key_t & key) const
{
- typename EntCache<entry_t>::entry_ptr ent;
if (fillTime + 60 > time(nullptr)) {
- ent = getEntryNoFill<key_t>(key);
- }
- if (!ent) {
- fillCache();
- ent = getEntryNoFill<key_t>(key);
+ if (auto ent = getEntryNoFill<key_t>(key)) {
+ return ent;
+ }
}
- if (!ent) {
- throw NetFS::SystemError(EPERM);
+ fillCache();
+ if (auto ent = getEntryNoFill<key_t>(key)) {
+ return ent;
}
- return ent;
+ throw NetFS::SystemError(EPERM);
}
template<class entry_t>
diff --git a/netfs/lib/entCache.h b/netfs/lib/entCache.h
index 73cd36d..9facdb3 100644
--- a/netfs/lib/entCache.h
+++ b/netfs/lib/entCache.h
@@ -26,7 +26,7 @@ class Group {
};
template<class entry_t>
-class EntCache : public EntryResolver<decltype(entry_t::id)> {
+class EntCache : public EntryResolver<decltype(entry_t::id), decltype(entry_t::name)> {
public:
EntCache();
~EntCache() override;