From c57844b08bced71778f38f2346464c3e0836287c Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 1 Nov 2019 22:06:40 +0100 Subject: Add some functions and add functions with _failed suffix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- chdir.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 chdir.c (limited to 'chdir.c') diff --git a/chdir.c b/chdir.c new file mode 100644 index 0000000..9ed27a4 --- /dev/null +++ b/chdir.c @@ -0,0 +1,54 @@ +/* See LICENSE file for copyright and license details. */ +#include "internal.h" + + +void +liberror_chdir_failed(const char *path) +{ + const char *desc; + switch (errno) { + case EFAULT: + if (!path) + desc = "Path parameter is NULL"; + else + desc = "Path parameter is an invalid pointer"; + break; + case EACCES: + desc = "Search permission is denied for any component of the path"; + break; + case ELOOP: + desc = "A symbolic link chain in the path too long or circular"; + break; + case ENAMETOOLONG: + desc = "The canonical path or intermediate result in pathname resolution is too long"; + break; + case ENOENT: + if (!*path) + desc = "Path parameter is the empty string"; + else + desc = "A component of path does not name an existing directory"; + break; + case ENOTDIR: + desc = "A component of path is not a directory"; + break; + case ENOMEM: + desc = "Insufficient kernel memory was available"; + break; + case EIO: + default: + desc = ""; + break; + } + liberror_libc_set_error_one_file(desc, "chdir", "Directory file", -1, path); +} + + +int +liberror_chdir(const char *path) +{ + if (!chdir(path)) + return 0; + liberror_save_backtrace(NULL); + liberror_chdir_failed(path); + return -1; +} -- cgit v1.2.3-70-g09d2