summaryrefslogtreecommitdiff
path: root/support/dktools/dk4dira.ctr
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk4dira.ctr
Initial commit
Diffstat (limited to 'support/dktools/dk4dira.ctr')
-rw-r--r--support/dktools/dk4dira.ctr207
1 files changed, 207 insertions, 0 deletions
diff --git a/support/dktools/dk4dira.ctr b/support/dktools/dk4dira.ctr
new file mode 100644
index 0000000000..be79d99182
--- /dev/null
+++ b/support/dktools/dk4dira.ctr
@@ -0,0 +1,207 @@
+%% options
+
+copyright owner = Dirk Krause
+copyright year = 2015-xxxx
+license = bsd
+
+
+
+%% header
+
+/** @file dk4dira.h Directory operations with application support.
+*/
+
+#include "dk4dir.h"
+#include "dk4app.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Open directory.
+ @param path Directory path name.
+ @param om Opening mode.
+ @param app Application structure for diagnostics, may be NULL.
+ @return Pointer to new directory structure on success, NULL on error.
+ On success use dk4dir_close() to destroy the directory
+ structure.
+*/
+dk4_dir_t *
+dk4dir_open_app(const dkChar *path, int om, dk4_app_t *app);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+%% module
+
+
+#include "dk4conf.h"
+#include "dk4const.h"
+
+#if DK4_ON_WINDOWS
+#ifndef WINDOWS_H_INCLUDED
+#include <windows.h>
+#define WINDOWS_H_INCLUDED 1
+#endif
+#endif
+
+#if DK4_HAVE_ERRNO_H
+#ifndef ERRNO_H_INCLUDED
+#include <errno.h>
+#define ERRNO_H_INCLUDED 1
+#endif
+#endif
+
+#include "dk4mem.h"
+#include "dk4dira.h"
+#include "dk4error.h"
+#if DK4_ON_WINDOWS
+#include "dk4maodd.h"
+#include "dk4maodh.h"
+#endif
+
+
+$!trace-include
+
+
+
+dk4_dir_t *
+dk4dir_open_app(const dkChar *path, int om, dk4_app_t *app)
+{
+#if DK4_ON_WINDOWS
+ dkChar eb1[8 * sizeof(dk4_um_t) + 16];
+ dkChar eb2[8 * sizeof(dk4_um_t) + 16];
+#endif
+ dk4_er_t er;
+ dk4_dir_t *back = NULL;
+#if DK4_ON_WINDOWS
+ DWORD le;
+ int found;
+ int res;
+#endif
+ if (NULL != path) {
+ dk4error_init(&er);
+ back = dk4dir_open(path, om, &er);
+ if (NULL == back) {
+ switch (er.ec) {
+ case DK4_E_NOT_SUPPORTED : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 145, path);
+ } break;
+ case DK4_E_MEMORY_ALLOCATION_FAILED : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 103, path);
+ } break;
+ case DK4_E_MATH_OVERFLOW : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 146, path);
+ } break;
+ case DK4_E_BUFFER_TOO_SMALL : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 42, path);
+ } break;
+#if !DK4_ON_WINDOWS
+ case DK4_E_OPENDIR_FAILED : {
+ switch (er.dt.iDetails1) {
+#ifdef EACCES
+ case EACCES : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 138, path);
+ } break;
+#endif
+#ifdef EBADF
+ case EBADF : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 122, path);
+ } break;
+#endif
+#ifdef EMFILE
+ case EMFILE : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 114, path);
+ } break;
+#endif
+#ifdef ENFILE
+ case ENFILE : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 115, path);
+ } break;
+#endif
+#ifdef ENOENT
+ case ENOENT : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 51, path);
+ } break;
+#endif
+#ifdef ENOMEM
+ case ENOMEM : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 142, path);
+ } break;
+#endif
+#ifdef ENOTDIR
+ case ENOTDIR : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 150, path);
+ } break;
+#endif
+#ifdef ELOOP
+ case ELOOP : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 61, path);
+ } break;
+#endif
+#ifdef ENAMETOOLONG
+ case ENAMETOOLONG : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 65, path);
+ } break;
+#endif
+ default : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 10, path);
+ } break;
+ }
+ } break;
+#endif
+#if DK4_ON_WINDOWS
+ case DK4_E_FINDFIRSTFILE_FAILED : {
+ le = er.dt.lDetails1;
+ found = 0;
+ if (ERROR_FILE_NOT_FOUND == le) {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 147, path);
+ found = 1;
+ }
+ if (ERROR_ACCESS_DENIED == le) {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 138, path);
+ found = 1;
+ }
+ if (ERROR_PATH_NOT_FOUND == le) {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 51, path);
+ found = 1;
+ }
+ if (ERROR_BAD_NET_NAME == le) {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 74, path);
+ found = 1;
+ }
+ if (ERROR_BAD_NETPATH == le) {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 75, path);
+ found = 1;
+ }
+ if (0 == found) {
+ res = dk4ma_write_decimal_unsigned(
+ eb1,DK4_SIZEOF(eb1,dkChar),(dk4_um_t)le,0,NULL
+ );
+ if (0 != res) {
+ res = dk4ma_write_hex_unsigned(
+ eb2, DK4_SIZEOF(eb2,dkChar), (dk4_um_t)le, 0, NULL
+ );
+ }
+ if (0 != res) {
+ dk4app_log_base7(app,DK4_LL_ERROR,144,69,70,71,path,eb1,eb2);
+ } else {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 77, path);
+ }
+ }
+ } break;
+#endif
+ default : {
+ dk4app_log_base3(app, DK4_LL_ERROR, 144, 10, path);
+ } break;
+ }
+ }
+ }
+ return back;
+}
+
+
+
+