/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). 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: dk4dir08.ctr */ #ifndef DK4DIR08_H_INCLUDED /** Avoid multiple inclusions. */ #define DK4DIR08_H_INCLUDED 1 #line 10 "dk4dir08.ctr" /** @file Directory traversal using char file names. CRT on Windows: Optional. */ #ifndef DK4CONF_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4conf.h" #else #include #endif #endif #ifndef DK4TYPES_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4types.h" #else #include #endif #endif #ifndef DK4ERROR_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4error.h" #else #include #endif #endif #ifndef DK4STO_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4sto.h" #else #include #endif #endif /** Directory structure. */ typedef struct { char *path; /**< Directory path. */ dk4_sto_t *s_dir; /**< Storage for directories. */ dk4_sto_it_t *i_dir; /**< Iterator for directories. */ dk4_sto_t *s_file; /**< Storage for non-directories. */ dk4_sto_it_t *i_file; /**< Iterator for non-directories. */ size_t maxlen; /**< Maximum entry length. */ } dk4_dir_c8_t; #ifdef __cplusplus extern "C" { #endif /** Open directory, create directory structure. @param path Directory path name. @param om Opening mode. @param erp Error report, may be NULL. @return Pointer to new directory structure on success, NULL on error. On success use dk4dir_c8_close() to destroy the directory structure. Error codes: - DK4_E_INVALID_ARGUMENTS
if path is NULL, - DK4_E_NOT_SUPPORTED
if no function to traverse directories was found during build process, - DK4_E_MEMORY_ALLOCATION_FAILED
if a memory allocation failed, - DK4_E_MATH_OVERFLOW
if a mathematical overflow occured in a size calculation, - DK4_E_BUFFER_TOO_SMALL
if one of the involved directory or file names is too long for an internal buffer, - DK4_E_OPENDIR_FAILED
with errno value in iDetails1 if the attempt to open the directory failed, - DK4_E_FINDFIRSTFILE_FAILED
with GetLastError() value in lDetails1 if the FindFirstFile() function failed on Windows, - DK4_E_SYSTEM
if the stat() or lstat() function failed for one of the directory items. */ dk4_dir_c8_t * dk4dir_c8_open(const char *path, int om, dk4_er_t *erp); /** Destroy directory structure. @param dptr Structure to destroy. */ void dk4dir_c8_close(dk4_dir_c8_t *dptr); /** Reset directory traversal. @param dptr Directory structure. */ void dk4dir_c8_reset(dk4_dir_c8_t *dptr); /** Retrieve directory path. @param dptr Directory structure. @return Directory path on success, NULL on error or if no directory was specified for a file name expansion. */ const char * dk4dir_c8_get_path(dk4_dir_c8_t const *dptr); /** Retrieve next directory name. @param dptr Directory structure. @return Pointer to short name on success, NULL if there are no more directories. */ const char * dk4dir_c8_next_dir(dk4_dir_c8_t *dptr); /** Retrieve next file (non-directory) name. @param dptr Directory structure. @return Pointer to short name on success, NULL if there are no more files. */ const char * dk4dir_c8_next_file(dk4_dir_c8_t *dptr); /** Skip files (remove information about files, release memory). @param dptr Directory structure. */ void dk4dir_c8_skip_files(dk4_dir_c8_t *dptr); /** Compare two file or directory names. @param l Left name. @param r Right name. @param cr Comparison criteria (ignored). @return 1 if l>r, 0 if l=r, -1 if l if buffer, dirn or filen is NULL or szbuf is 0, - DK4_E_BUFFER_TOO_SMALL
if the buffer is too small. */ int dk4dir_c8_full_name_buffer( char *buffer, size_t szbuf, dk4_dir_c8_t const *pdir, char const *fn, dk4_er_t *erp ); /** Create full path name for short file name in newly allocated buffer. @param pdir Directory fn was obtained from. @param fn Short file or directory name. @param erp Error report, may be NULL. @return Valid pointer to newly allocated buffer on success, NULL on error. On success use dk4mem_free() to release the memory when done with the name. Error codes: - DK4_E_INVALID_ARGUMENTS
if pdir or fn is NULL, - DK4_E_MATH_OVERFLOW
if the size calculation results in a numeric overflow. - DK4_E_MEMORY_ALLOCATION_FAILED
if the memory allocation failed, - DK4_E_BUFFER_TOO_SMALL
if the buffer is too small. */ char * dk4dir_c8_full_name_new( dk4_dir_c8_t const *pdir, char const *fn, dk4_er_t *erp ); #ifdef __cplusplus } #endif #endif