diff options
author | Marc Laukien <marc@zeroc.com> | 2002-04-14 22:53:32 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2002-04-14 22:53:32 +0000 |
commit | 91300e7dbe6528b6b887fbf8734ed1c49e437b55 (patch) | |
tree | 306ec331004b79146ff0ef217dde0aae1129b382 /cpp/src/IcePatch/FileLocator.cpp | |
parent | udp fixes (diff) | |
download | ice-91300e7dbe6528b6b887fbf8734ed1c49e437b55.tar.bz2 ice-91300e7dbe6528b6b887fbf8734ed1c49e437b55.tar.xz ice-91300e7dbe6528b6b887fbf8734ed1c49e437b55.zip |
fixes to IcePatch
Diffstat (limited to 'cpp/src/IcePatch/FileLocator.cpp')
-rw-r--r-- | cpp/src/IcePatch/FileLocator.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/cpp/src/IcePatch/FileLocator.cpp b/cpp/src/IcePatch/FileLocator.cpp new file mode 100644 index 00000000000..182db254f85 --- /dev/null +++ b/cpp/src/IcePatch/FileLocator.cpp @@ -0,0 +1,99 @@ +// **********************************************************************
+//
+// Copyright (c) 2002
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <IcePatch/FileLocator.h>
+#include <IcePatch/Util.h>
+#include <IcePatch/IcePatchI.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IcePatch;
+
+IcePatch::FileLocator::FileLocator(const Ice::ObjectAdapterPtr& adapter) :
+ _directory(new DirectoryI(adapter)),
+ _regular(new RegularI(adapter))
+{
+}
+
+ObjectPtr
+IcePatch::FileLocator::locate(const ObjectAdapterPtr& adapter, const Current& current, LocalObjectPtr&)
+{
+ //
+ // Check whether the path is valid.
+ //
+ string path = identityToPath(current.identity);
+
+ if (path.empty())
+ {
+ return 0;
+ }
+
+ if (path[0] == '/') // Path must not start with '/'.
+ {
+ return 0;
+ }
+
+ if (path.find("..") != string::npos) // Path must not contain '..'.
+ {
+ return 0;
+ }
+
+ if (path.find(':') == 1) // Path cannot contain ':' as second character.
+ {
+ return 0;
+ }
+
+ FileInfo info;
+ try
+ {
+ info = getFileInfo(path, true);
+ }
+ catch (const FileAccessException& ex)
+ {
+ Warning out(adapter->getCommunicator()->getLogger());
+ out << ex << ":\n" << ex.reason;
+ return 0;
+ }
+
+ switch (info.type)
+ {
+ case FileTypeDirectory:
+ {
+ return _directory;
+ }
+
+ case FileTypeRegular:
+ {
+ return _regular;
+ }
+
+ default:
+ {
+ return 0;
+ }
+ }
+}
+
+void
+IcePatch::FileLocator::finished(const ObjectAdapterPtr&, const Current& current, const ObjectPtr&,
+ const LocalObjectPtr&)
+{
+ // Nothing to do.
+}
+
+void
+IcePatch::FileLocator::deactivate()
+{
+ //
+ // Break cyclic dependencies.
+ //
+ _directory = 0;
+ _regular = 0;
+}
|