From 934f6f3a189c28a4e905a8b976bfe2044daeeca5 Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Sun, 23 Feb 2014 23:07:58 +0100 Subject: [PATCH] Add cd command --- .gitignore | 2 ++ kernel/src/scheduler.cpp | 14 +++++++++- kernel/src/system_calls.cpp | 3 +- kernel/src/vfs.cpp | 17 +++++++----- programs/Makefile | 2 +- programs/cd/Makefile | 15 ++++++++++ programs/cd/cat | Bin 0 -> 89689 bytes programs/cd/src/main.cpp | 54 ++++++++++++++++++++++++++++++++++++ programs/which/which | Bin 78036 -> 0 bytes tlib/include/file.hpp | 1 + tlib/src/file.cpp | 7 +++++ tstl/include/vector.hpp | 14 +++++----- 12 files changed, 112 insertions(+), 17 deletions(-) create mode 100644 programs/cd/Makefile create mode 100755 programs/cd/cat create mode 100644 programs/cd/src/main.cpp delete mode 100755 programs/which/which diff --git a/.gitignore b/.gitignore index 0cf335fc..7a5d12f0 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,6 @@ programs/keyboard/keyboard programs/longtwo/longtwo programs/longone/longone programs/pwd/pwd +programs/which/which +programs/cd/cd programs/dist/ \ No newline at end of file diff --git a/kernel/src/scheduler.cpp b/kernel/src/scheduler.cpp index 229c35fb..05c48494 100644 --- a/kernel/src/scheduler.cpp +++ b/kernel/src/scheduler.cpp @@ -25,7 +25,7 @@ #include "physical_pointer.hpp" #include "mutex.hpp" -constexpr const bool DEBUG_SCHEDULER = true; +constexpr const bool DEBUG_SCHEDULER = false; //Provided by task_switch.s extern "C" { @@ -863,11 +863,23 @@ const std::string& scheduler::get_handle(size_t fd){ } const std::vector& scheduler::get_working_directory(){ + k_print_line(); + k_print_line("5"); + k_print_line(pcb[current_pid].working_directory.size()); + k_print_line(); return pcb[current_pid].working_directory; } void scheduler::set_working_directory(const std::vector& directory){ + k_print_line(); + k_print_line("3"); + k_print_line(directory.size()); + k_print_line(); pcb[current_pid].working_directory = directory; + k_print_line(); + k_print_line("4"); + k_print_line(pcb[current_pid].working_directory.size()); + k_print_line(); } //Provided for task_switch.s diff --git a/kernel/src/system_calls.cpp b/kernel/src/system_calls.cpp index 1610e3a9..1518c78c 100644 --- a/kernel/src/system_calls.cpp +++ b/kernel/src/system_calls.cpp @@ -131,7 +131,7 @@ void sc_read(interrupt::syscall_regs* regs){ } void sc_pwd(interrupt::syscall_regs* regs){ - auto wd = scheduler::get_working_directory(); + auto& wd = scheduler::get_working_directory(); std::string path; path += '/'; @@ -152,6 +152,7 @@ void sc_cwd(interrupt::syscall_regs* regs){ auto p = reinterpret_cast(regs->rbx); std::string path(p); + auto cwd = std::split(path, '/'); scheduler::set_working_directory(cwd); } diff --git a/kernel/src/vfs.cpp b/kernel/src/vfs.cpp index 3b6e0a31..3c18cfe0 100644 --- a/kernel/src/vfs.cpp +++ b/kernel/src/vfs.cpp @@ -29,22 +29,25 @@ int64_t vfs::open(const char* file_path){ return -std::ERROR_INVALID_FILE_PATH; } + std::vector path; + if(file[0] != '/'){ - return -std::ERROR_INVALID_FILE_PATH; + for(auto& part : scheduler::get_working_directory()){ + path.push_back(part); + } } auto parts = std::split(file, '/'); - - if(parts.empty()){ - return -std::ERROR_INVALID_FILE_PATH; + for(auto& part : parts){ + path.push_back(part); } - auto last = parts.back(); - parts.pop_back(); + auto last = path.back(); + path.pop_back(); //TODO file search should be done entirely by the file system - auto files = fat32::ls(*disks::mounted_disk(), *disks::mounted_partition(), parts); + auto files = fat32::ls(*disks::mounted_disk(), *disks::mounted_partition(), path); for(auto& f : files){ if(f.file_name == last){ diff --git a/programs/Makefile b/programs/Makefile index 217ed095..302378cd 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -1,6 +1,6 @@ .PHONY: dist default clean force_look -PROGRAMS=one hello long loop longone longtwo keyboard tsh cpuid shutdown reboot args stat cat which pwd +PROGRAMS=one hello long loop longone longtwo keyboard tsh cpuid shutdown reboot args stat cat which pwd cd default: dist diff --git a/programs/cd/Makefile b/programs/cd/Makefile new file mode 100644 index 00000000..bb1d26ab --- /dev/null +++ b/programs/cd/Makefile @@ -0,0 +1,15 @@ +.PHONY: default clean + +default: cd + +include ../../cpp.mk + +%.cpp.o: src/%.cpp + $(CC) -c $< -o $@ $(PROGRAM_FLAGS) + +cd: main.cpp.o + $(CC) -o cd main.cpp.o $(PROGRAM_LINK_FLAGS) + +clean: + rm -f *.cpp.o + rm -rf cd diff --git a/programs/cd/cat b/programs/cd/cat new file mode 100755 index 0000000000000000000000000000000000000000..1c8abe6a094ab96056f7a15bf70bb23a78d0fe87 GIT binary patch literal 89689 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 VR8U^&^qsV$8T2(5udi^k{0DXr*?s^3 literal 0 HcmV?d00001 diff --git a/programs/cd/src/main.cpp b/programs/cd/src/main.cpp new file mode 100644 index 00000000..43894e11 --- /dev/null +++ b/programs/cd/src/main.cpp @@ -0,0 +1,54 @@ +//======================================================================= +// Copyright Baptiste Wicht 2013-2014. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +//======================================================================= + +#include +#include +#include +#include + +int main(int argc, char* argv[]){ + if(argc == 1){ + print_line("Usage: cd file_path"); + exit(1); + } + + std::string path(argv[1]); + + auto fd = open(path.c_str()); + + if(fd.valid()){ + auto info = stat(*fd); + + if(info.valid()){ + if(!(info->flags & STAT_FLAG_DIRECTORY)){ + print_line("cat: error: Is not a directory"); + } else { + auto cwd = current_working_directory(); + + if(path[0] == '/'){ + cwd = "/"; + } + + auto parts = std::split(path, '/'); + for(auto& part : parts){ + cwd += part; + cwd += '/'; + } + + set_current_working_directory(cwd); + } + } else { + printf("cd: error: %s\n", std::error_message(info.error())); + } + + close(*fd); + } else { + printf("cd: error: %s\n", std::error_message(fd.error())); + } + + exit(0); +} \ No newline at end of file diff --git a/programs/which/which b/programs/which/which deleted file mode 100755 index c3d945edeeb4bf890e9750ab7f04ac5ace61cce0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78036 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 F|G#gv-BbVo diff --git a/tlib/include/file.hpp b/tlib/include/file.hpp index d501b953..2cee5321 100644 --- a/tlib/include/file.hpp +++ b/tlib/include/file.hpp @@ -19,5 +19,6 @@ void close(size_t fd); std::expected stat(size_t fd); std::string current_working_directory(); +void set_current_working_directory(const std::string& directory); #endif diff --git a/tlib/src/file.cpp b/tlib/src/file.cpp index bb53fe08..48df6b09 100644 --- a/tlib/src/file.cpp +++ b/tlib/src/file.cpp @@ -68,3 +68,10 @@ std::string current_working_directory(){ return {buffer}; } + +void set_current_working_directory(const std::string& directory){ + asm volatile("mov rax, 305; mov rbx, %[buffer]; int 50;" + : /* No outputs */ + : [buffer] "g" (reinterpret_cast(directory.c_str())) + : "rax", "rbx"); +} diff --git a/tstl/include/vector.hpp b/tstl/include/vector.hpp index db8438d7..91689cc3 100644 --- a/tstl/include/vector.hpp +++ b/tstl/include/vector.hpp @@ -50,15 +50,15 @@ public: data = nullptr; } - _size = rhs._size; - _capacity = rhs._capacity; - - if(!rhs.empty()){ + if(_capacity < rhs._capacity){ + _capacity = rhs._capacity; data = new T[_capacity]; + } - for(size_t i = 0; i < _size; ++i){ - data[i] = rhs.data[i]; - } + _size = rhs._size; + + for(size_t i = 0; i < _size; ++i){ + data[i] = rhs.data[i]; } return *this;