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