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: dk4strx.cpt
12 */
13
14 /** @file dk4strx.cpp The dk4strx module.
15 */
16
17
18 #include "dk4conf.h"
19
20 #ifndef DK4_SIZEOF_WXCHAR
21 #ifndef DK4WXCS_H_INCLUDED
22 #include "dk4wxcs.h"
23 #endif
24 #endif
25
26 #include <libdk4wx/dk4strx.h>
27 #include <libdk4base/dk4mem.h>
28 #include <libdk4base/dk4mpl.h>
29
30 #if DK4_SIZEOF_WXCHAR > 1
31 #include <libdk4base/dk4strw.h>
32 #include <libdk4c/dk4pathw.h>
33 #else
34 #include <libdk4base/dk4str8.h>
35 #include <libdk4c/dk4path8.h>
36 #endif
37
38
39
40
41
42
43
44 int
dk4strx_cpy_s(wxChar * dst,size_t sz,const wxChar * src,dk4_er_t * erp)45 dk4strx_cpy_s(wxChar *dst, size_t sz, const wxChar *src, dk4_er_t *erp)
46 {
47 #if DK4_SIZEOF_WXCHAR > 1
48 return (dk4strw_cpy_s(dst, sz, src, erp));
49 #else
50 return (dk4str8_cpy_s(dst, sz, src, erp));
51 #endif
52 }
53
54
55
56 int
dk4strx_cat_s(wxChar * dst,size_t sz,const wxChar * src,dk4_er_t * erp)57 dk4strx_cat_s(wxChar *dst, size_t sz, const wxChar *src, dk4_er_t *erp)
58 {
59 #if DK4_SIZEOF_WXCHAR > 1
60 return (dk4strw_cat_s(dst, sz, src, erp));
61 #else
62 return (dk4str8_cat_s(dst, sz, src, erp));
63 #endif
64 }
65
66
67
68 void
dk4strx_cpy_to_left(wxChar * dst,const wxChar * src)69 dk4strx_cpy_to_left(wxChar *dst, const wxChar *src)
70 {
71 #if DK4_SIZEOF_WXCHAR > 1
72 dk4strw_cpy_to_left(dst, src);
73 #else
74 dk4str8_cpy_to_left(dst, src);
75 #endif
76 }
77
78
79
80 size_t
dk4strx_len(const wxChar * src)81 dk4strx_len(const wxChar *src)
82 {
83 #if DK4_SIZEOF_WXCHAR > 1
84 return (dk4strw_len(src));
85 #else
86 return (dk4str8_len(src));
87 #endif
88 }
89
90
91
92 int
dk4strx_cmp(const wxChar * s1,const wxChar * s2)93 dk4strx_cmp(const wxChar *s1, const wxChar *s2)
94 {
95 #if DK4_SIZEOF_WXCHAR > 1
96 return (dk4strw_cmp(s1, s2));
97 #else
98 return (dk4str8_cmp(s1, s2));
99 #endif
100 }
101
102
103
104 int
dk4strx_casecmp(const wxChar * s1,const wxChar * s2)105 dk4strx_casecmp(const wxChar *s1, const wxChar *s2)
106 {
107 #if DK4_SIZEOF_WXCHAR > 1
108 return (dk4strw_casecmp(s1, s2));
109 #else
110 return (dk4str8_casecmp(s1, s2));
111 #endif
112 }
113
114
115
116 int
dk4strx_pathcmp(const wxChar * s1,const wxChar * s2)117 dk4strx_pathcmp(const wxChar *s1, const wxChar *s2)
118 {
119 #if DK4_SIZEOF_WXCHAR > 1
120 return (dk4strw_pathcmp(s1, s2));
121 #else
122 return (dk4str8_pathcmp(s1, s2));
123 #endif
124 }
125
126
127
128 wxChar *
dk4strx_chr(const wxChar * s,wxChar c)129 dk4strx_chr(const wxChar *s, wxChar c)
130 {
131 #if DK4_SIZEOF_WXCHAR > 1
132 return (dk4strw_chr(s, c));
133 #else
134 return (dk4str8_chr(s, c));
135 #endif
136 }
137
138
139
140 wxChar *
dk4strx_rchr(const wxChar * s,wxChar c)141 dk4strx_rchr(const wxChar *s, wxChar c)
142 {
143 #if DK4_SIZEOF_WXCHAR > 1
144 return (dk4strw_rchr(s, c));
145 #else
146 return (dk4str8_rchr(s, c));
147 #endif
148 }
149
150
151
152 wxChar *
dk4strx_sep(wxChar ** stringp,const wxChar * delim)153 dk4strx_sep(wxChar **stringp, const wxChar *delim)
154 {
155 #if DK4_SIZEOF_WXCHAR > 1
156 return (dk4strw_sep(stringp, delim));
157 #else
158 return (dk4str8_sep(stringp, delim));
159 #endif
160 }
161
162
163
164 wxChar *
dk4strx_start(const wxChar * src,const wxChar * delim)165 dk4strx_start(const wxChar *src, const wxChar *delim)
166 {
167 #if DK4_SIZEOF_WXCHAR > 1
168 return (dk4strw_start(src, delim));
169 #else
170 return (dk4str8_start(src, delim));
171 #endif
172 }
173
174
175
176 wxChar *
dk4strx_next(wxChar * src,const wxChar * delim)177 dk4strx_next(wxChar *src, const wxChar *delim)
178 {
179 #if DK4_SIZEOF_WXCHAR > 1
180 return (dk4strw_next(src, delim));
181 #else
182 return (dk4str8_next(src, delim));
183 #endif
184 }
185
186
187
188 size_t
dk4strx_tokenize(wxChar ** dpp,size_t szdpp,wxChar * src,const wxChar * delim,dk4_er_t * erp)189 dk4strx_tokenize(
190 wxChar **dpp, size_t szdpp, wxChar *src, const wxChar *delim, dk4_er_t *erp
191 )
192 {
193 #if DK4_SIZEOF_WXCHAR > 1
194 return (dk4strw_tokenize(dpp, szdpp, src, delim, erp));
195 #else
196 return (dk4str8_tokenize(dpp, szdpp, src, delim, erp));
197 #endif
198 }
199
200
201
202 void
dk4strx_normalize(wxChar * src,const wxChar * delim)203 dk4strx_normalize(wxChar *src, const wxChar *delim)
204 {
205 #if DK4_SIZEOF_WXCHAR > 1
206 dk4strw_normalize(src, delim);
207 #else
208 dk4str8_normalize(src, delim);
209 #endif
210 }
211
212
213
214 int
dk4strx_array_index(const wxChar * const * arr,const wxChar * str,int cs)215 dk4strx_array_index(const wxChar * const *arr, const wxChar *str, int cs)
216 {
217 #if DK4_SIZEOF_WXCHAR > 1
218 return (dk4strw_array_index(arr, str, cs));
219 #else
220 return (dk4str8_array_index(arr, str, cs));
221 #endif
222 }
223
224
225
226 int
dk4strx_abbr_index(const wxChar * const * arr,wxChar spec,const wxChar * str,int cs)227 dk4strx_abbr_index(
228 const wxChar * const *arr,
229 wxChar spec,
230 const wxChar *str,
231 int cs
232 )
233 {
234 #if DK4_SIZEOF_WXCHAR > 1
235 return (dk4strw_abbr_index(arr, spec, str, cs));
236 #else
237 return (dk4str8_abbr_index(arr, spec, str, cs));
238 #endif
239 }
240
241
242
243 int
dk4strx_is_abbr(const wxChar * str,const wxChar * pattern,wxChar spec,int cs)244 dk4strx_is_abbr(const wxChar *str, const wxChar *pattern, wxChar spec, int cs)
245 {
246 #if DK4_SIZEOF_WXCHAR > 1
247 return (dk4strw_is_abbr(str, pattern, spec, cs));
248 #else
249 return (dk4str8_is_abbr(str, pattern, spec, cs));
250 #endif
251 }
252
253
254
255 int
dk4strx_is_bool(const wxChar * str)256 dk4strx_is_bool(const wxChar *str)
257 {
258 #if DK4_SIZEOF_WXCHAR > 1
259 return (dk4strw_is_bool(str));
260 #else
261 return (dk4str8_is_bool(str));
262 #endif
263 }
264
265
266
267 int
dk4strx_is_on(const wxChar * str)268 dk4strx_is_on(const wxChar *str)
269 {
270 #if DK4_SIZEOF_WXCHAR > 1
271 return (dk4strw_is_on(str));
272 #else
273 return (dk4str8_is_on(str));
274 #endif
275 }
276
277
278
279 #if (defined(_WIN32) && DK4_USE_WINDOWS_LOCAL_ALLOC) \
280 || (DK4_HAVE_MALLOC && DK4_HAVE_FREE)
281
282 wxChar *
dk4strx_dup(const wxChar * src,dk4_er_t * erp)283 dk4strx_dup(const wxChar *src, dk4_er_t *erp)
284 {
285 #if DK4_SIZEOF_WXCHAR > 1
286 return (dk4strw_dup(src, erp));
287 #else
288 return (dk4str8_dup(src, erp));
289 #endif
290 }
291
292 #endif
293 /* if (defined(_WIN32) ... */
294
295 void
dk4strx_rtwh(wxChar * str,const wxChar * whsp)296 dk4strx_rtwh(wxChar *str, const wxChar *whsp)
297 {
298 #if DK4_SIZEOF_WXCHAR > 1
299 dk4strw_rtwh(str, whsp);
300 #else
301 dk4str8_rtwh(str, whsp);
302 #endif
303 }
304
305
306
307 void
dk4strx_delnl(wxChar * lptr)308 dk4strx_delnl(wxChar *lptr)
309 {
310 #if DK4_SIZEOF_WXCHAR > 1
311 dk4strw_delnl(lptr);
312 #else
313 dk4str8_delnl(lptr);
314 #endif
315 }
316
317
318 wxChar const *
dk4strx_get_path_suffix(wxChar const * filename,dk4_er_t * erp)319 dk4strx_get_path_suffix(wxChar const *filename, dk4_er_t *erp)
320 {
321 #if DK4_SIZEOF_WXCHAR > 1
322 return (dk4pathw_get_suffix(filename, erp));
323 #else
324 return (dk4path8_get_suffix(filename, erp));
325 #endif
326 }
327
328
329
330 int
dk4strx_path_is_absolute(const wxChar * path)331 dk4strx_path_is_absolute(const wxChar *path)
332 {
333 #if DK4_SIZEOF_WXCHAR > 1
334 return (dk4pathw_is_absolute(path));
335 #else
336 return (dk4path8_is_absolute(path));
337 #endif
338 }
339
340
341
342 int
dk4strx_path_is_relative(const wxChar * path)343 dk4strx_path_is_relative(const wxChar *path)
344 {
345 #if DK4_SIZEOF_WXCHAR > 1
346 return (dk4pathw_is_relative(path));
347 #else
348 return (dk4path8_is_relative(path));
349 #endif
350 }
351
352
353
354 int
dk4strx_path_append(wxChar * buffer,size_t sz,const wxChar * filename,dk4_er_t * erp)355 dk4strx_path_append(
356 wxChar *buffer, size_t sz, const wxChar *filename, dk4_er_t *erp
357 )
358 {
359 #if DK4_SIZEOF_WXCHAR > 1
360 return (dk4pathw_append(buffer, sz, filename, erp));
361 #else
362 return (dk4path8_append(buffer, sz, filename, erp));
363 #endif
364 }
365
366
367
368 wxChar *
dk4strx_path_get_suffix(const wxChar * filename,dk4_er_t * erp)369 dk4strx_path_get_suffix(const wxChar *filename, dk4_er_t *erp)
370 {
371 #if DK4_SIZEOF_WXCHAR > 1
372 return (dk4pathw_get_suffix(filename, erp));
373 #else
374 return (dk4path8_get_suffix(filename, erp));
375 #endif
376 }
377
378
379
380 void
dk4strx_path_correct_sep(wxChar * filename)381 dk4strx_path_correct_sep(wxChar *filename)
382 {
383 #if DK4_SIZEOF_WXCHAR > 1
384 dk4pathw_correct_sep(filename);
385 #else
386 dk4path8_correct_sep(filename);
387 #endif
388 }
389
390
391
392 int
dk4strx_path_must_expand(const wxChar * filename)393 dk4strx_path_must_expand(const wxChar *filename)
394 {
395 #if DK4_SIZEOF_WXCHAR > 1
396 return (dk4pathw_must_expand(filename));
397 #else
398 return (dk4path8_must_expand(filename));
399 #endif
400 }
401
402
403
404 int
dk4strx_path_set_suffix(wxChar * pdst,size_t szdst,wxChar const * srcname,wxChar const * newsu,dk4_er_t * erp)405 dk4strx_path_set_suffix(
406 wxChar *pdst,
407 size_t szdst,
408 wxChar const *srcname,
409 wxChar const *newsu,
410 dk4_er_t *erp
411 )
412 {
413
414 #if DK4_SIZEOF_WXCHAR > 1
415 return (dk4pathw_set_suffix(pdst, szdst, srcname, newsu, erp));
416 #else
417 return (dk4path8_set_suffix(pdst, szdst, srcname, newsu, erp));
418 #endif
419 }
420
421
422
423 wxChar *
dk4strx_path_dup_change_suffix(wxChar const * srcname,wxChar const * newsu,dk4_er_t * erp)424 dk4strx_path_dup_change_suffix(
425 wxChar const *srcname,
426 wxChar const *newsu,
427 dk4_er_t *erp
428 )
429 {
430 #if DK4_SIZEOF_WXCHAR > 1
431 return (dk4pathw_dup_change_suffix(srcname, newsu, erp));
432 #else
433 return (dk4path8_dup_change_suffix(srcname, newsu, erp));
434 #endif
435 }
436
437
438
439 size_t
dk4strx_path_concatenate_size(wxChar const * dirname,wxChar const * filename,dk4_er_t * erp)440 dk4strx_path_concatenate_size(
441 wxChar const *dirname,
442 wxChar const *filename,
443 dk4_er_t *erp
444 )
445 {
446 #if DK4_SIZEOF_WXCHAR > 1
447 return (dk4pathw_concatenate_size(dirname, filename, erp));
448 #else
449 return (dk4path8_concatenate_size(dirname, filename, erp));
450 #endif
451 }
452
453
454
455 int
dk4strx_path_concatenate_buffer(wxChar * buffer,size_t szbuf,wxChar const * dirn,wxChar const * filen,dk4_er_t * erp)456 dk4strx_path_concatenate_buffer(
457 wxChar *buffer,
458 size_t szbuf,
459 wxChar const *dirn,
460 wxChar const *filen,
461 dk4_er_t *erp
462 )
463 {
464 #if DK4_SIZEOF_WXCHAR > 1
465 return (dk4pathw_concatenate_buffer(buffer, szbuf, dirn, filen, erp));
466 #else
467 return (dk4path8_concatenate_buffer(buffer, szbuf, dirn, filen, erp));
468 #endif
469 }
470
471
472
473 wxChar *
dk4strx_path_concatenate_new(wxChar const * dirn,wxChar const * filen,dk4_er_t * erp)474 dk4strx_path_concatenate_new(
475 wxChar const *dirn,
476 wxChar const *filen,
477 dk4_er_t *erp
478 )
479 {
480 #if DK4_SIZEOF_WXCHAR > 1
481 return (dk4pathw_concatenate_new(dirn, filen, erp));
482 #else
483 return (dk4path8_concatenate_new(dirn, filen, erp));
484 #endif
485 }
486
487
488
489 int
dk4strx_path_is_in_subdir(const wxChar * filename,const wxChar * parent,dk4_er_t * erp)490 dk4strx_path_is_in_subdir(
491 const wxChar *filename,const wxChar *parent,dk4_er_t *erp
492 )
493 {
494 wxChar buf[DK4_MAX_PATH];
495 size_t szf;
496 size_t szp;
497 int back = 0;
498
499 if ((NULL != filename) && (NULL != parent)) {
500 if (0 != dk4strx_cpy_s(buf, DK4_SIZEOF(buf,wxChar), filename, erp)) {
501 szf = dk4strx_len(buf);
502 szp = dk4strx_len(parent);
503 if (szf > szp) {
504 #if DK4_ON_WINDOWS || DK4_HAVE_BACKSLASH_AS_SEP
505 if (buf[szp] == wxT('\\'))
506 #else
507 if (buf[szp] == wxT('/'))
508 #endif
509 {
510 buf[szp] = wxT('\0');
511 if (0 == dk4strx_pathcmp(buf, parent)) {
512 back = 1;
513 }
514 #if DK4_ON_WINDOWS || DK4_HAVE_BACKSLASH_AS_SEP
515 buf[szp] = wxT('\\');
516 #else
517 buf[szp] = wxT('/');
518 #endif
519 }
520 } else {
521 if (szf == szp) {
522 if (0 == dk4strx_pathcmp(buf, parent)) {
523 back = 1;
524 }
525 }
526 }
527 }
528 } else {
529 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
530 }
531 return back;
532 }
533
534
535
536 /* vim: set ai sw=4 ts=4 : */
537