1%%	options
2
3copyright owner	=	Dirk Krause
4copyright year	=	2015-xxxx
5SPDX-License-Identifier:	BSD-3-Clause
6
7
8
9%%	module
10
11#include <libdk4app/dk4app.h>
12
13#ifndef DK4CONST_H_INCLUDED
14#include <libdk4base/dk4const.h>
15#endif
16
17#ifndef DK4FNE_H_INCLUDED
18#include <libdk4c/dk4fne.h>
19#endif
20
21#ifndef DK4ERROR_H_INCLUDED
22#include <libdk4base/dk4error.h>
23#endif
24
25#ifndef DK4STRD_H_INCLUDED
26#include <libdk4base/dk4strd.h>
27#endif
28
29#if DK4_HAVE_ASSERT_H
30#ifndef	ASSERT_H_INCLUDED
31#include <assert.h>
32#define	ASSERT_H_INCLUDED 1
33#endif
34#endif
35
36
37dk4_dir_t *
38dk4app_fne_open(const dkChar *pattern, dk4_app_t *app)
39{
40  dk4_er_t	 er;
41  dk4_dir_t	*back	= NULL;
42
43#if	DK4_USE_ASSERT
44  assert(NULL != pattern);
45#endif
46  if (NULL != pattern) {
47    dk4error_init(&er);
48    back = dk4fne_open(pattern, &er);
49    if (NULL == back) {
50      switch (er.ec) {
51        case DK4_E_NOT_SUPPORTED: {
52	  dk4app_log_base3(app, DK4_LL_ERROR, 100, 102, pattern);
53	} break;
54	case DK4_E_MEMORY_ALLOCATION_FAILED: {
55	  dk4app_log_base3(app, DK4_LL_ERROR, 100, 103, pattern);
56	} break;
57	case DK4_E_BUFFER_TOO_SMALL: {
58	  dk4app_log_base3(app, DK4_LL_ERROR, 100, 105, pattern);
59	} break;
60	case DK4_E_OPENDIR_FAILED:
61	case DK4_E_FINDFIRSTFILE_FAILED: {
62	  dk4app_log_base3(app, DK4_LL_ERROR, 100, 104, pattern);
63	} break;
64	default: {
65	  dk4app_log_base3(app, DK4_LL_ERROR, 100, 101, pattern);
66	} break;
67      }
68    }
69  }
70  return back;
71}
72
73
74
75int
76dk4app_fne_one_file(
77  dkChar	*dptr,
78  size_t	 szdptr,
79  dk4_dir_t	*fne,
80  const dkChar	*pattern,
81  dk4_app_t	*app
82)
83{
84  const dkChar	*dirname;
85  const	dkChar	*filename;
86  int		 back = 0;
87#if	DK4_USE_ASSERT
88  assert(NULL != dptr);
89  assert(0 < szdptr);
90  assert(NULL != fne);
91  assert(NULL != pattern);
92#endif
93  if ((NULL != dptr) && (NULL != fne) && (0 < szdptr)) {
94    dirname = dk4dir_get_path(fne);
95    filename = dk4dir_next_file(fne);
96    if (NULL != filename) {
97      if (NULL != dirname) {
98        if (0 != dk4str_cpy_s(dptr, szdptr, dirname, NULL)) {
99	  if (0 != dk4str_cat_s(dptr, szdptr, dkT("\\"), NULL)) {
100	    back = dk4str_cat_s(dptr, szdptr, filename, NULL);
101	    if (0 == back) {
102	      dk4app_log_base3(app, DK4_LL_ERROR, 100, 105, pattern);
103	    }
104	  } else {
105	    dk4app_log_base3(app, DK4_LL_ERROR, 100, 105, pattern);
106	  }
107	} else {
108	  dk4app_log_base3(app, DK4_LL_ERROR, 100, 105, pattern);
109	}
110      } else {
111        back = dk4str_cpy_s(dptr, szdptr, filename, NULL);
112	if (0 == back) {
113	  dk4app_log_base3(app, DK4_LL_ERROR, 100, 105, pattern);
114	}
115      }
116      if (0 != back) {
117        filename = dk4dir_next_file(fne);
118	if (NULL != filename) {
119	  back = 0;
120	  dk4app_log_base3(app, DK4_LL_ERROR, 100, 106, pattern);
121	}
122      }
123    } else {
124      dk4app_log_base3(app, DK4_LL_ERROR, 100, 107, pattern);
125    }
126  }
127  return back;
128}
129
130