%% options copyright owner = Dirk Krause copyright year = 2019-xxxx SPDX-License-Identifier: BSD-3-Clause %% header /** @file dk4chdirw.h Change current working directory. */ #ifndef DK4CONF_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4conf.h" #else #include #endif #endif #ifndef DK4ERROR_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4error.h" #else #include #endif #endif #ifdef __cplusplus extern "C" { #endif /** Change current working directory. @param nd Name of new directory. @param erp Error report, may be NULL. @return 1 on success, 0 on error. CRT on Windows: Optional. Error codes: - DK4_E_INVALID_ARGUMENTS
if nd is NULL, - DK4_E_NOT_SUPPORTEDy
if the operation is not supported on the current system, - DK4_E_SYSTEM
with error code in lDetails1 or iDetails1 if the operation is supported but did fail. */ int dk4chdir_wc(const wchar_t *nd, dk4_er_t *erp); #ifdef __cplusplus } #endif /* vim: set ai sw=4 ts=4 : */ %% module #include "dk4conf.h" #include "dk4chdirw.h" #if DK4_ON_WINDOWS #ifndef WINDOWS_H_INCLUDED #include #define WINDOWS_H_INCLUDED 1 #endif #endif #if DK4_HAVE_UNISTD_H #ifndef UNISTD_H_INCLUDED #include #define UNISTD_H_INCLUDED 1 #endif #endif #if DK4_HAVE_STDLIB_H #ifndef STDLIB_H_INCLUDED #include #define STDLIB_H_INCLUDED 1 #endif #endif #if DK4_HAVE_DIRECT_H #ifndef DIRECT_H_INCLUDED #include #define DIRECT_H_INCLUDED 1 #endif #endif #if DK4_HAVE_ERRNO_H #ifndef ERRNO_H_INCLUDED #include #define ERRNO_H_INCLUDED 1 #endif #endif #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif $!trace-include int dk4chdir_wc(const wchar_t *nd, dk4_er_t *erp) { int back = 0; $? "+ dk4chdir_wc \"%!ws\"", TR_LSTR(nd) #if DK4_USE_ASSERT assert(NULL != nd); #endif if (NULL != nd) { #if DK4_ON_WINDOWS #if DK4_WIN_AVOID_CRT || DK4_WIN_DENY_CRT if (SetCurrentDirectoryW(nd)) { back = 1; } else { $? "! SetCurrentDirectoryW" dk4error_set_ldetails(erp, DK4_E_SYSTEM, GetLastError()); } #else if (0 == _wchdir(nd)) { back = 1; } else { $? "! _wchdir" dk4error_set_idetails(erp, DK4_E_SYSTEM, errno); } #endif #else $? "! not supported" dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); #endif } else { $? "! nd" dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } $? "- dk4chdir_wc %d", back return back; } /* vim: set ai sw=4 ts=4 : */