/* WARNING: This file was generated by dkct. Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4filei.ctr */ /* Copyright (C) 2015-2017, Dirk Krause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above opyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef DK4FILEI_H_INCLUDED /** Avoid multiple inclusions. */ #define DK4FILEI_H_INCLUDED 1 #line 9 "dk4filei.ctr" /** @file Functions for file information. */ #ifndef DK4FILEIT_H_INCLUDED #include "dk4fileit.h" #endif #ifndef DK4UFI_H_INCLUDED #include "dk4ufi.h" #endif #ifndef DK4ERROR_H_INCLUDED #include "dk4error.h" #endif #ifdef __cplusplus extern "C" { #endif /** Initialize a file information structure. @param dptr File information structure to initialize. */ void dk4fileinfo_init(dk4_file_info_t *dptr); /** Retrieve full information for a path name. For symbolic links attempt to retrieve information both about the link and about the link target. CRT on Windows: Not used. @param dptr Pointer to result structure. @param fn File path name. @param erp Error report, may be NULL. @return 1 if information is found, 0 otherwise. If information about the link is found and no information about the target, the function returns 1 as we can recognize the directory item as a dangling link (link with non-existing target). Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fn is NULL, - DK4_E_SYSTEM
with errno value stored in iDetails1 if the stat() function fails on non-Windows systems. - DK4_E_SYSTEM
with GetLastError() value stored in lDetails1 if the GetFileAttributes() function failed, - DK4_E_CREATE_FILE_FAILED
with GetLastError() value stored in lDetails1 if the CreateFile() function failed on Windows systems, - DK4_E_FILE_INFORMATION_FAILED
with GetLastError() value stored in lDetails1 if the GetFileInformationByHandle() function failed on Windows systems, - DK4_E_FINDFIRSTFILE_FAILED
with GetLastError() value stored in lDetails1 if the FindFirstFile() function failed on Windows systems. */ int dk4fileinfo_c8(dk4_file_info_t *dptr, const char *fn, dk4_er_t *erp); /** Retrieve full information for a path name. For symbolic links attempt to retrieve information both about the link and about the link target. CRT on Windows: Not used. @param dptr Pointer to result structure. @param fn File path name. @param erp Error report, may be NULL. @return 1 if information is found, 0 otherwise. If information about the link is found and no information about the target, the function returns 1 as we can recognize the directory item as a dangling link (link with non-existing target). Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fn is NULL, - DK4_E_SYSTEM
with errno value stored in iDetails1 if the stat() function fails on non-Windows systems. - DK4_E_SYSTEM
with GetLastError() value stored in lDetails1 if the GetFileAttributes() function failed, - DK4_E_CREATE_FILE_FAILED
with GetLastError() value stored in lDetails1 if the CreateFile() function failed on Windows systems, - DK4_E_FILE_INFORMATION_FAILED
with GetLastError() value stored in lDetails1 if the GetFileInformationByHandle() function failed on Windows systems, - DK4_E_FINDFIRSTFILE_FAILED
with GetLastError() value stored in lDetails1 if the FindFirstFile() function failed on Windows systems. */ int dk4fileinfo_wc(dk4_file_info_t *dptr, const wchar_t *fn, dk4_er_t *erp); /** Retrieve full information for a path name. For symbolic links attempt to retrieve information both about the link and about the link target. CRT on Windows: Not used. @param dptr Pointer to result structure. @param fn File path name. @param erp Error report, may be NULL. @return 1 if information is found, 0 otherwise. If information about the link is found and no information about the target, the function returns 1 as we can recognize the directory item as a dangling link (link with non-existing target). Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fn is NULL, - DK4_E_SYSTEM
with errno value stored in iDetails1 if the stat() function fails on non-Windows systems. - DK4_E_SYSTEM
with GetLastError() value stored in lDetails1 if the GetFileAttributes() function failed, - DK4_E_CREATE_FILE_FAILED
with GetLastError() value stored in lDetails1 if the CreateFile() function failed on Windows systems, - DK4_E_FILE_INFORMATION_FAILED
with GetLastError() value stored in lDetails1 if the GetFileInformationByHandle() function failed on Windows systems, - DK4_E_FINDFIRSTFILE_FAILED
with GetLastError() value stored in lDetails1 if the FindFirstFile() function failed on Windows systems. */ int dk4fileinfo(dk4_file_info_t *dptr, const dkChar *fn, dk4_er_t *erp); /** Retrieve timestamp from file information structure. @param dptr Destination buffer pointer. @param szdptr Destination buffer size. @param fi File information structure. @param chfile For symolic links, choose information source: DK4_FILE_INFO_CONTENTS_DATA_LINK for the link itself, DK4_FILE_INFO_CONTENTS_DATA_TARGET for the link target. @param chtime Choose timestamp: DK4_FILE_INFO_TIME_CREATE for creation time, DK4_FILE_INFO_TIME_MODIFY for modification time, DK4_FILE_INFO_TIME_ACCESS for last access time. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fi is NULL or szdptr is 0, - DK4_E_NOT_FOUND
if the required information is not found in the file information structure. */ int dk4fileinfo_timestamp_c8( char *dptr, size_t szdptr, const dk4_file_info_t *fi, int chfile, int chtime, dk4_er_t *erp ); /** Retrieve timestamp from file information structure. @param dptr Destination buffer pointer. @param szdptr Destination buffer size (number of wchar_t). @param fi File information structure. @param chfile For symolic links, choose information source: DK4_FILE_INFO_CONTENTS_DATA_LINK for the link itself, DK4_FILE_INFO_CONTENTS_DATA_TARGET for the link target. @param chtime Choose timestamp: DK4_FILE_INFO_TIME_CREATE for creation time, DK4_FILE_INFO_TIME_MODIFY for modification time, DK4_FILE_INFO_TIME_ACCESS for last access time. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fi is NULL or szdptr is 0, - DK4_E_NOT_FOUND
if the required information is not found in the file information structure. */ int dk4fileinfo_timestamp_wc( wchar_t *dptr, size_t szdptr, const dk4_file_info_t *fi, int chfile, int chtime, dk4_er_t *erp ); /** Retrieve timestamp from file information structure. @param dptr Destination buffer pointer. @param szdptr Destination buffer size (number of dkChar). @param fi File information structure. @param chfile For symolic links, choose information source: DK4_FILE_INFO_CONTENTS_DATA_LINK for the link itself, DK4_FILE_INFO_CONTENTS_DATA_TARGET for the link target. @param chtime Choose timestamp: DK4_FILE_INFO_TIME_CREATE for creation time, DK4_FILE_INFO_TIME_MODIFY for modification time, DK4_FILE_INFO_TIME_ACCESS for last access time. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fi is NULL or szdptr is 0, - DK4_E_NOT_FOUND
if the required information is not found in the file information structure. */ int dk4fileinfo_timestamp( dkChar *dptr, size_t szdptr, const dk4_file_info_t *fi, int chfile, int chtime, dk4_er_t *erp ); /** Retrieve file type and attributes (file attributes on Windows, permissions on other systems). @param dptr Destination buffer address. @param szdptr Destination buffer size. @param fi File information structure. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fi is NULL or szdptr is 0, - DK4_E_NOT_FOUND
if the required information is not available in the file information. */ int dk4fileinfo_type_attributes_c8( char *dptr, size_t szdptr, dk4_file_info_t *fi, dk4_er_t *erp ); /** Retrieve file type and attributes (file attributes on Windows, permissions on other systems). @param dptr Destination buffer address. @param szdptr Destination buffer size (number of wchar_t). @param fi File information structure. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fi is NULL or szdptr is 0, - DK4_E_NOT_FOUND
if the required information is not available in the file information. */ int dk4fileinfo_type_attributes_wc( wchar_t *dptr, size_t szdptr, dk4_file_info_t *fi, dk4_er_t *erp ); /** Retrieve file type and attributes (file attributes on Windows, permissions on other systems). @param dptr Destination buffer address. @param szdptr Destination buffer size (number of dkChar). @param fi File information structure. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fi is NULL or szdptr is 0, - DK4_E_NOT_FOUND
if the required information is not available in the file information. */ int dk4fileinfo_type_attributes( dkChar *dptr, size_t szdptr, dk4_file_info_t *fi, dk4_er_t *erp ); /** Retrieve unique file identifier from file information structure. @param dptr Pointer to destination variable. @param src File information structure to retrieve information from. @param ch For symbolic links choose between information for link itself (DK4_FILE_INFO_CONTENTS_DATA_LINK) or link target (DK4_FILE_INFO_CONTENTS_DATA_TARGET). @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or src is NULL, - DK4_E_NOT_FOUND
if the information is not present in the file information structure. */ int dk4fileinfo_ufi( dk4_ufi_t *dptr, const dk4_file_info_t *src, int ch, dk4_er_t *erp ); /** Check whether the file information structure represents a symbolic link. @param dptr File information structure to check. @return 1 for symbolic links, 0 otherwise. */ int dk4fileinfo_is_symlink(const dk4_file_info_t *dptr); /** Retrieve file size. @param dptr Pointer to result variable. @param fi File information structure. @param ch Choose information source for symbolic links: DK4_FILE_INFO_CONTENTS_DATA_LINK for the size of the link itself, DK4_FILE_INFO_CONTENTS_DATA_TARGET for the size of the link target. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if dptr or fi is NULL, - DK4_E_NOT_FOUND
if the required information is not available in the file information structure, - DK4_E_MATH_OVERFLOW
if the size calculation results in a numeric overflow. */ int dk4fileinfo_size( dk4_um_t *dptr, const dk4_file_info_t *fi, int ch, dk4_er_t *erp ); /** Check whether the file exists and is a regular file. For a symbolic link, the target must exist and be a regular file. @param fi File information already obtained for the file. @param erp Error report, may be NULL. @return 1 if the file exists and is a regular file. Error codes: - DK4_E_INVALID_ARGUMENTS
if fi is NULL. */ int dk4fileinfo_exists_and_is_regular(const dk4_file_info_t *fi, dk4_er_t *erp); #ifdef __cplusplus } #endif #endif