summaryrefslogtreecommitdiff
path: root/support/dktools/dk4dirwc.h
diff options
context:
space:
mode:
Diffstat (limited to 'support/dktools/dk4dirwc.h')
-rw-r--r--support/dktools/dk4dirwc.h178
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