Prepare devfs file system

This commit is contained in:
Baptiste Wicht 2014-03-06 17:39:27 +01:00
parent a8770c42bd
commit fae7afbdb2
4 changed files with 122 additions and 0 deletions

View File

@ -0,0 +1,40 @@
//=======================================================================
// 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)
//=======================================================================
#ifndef DEVFS_HPP
#define DEVFS_HPP
#include <vector.hpp>
#include <string.hpp>
#include <pair.hpp>
#include "vfs/file_system.hpp"
namespace devfs {
struct devfs_file_system : vfs::file_system {
private:
std::string mount_point;
public:
devfs_file_system(std::string mount_point);
~devfs_file_system();
size_t statfs(statfs_info& file);
size_t read(const std::vector<std::string>& file_path, char* buffer, size_t count, size_t offset, size_t& read);
size_t write(const std::vector<std::string>& file_path, const char* buffer, size_t count, size_t offset, size_t& written);
size_t truncate(const std::vector<std::string>& file_path, size_t size);
size_t get_file(const std::vector<std::string>& file_path, vfs::file& file);
size_t ls(const std::vector<std::string>& file_path, std::vector<vfs::file>& contents);
size_t touch(const std::vector<std::string>& file_path);
size_t mkdir(const std::vector<std::string>& file_path);
size_t rm(const std::vector<std::string>& file_path);
};
}
#endif

View File

@ -16,6 +16,7 @@ namespace vfs {
enum class partition_type {
FAT32,
SYSFS,
DEVFS,
UNKNOWN
};

68
kernel/src/fs/devfs.cpp Normal file
View File

@ -0,0 +1,68 @@
//=======================================================================
// 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 <types.hpp>
#include <unique_ptr.hpp>
#include <algorithms.hpp>
#include <errors.hpp>
#include "fs/devfs.hpp"
#include "console.hpp"
namespace {
} //end of anonymous namespace
devfs::devfs_file_system::devfs_file_system(std::string mp) : mount_point(mp) {
//Nothing to init
}
devfs::devfs_file_system::~devfs_file_system(){
//Nothing to delete
}
size_t devfs::devfs_file_system::get_file(const std::vector<std::string>& file_path, vfs::file& f){
//TODO
}
size_t devfs::devfs_file_system::read(const std::vector<std::string>& file_path, char* buffer, size_t count, size_t offset, size_t& read){
//TODO
}
size_t devfs::devfs_file_system::write(const std::vector<std::string>&, const char*, size_t, size_t, size_t&){
//TODO
}
size_t devfs::devfs_file_system::truncate(const std::vector<std::string>& file_path, size_t size){
return std::ERROR_PERMISSION_DENIED;
}
size_t devfs::devfs_file_system::ls(const std::vector<std::string>& file_path, std::vector<vfs::file>& contents){
//TODO
}
size_t devfs::devfs_file_system::touch(const std::vector<std::string>& ){
return std::ERROR_PERMISSION_DENIED;
}
size_t devfs::devfs_file_system::mkdir(const std::vector<std::string>& ){
return std::ERROR_PERMISSION_DENIED;
}
size_t devfs::devfs_file_system::rm(const std::vector<std::string>& ){
return std::ERROR_PERMISSION_DENIED;
}
size_t devfs::devfs_file_system::statfs(statfs_info& file){
file.total_size = 0;
file.free_size = 0;
return 0;
}

View File

@ -17,6 +17,7 @@
#include "fs/fat32.hpp"
#include "fs/sysfs.hpp"
#include "fs/devfs.hpp"
#include "scheduler.hpp"
#include "flags.hpp"
@ -48,6 +49,8 @@ std::string partition_type_to_string(vfs::partition_type type){
return "FAT32";
case vfs::partition_type::SYSFS:
return "sysfs";
case vfs::partition_type::DEVFS:
return "devfs";
case vfs::partition_type::UNKNOWN:
return "Unknown";
default:
@ -66,6 +69,10 @@ void mount_sys(){
mount(vfs::partition_type::SYSFS, "/sys/", "none");
}
void mount_dev(){
mount(vfs::partition_type::DEVFS, "/dev/", "none");
}
std::vector<std::string> get_path(const char* file_path){
std::string file(file_path);
@ -132,6 +139,7 @@ std::vector<std::string> get_fs_path(const std::vector<std::string>& path, const
void vfs::init(){
mount_root();
mount_sys();
mount_dev();
}
int64_t vfs::mount(partition_type type, const char* mount_point, const char* device){
@ -148,6 +156,11 @@ int64_t vfs::mount(partition_type type, const char* mount_point, const char* dev
break;
case vfs::partition_type::DEVFS:
fs = new devfs::devfs_file_system(mount_point);
break;
default:
return -std::ERROR_INVALID_FILE_SYSTEM;
}