From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- support/dktools/dk4dira.ctr | 207 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 support/dktools/dk4dira.ctr (limited to 'support/dktools/dk4dira.ctr') 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 +#define WINDOWS_H_INCLUDED 1 +#endif +#endif + +#if DK4_HAVE_ERRNO_H +#ifndef ERRNO_H_INCLUDED +#include +#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; +} + + + + -- cgit v1.2.3