summaryrefslogtreecommitdiff
path: root/Source/Kernel/VFS/VFS.ns.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Kernel/VFS/VFS.ns.cpp')
-rw-r--r--Source/Kernel/VFS/VFS.ns.cpp43
1 files changed, 5 insertions, 38 deletions
diff --git a/Source/Kernel/VFS/VFS.ns.cpp b/Source/Kernel/VFS/VFS.ns.cpp
index fdfc265..e95b911 100644
--- a/Source/Kernel/VFS/VFS.ns.cpp
+++ b/Source/Kernel/VFS/VFS.ns.cpp
@@ -39,7 +39,7 @@ FSNode* find(const String& path, FSNode* start) {
return node;
}
-FSNode* createFile(const String& path, FSNode* start) {
+FSNode* createFile(const String& path, FSNode* start, bool vrfyperm) {
if (find(path, start) != NULL) return NULL; //Something already has that name.
if (start == 0) start = rootNode;
@@ -65,13 +65,12 @@ FSNode* createFile(const String& path, FSNode* start) {
}
if (node->type() == NT_DIRECTORY) {
- return ((DirectoryNode*)node)->createFile(name);
- } else {
- return NULL;
+ if ((vrfyperm && node->writable()) or !vrfyperm) return ((DirectoryNode*)node)->createFile(name);
}
+ return NULL;
}
-FSNode* createDirectory(const String& path, FSNode* start) {
+FSNode* createDirectory(const String& path, FSNode* start, bool vrfyperm) {
if (find(path, start) != NULL) return NULL; //Something already has that name.
if (start == 0) start = rootNode;
@@ -97,40 +96,8 @@ FSNode* createDirectory(const String& path, FSNode* start) {
}
if (node->type() == NT_DIRECTORY) {
- return ((DirectoryNode*)node)->createDirectory(name);
- } else {
- return NULL;
+ if ((vrfyperm && node->writable()) or !vrfyperm) return ((DirectoryNode*)node)->createDirectory(name);
}
-}
-
-//Same as createDirectory but checks for parent directory permissions for current process
-FSNode* mkdir(const String& path, FSNode* start) {
- if (find(path, start) != NULL) return NULL; //Something already has that name.
- if (start == 0) start = rootNode;
-
- Vector<String> p = path.split("/");
- String name = p.back();
- p.pop();
-
- FSNode* node = start;
- if (!path.empty()) {
- if (p[0].empty()) node = rootNode;
- for (u32int i = 0; i < p.size(); i++) {
- if (p[i] == "..") {
- node = node->getParent();
- } else if (!p[i].empty() and p[i] != ".") {
- if (node->type() == NT_DIRECTORY) {
- node = ((DirectoryNode*)node)->getChild(p[i]);
- } else {
- node = NULL;
- }
- }
- if (node == NULL) return node;
- }
- }
-
- if (node->type() == NT_DIRECTORY)
- if (node->writable()) return ((DirectoryNode*)node)->createDirectory(name);
return NULL;
}