diff options
author | Alexis211 <alexis211@gmail.com> | 2009-12-24 23:23:22 +0100 |
---|---|---|
committer | Alexis211 <alexis211@gmail.com> | 2009-12-24 23:23:22 +0100 |
commit | c4cb32b8534610a92931d825efefd6892e8412af (patch) | |
tree | 422755c6f7b93604823f3f4270ea6d46d0183326 /Source/Library | |
parent | 714902e17c91200f53d0ad9a356466ee60b59d98 (diff) | |
download | Melon-c4cb32b8534610a92931d825efefd6892e8412af.tar.gz Melon-c4cb32b8534610a92931d825efefd6892e8412af.zip |
More work on shell
Diffstat (limited to 'Source/Library')
-rw-r--r-- | Source/Library/Common/FileStream.class.cpp | 1 | ||||
-rw-r--r-- | Source/Library/Userland/App/StreamApp.proto.cpp | 8 | ||||
-rw-r--r-- | Source/Library/Userland/Binding/FSNode.class.h | 22 |
3 files changed, 31 insertions, 0 deletions
diff --git a/Source/Library/Common/FileStream.class.cpp b/Source/Library/Common/FileStream.class.cpp index 317a023..e53d11b 100644 --- a/Source/Library/Common/FileStream.class.cpp +++ b/Source/Library/Common/FileStream.class.cpp @@ -62,6 +62,7 @@ FileOStream::FileOStream(const String& filename, u8int mode, u8int encoding, FSN } FileOStream::~FileOStream() { + m_file->close(); delete m_file; } diff --git a/Source/Library/Userland/App/StreamApp.proto.cpp b/Source/Library/Userland/App/StreamApp.proto.cpp index b1dc7dd..90b8221 100644 --- a/Source/Library/Userland/App/StreamApp.proto.cpp +++ b/Source/Library/Userland/App/StreamApp.proto.cpp @@ -33,6 +33,14 @@ void StreamApp::init() { } else { FileIStream *f = new FileIStream(encoding, FS::cwdNode()); for (u32int i = 0; i < args.size(); i++) { + FSNode n = FS::find(args[i], FS::cwdNode()); + if (!n.valid()) { + outvt << "File does not exist : " << args[i] << ENDL; + exit(-1); + } else if (n.type() != NT_FILE) { + outvt << "Not a file : " << args[i] << ENDL; + exit(-1); + } f->appendFile(args[i]); } in = f; diff --git a/Source/Library/Userland/Binding/FSNode.class.h b/Source/Library/Userland/Binding/FSNode.class.h index a7adbc0..553197e 100644 --- a/Source/Library/Userland/Binding/FSNode.class.h +++ b/Source/Library/Userland/Binding/FSNode.class.h @@ -67,6 +67,28 @@ inline FSNode mkdir(String name, FSNode cwd = FSNode(0)) { return FSNode(RessourceCaller::sCall(FNIF_OBJTYPE, FNIF_SMKDIR, (u32int)&name, cwd.resId())); } +inline String dirname(String filename) { + int lastSlash = 0; + for (int i = 0; i < filename.size(); i++) { + if (filename[i] == WChar("/")) { + lastSlash = i; + } + } + if (lastSlash == 0 and filename[0] == WChar("/")) return "/"; + return filename.substr(0, lastSlash); +} + +inline String basename(String filename) { + int lastSlash = 0; + for (int i = 0; i < filename.size(); i++) { + if (filename[i] == WChar("/")) { + lastSlash = i; + } + } + if (lastSlash == 0 and filename[0] != WChar("/")) return filename; + return filename.substr(lastSlash + 1); +} + } #endif |