diff options
Diffstat (limited to 'chdir.c')
-rw-r--r-- | chdir.c | 54 |
1 files changed, 54 insertions, 0 deletions
@@ -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; +} |