diff options
Diffstat (limited to 'support/dktools/dk4dirwc.h')
-rw-r--r-- | support/dktools/dk4dirwc.h | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/support/dktools/dk4dirwc.h b/support/dktools/dk4dirwc.h new file mode 100644 index 0000000000..1cc56524b5 --- /dev/null +++ b/support/dktools/dk4dirwc.h @@ -0,0 +1,178 @@ +/* + 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: dk4dirwc.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 DK4DIRWC_H_INCLUDED +/** Avoid multiple inclusions. */ +#define DK4DIRWC_H_INCLUDED 1 + + +#line 10 "dk4dirwc.ctr" + +/** @file + Directory traversal using wchar_t file names. + + CRT on Windows: Optional. +*/ + +#ifndef DK4CONF_H_INCLUDED +#include "dk4conf.h" +#endif + +#ifndef DK4TYPES_H_INCLUDED +#include "dk4types.h" +#endif + +#ifndef DK4ERROR_H_INCLUDED +#include "dk4error.h" +#endif + +#ifndef DK4STO_H_INCLUDED +#include "dk4sto.h" +#endif + + +/** Directory structure. +*/ +typedef struct { + wchar_t *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 name length. */ +} dk4_dir_wc_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_wc_close() to destroy the directory + structure. + + Error codes: + - DK4_E_INVALID_ARGUMENTS<br> + if path is NULL, + - DK4_E_NOT_SUPPORTED<br> + if no function to traverse directories was found during build process, + - DK4_E_MEMORY_ALLOCATION_FAILED<br> + if a memory allocation failed, + - DK4_E_MATH_OVERFLOW<br> + if a mathematical overflow occured in a size calculation, + - DK4_E_BUFFER_TOO_SMALL<br> + if one of the involved directory or file names is too long for an + internal buffer, + - DK4_E_OPENDIR_FAILED<br> + with errno value in iDetails1 if the attempt to open the directory + failed, + - DK4_E_FINDFIRSTFILE_FAILED<br> + with GetLastError() value in lDetails1 if the FindFirstFile() + function failed on Windows, + - DK4_E_SYSTEM<br> + if the stat() or lstat() function failed for one of the directory + items. +*/ +dk4_dir_wc_t * +dk4dir_wc_open(const wchar_t *path, int om, dk4_er_t *erp); + +/** Destroy directory structure. + @param dptr Structure to destroy. +*/ +void +dk4dir_wc_close(dk4_dir_wc_t *dptr); + +/** Reset directory traversal. + @param dptr Directory structure. +*/ +void +dk4dir_wc_reset(dk4_dir_wc_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 wchar_t * +dk4dir_wc_get_path(dk4_dir_wc_t *dptr); + +/** Retrieve next directory name. + @param dptr Directory structure. + @return Pointer to short name on success, NULL if there are no + more directories. +*/ +const wchar_t * +dk4dir_wc_next_dir(dk4_dir_wc_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 wchar_t * +dk4dir_wc_next_file(dk4_dir_wc_t *dptr); + +/** Skip files (remove information about files, release memory). + @param dptr Directory structure. +*/ +void +dk4dir_wc_skip_files(dk4_dir_wc_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<r. +*/ +int +dk4dir_wc_compare(const void *l, const void *r, int cr); + +/** Get maximum entry name length. + @param dptr Directory. + @return Maximum name length. +*/ +size_t +dk4dir_wc_get_max_entry_length(dk4_dir_wc_t *dptr); + +#ifdef __cplusplus +} +#endif + + +#endif |