From 1779a0511b5221ceaaedeac94b22b3f32000da19 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 1 Oct 2015 11:53:00 +0200 Subject: [PATCH] vfs: add new error codes The codes are OPEN_ERR_NAME_TOO_LONG, OPEN_ERR_NO_SPACE, and FTRUNCATE_ERR_NO_SPACE. Issue #1693 --- repos/libports/src/lib/libc/vfs_plugin.cc | 19 ++++++++++++------- repos/os/include/vfs/directory_service.h | 2 ++ repos/os/include/vfs/file_io_service.h | 3 ++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/repos/libports/src/lib/libc/vfs_plugin.cc b/repos/libports/src/lib/libc/vfs_plugin.cc index d55359c8f..749ec2ae4 100644 --- a/repos/libports/src/lib/libc/vfs_plugin.cc +++ b/repos/libports/src/lib/libc/vfs_plugin.cc @@ -295,14 +295,18 @@ Libc::File_descriptor *Libc::Vfs_plugin::open(char const *path, int flags, /* file has been created by someone else in the meantime */ break; - case Result::OPEN_ERR_NO_PERM: errno = EPERM; return 0; - case Result::OPEN_ERR_UNACCESSIBLE: errno = ENOENT; return 0; + case Result::OPEN_ERR_NO_PERM: errno = EPERM; return 0; + case Result::OPEN_ERR_UNACCESSIBLE: errno = ENOENT; return 0; + case Result::OPEN_ERR_NAME_TOO_LONG: errno = ENAMETOOLONG; return 0; + case Result::OPEN_ERR_NO_SPACE: errno = ENOSPC; return 0; } } break; - case Result::OPEN_ERR_NO_PERM: errno = EPERM; return 0; - case Result::OPEN_ERR_EXISTS: errno = EEXIST; return 0; + case Result::OPEN_ERR_NO_PERM: errno = EPERM; return 0; + case Result::OPEN_ERR_EXISTS: errno = EEXIST; return 0; + case Result::OPEN_ERR_NAME_TOO_LONG: errno = ENAMETOOLONG; return 0; + case Result::OPEN_ERR_NO_SPACE: errno = ENOSPC; return 0; } } @@ -662,9 +666,10 @@ int Libc::Vfs_plugin::ftruncate(Libc::File_descriptor *fd, ::off_t length) typedef Vfs::File_io_service::Ftruncate_result Result; switch (handle->fs().ftruncate(handle, length)) { - case Result::FTRUNCATE_ERR_NO_PERM: errno = EPERM; return -1; - case Result::FTRUNCATE_ERR_INTERRUPT: errno = EINTR; return -1; - case Result::FTRUNCATE_OK: break; + case Result::FTRUNCATE_ERR_NO_PERM: errno = EPERM; return -1; + case Result::FTRUNCATE_ERR_INTERRUPT: errno = EINTR; return -1; + case Result::FTRUNCATE_ERR_NO_SPACE: errno = ENOSPC; return -1; + case Result::FTRUNCATE_OK: break; } return 0; } diff --git a/repos/os/include/vfs/directory_service.h b/repos/os/include/vfs/directory_service.h index ca66053ad..cda7e11d5 100644 --- a/repos/os/include/vfs/directory_service.h +++ b/repos/os/include/vfs/directory_service.h @@ -51,6 +51,8 @@ struct Vfs::Directory_service OPEN_ERR_UNACCESSIBLE, OPEN_ERR_NO_PERM, OPEN_ERR_EXISTS, + OPEN_ERR_NAME_TOO_LONG, + OPEN_ERR_NO_SPACE, OPEN_OK }; diff --git a/repos/os/include/vfs/file_io_service.h b/repos/os/include/vfs/file_io_service.h index 38beedea0..638f908af 100644 --- a/repos/os/include/vfs/file_io_service.h +++ b/repos/os/include/vfs/file_io_service.h @@ -55,7 +55,8 @@ struct Vfs::File_io_service ***************/ enum Ftruncate_result { FTRUNCATE_ERR_NO_PERM = NUM_GENERAL_ERRORS, - FTRUNCATE_ERR_INTERRUPT, FTRUNCATE_OK }; + FTRUNCATE_ERR_INTERRUPT, FTRUNCATE_ERR_NO_SPACE, + FTRUNCATE_OK }; virtual Ftruncate_result ftruncate(Vfs_handle *vfs_handle, file_size len) = 0;