1 /*
2 Copyright (C) 2015-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5
6 /*
7 WARNING: This file was generated by the dkct program (see
8 http://dktools.sourceforge.net/ for details).
9 Changes you make here will be lost if dkct is run again!
10 You should modify the original source and run dkct on it.
11 Original source: dk4pathd.ctr
12 */
13
14 /** @file dk4pathd.c The dk4pathd module.
15 */
16
17
18
19 #include "dk4conf.h"
20
21 #include <libdk4c/dk4pathd.h>
22 #if DK4_CHAR_SIZE > 1
23 #include <libdk4c/dk4pathw.h>
24 #else
25 #include <libdk4c/dk4path8.h>
26 #endif
27
28 #if DK4_HAVE_ASSERT_H
29 #ifndef ASSERT_H_INCLUDED
30 #include <assert.h>
31 #define ASSERT_H_INCLUDED 1
32 #endif
33 #endif
34
35 #include <libdk4base/dk4mem.h>
36 #include <libdk4base/dk4mpl.h>
37 #include <libdk4base/dk4strd.h>
38
39
40
41
42
43
44
45 int
dk4path_is_absolute(const dkChar * path)46 dk4path_is_absolute(const dkChar *path)
47 {
48 #if DK4_USE_ASSERT
49 assert(NULL != path);
50 #endif
51 #if DK4_CHAR_SIZE > 1
52 return (dk4pathw_is_absolute(path));
53 #else
54 return (dk4path8_is_absolute(path));
55 #endif
56 }
57
58
59
60 int
dk4path_is_relative(const dkChar * path)61 dk4path_is_relative(const dkChar *path)
62 {
63 #if DK4_USE_ASSERT
64 assert(NULL != path);
65 #endif
66 #if DK4_CHAR_SIZE > 1
67 return (dk4pathw_is_relative(path));
68 #else
69 return (dk4path8_is_relative(path));
70 #endif
71 }
72
73
74
75 int
dk4path_append(dkChar * buffer,size_t sz,const dkChar * filename,dk4_er_t * erp)76 dk4path_append(
77 dkChar *buffer, size_t sz, const dkChar *filename, dk4_er_t *erp
78 )
79 {
80 #if DK4_USE_ASSERT
81 assert(NULL != buffer);
82 assert(0 < sz);
83 assert(NULL != filename);
84 #endif
85 #if DK4_CHAR_SIZE > 1
86 return (dk4pathw_append(buffer, sz, filename, erp));
87 #else
88 return (dk4path8_append(buffer, sz, filename, erp));
89 #endif
90 }
91
92
93
94 dkChar *
dk4path_get_suffix(const dkChar * filename,dk4_er_t * erp)95 dk4path_get_suffix(const dkChar *filename, dk4_er_t *erp)
96 {
97 #if DK4_USE_ASSERT
98 assert(NULL != filename);
99 #endif
100 #if DK4_CHAR_SIZE > 1
101 return (dk4pathw_get_suffix(filename, erp));
102 #else
103 return (dk4path8_get_suffix(filename, erp));
104 #endif
105 }
106
107
108
109 void
dk4path_correct_sep(dkChar * filename)110 dk4path_correct_sep(dkChar *filename)
111 {
112 #if DK4_USE_ASSERT
113 assert(NULL != filename);
114 #endif
115 #if DK4_CHAR_SIZE > 1
116 dk4pathw_correct_sep(filename);
117 #else
118 dk4path8_correct_sep(filename);
119 #endif
120 }
121
122
123
124 int
dk4path_must_expand(const dkChar * filename)125 dk4path_must_expand(const dkChar *filename)
126 {
127 #if DK4_USE_ASSERT
128 assert(NULL != filename);
129 #endif
130 #if DK4_CHAR_SIZE > 1
131 return (dk4pathw_must_expand(filename));
132 #else
133 return (dk4path8_must_expand(filename));
134 #endif
135 }
136
137
138
139 int
dk4path_is_in_subdir(const dkChar * filename,const dkChar * parent,dk4_er_t * erp)140 dk4path_is_in_subdir(const dkChar *filename,const dkChar *parent,dk4_er_t *erp)
141 {
142 dkChar buf[DK4_MAX_PATH];
143 size_t szf;
144 size_t szp;
145 int back = 0;
146
147 #if DK4_USE_ASSERT
148 assert(NULL != filename);
149 assert(NULL != parent);
150 #endif
151 if ((NULL != filename) && (NULL != parent)) {
152 if (0 != dk4str_cpy_s(buf, DK4_SIZEOF(buf,dkChar), filename, erp)) {
153 szf = dk4str_len(buf);
154 szp = dk4str_len(parent);
155 if (szf > szp) {
156 #if DK4_ON_WINDOWS || DK4_HAVE_BACKSLASH_AS_SEP
157 if (buf[szp] == dkT('\\'))
158 #else
159 if (buf[szp] == dkT('/'))
160 #endif
161 {
162 buf[szp] = dkT('\0');
163 if (0 == dk4str_pathcmp(buf, parent)) {
164 back = 1;
165 }
166 #if DK4_ON_WINDOWS || DK4_HAVE_BACKSLASH_AS_SEP
167 buf[szp] = dkT('\\');
168 #else
169 buf[szp] = dkT('/');
170 #endif
171 }
172 } else {
173 if (szf == szp) {
174 if (0 == dk4str_pathcmp(buf, parent)) {
175 back = 1;
176 }
177 }
178 }
179 }
180 } else {
181 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
182 }
183 return back;
184 }
185
186
187
188 int
dk4path_set_suffix(dkChar * pdst,size_t szdst,dkChar const * srcname,dkChar const * newsu,dk4_er_t * erp)189 dk4path_set_suffix(
190 dkChar *pdst,
191 size_t szdst,
192 dkChar const *srcname,
193 dkChar const *newsu,
194 dk4_er_t *erp
195 )
196 {
197 #if DK4_USE_ASSERT
198 assert(NULL != pdst);
199 assert(0 < szdst);
200 assert(NULL != srcname);
201 assert(NULL != newsu);
202 #endif
203 #if DK4_CHAR_SIZE > 1
204 return (dk4pathw_set_suffix(pdst, szdst, srcname, newsu, erp));
205 #else
206 return (dk4path8_set_suffix(pdst, szdst, srcname, newsu, erp));
207 #endif
208 }
209
210
211
212 dkChar *
dk4path_dup_change_suffix(dkChar const * srcname,dkChar const * newsu,dk4_er_t * erp)213 dk4path_dup_change_suffix(
214 dkChar const *srcname,
215 dkChar const *newsu,
216 dk4_er_t *erp
217 )
218 {
219 #if DK4_USE_ASSERT
220 assert(NULL != srcname);
221 assert(NULL != newsu);
222 #endif
223 #if DK4_CHAR_SIZE > 1
224 return (dk4pathw_dup_change_suffix(srcname, newsu, erp));
225 #else
226 return (dk4path8_dup_change_suffix(srcname, newsu, erp));
227 #endif
228 }
229
230
231
232 size_t
dk4path_concatenate_size(dkChar const * dirname,dkChar const * filename,dk4_er_t * erp)233 dk4path_concatenate_size(
234 dkChar const *dirname,
235 dkChar const *filename,
236 dk4_er_t *erp
237 )
238 {
239 #if DK4_USE_ASSERT
240 assert(NULL != dirname);
241 assert(NULL != filename);
242 #endif
243 #if DK4_CHAR_SIZE > 1
244 return (dk4pathw_concatenate_size(dirname, filename, erp));
245 #else
246 return (dk4path8_concatenate_size(dirname, filename, erp));
247 #endif
248 }
249
250
251
252 int
dk4path_concatenate_buffer(dkChar * buffer,size_t szbuf,dkChar const * dirn,dkChar const * filen,dk4_er_t * erp)253 dk4path_concatenate_buffer(
254 dkChar *buffer,
255 size_t szbuf,
256 dkChar const *dirn,
257 dkChar const *filen,
258 dk4_er_t *erp
259 )
260 {
261 #if DK4_USE_ASSERT
262 assert(NULL != buffer);
263 assert(0 < szbuf);
264 assert(NULL != dirn);
265 assert(NULL != filen);
266 #endif
267 #if DK4_CHAR_SIZE > 1
268 return (dk4pathw_concatenate_buffer(buffer, szbuf, dirn, filen, erp));
269 #else
270 return (dk4path8_concatenate_buffer(buffer, szbuf, dirn, filen, erp));
271 #endif
272 }
273
274
275
276 dkChar *
dk4path_concatenate_new(dkChar const * dirn,dkChar const * filen,dk4_er_t * erp)277 dk4path_concatenate_new(
278 dkChar const *dirn,
279 dkChar const *filen,
280 dk4_er_t *erp
281 )
282 {
283 #if DK4_USE_ASSERT
284 assert(NULL != dirn);
285 assert(NULL != filen);
286 #endif
287 #if DK4_CHAR_SIZE > 1
288 return (dk4pathw_concatenate_new(dirn, filen, erp));
289 #else
290 return (dk4path8_concatenate_new(dirn, filen, erp));
291 #endif
292 }
293
294
295
296