summaryrefslogtreecommitdiff
path: root/support/dktools/dk4pathd.h
blob: fb80048298e60659452b350588b516e09d565053 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*
	WARNING: This file was generated by dkct.
	Changes you make here will be lost if dkct is run again!
	You should modify the original source and run dkct on it.
	Original source: dk4pathd.ctr
*/

/*
Copyright (C) 2015-2017, Dirk Krause

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice,
  this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above opyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.
* Neither the name of the author nor the names of contributors may be used
  to endorse or promote products derived from this software without specific
  prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef DK4PATHD_H_INCLUDED
/** Avoid multiple inclusions. */
#define DK4PATHD_H_INCLUDED 1


#line 10 "dk4pathd.ctr"

/**	@file
	String operations for path names
	(dkChar characters).
*/

#ifndef DK4CONF_H_INCLUDED
#include "dk4conf.h"
#endif

#ifndef DK4TYPES_H_INCLUDED
#include "dk4types.h"
#endif

#ifndef DK4ERROR_H_INCLUDED
#include "dk4error.h"
#endif

#if DK4_HAVE_WCHAR_H
#ifndef WCHAR_H_INCLUDED
#include <wchar.h>
#define	WCHAR_H_INCLUDED 1
#endif
#endif

#ifdef __cplusplus
extern "C" {
#endif

/**	Check whether a file name is an absolute path.
	CRT on Windows: Not used.
	@param	path	Path name to check.
	@return	1 for absolute path, 0 for other path.
*/
int
dk4path_is_absolute(const dkChar *path);

/**	Check whether a file name is a relative path.
	CRT on Windows: Not used.
	@param	path	Path name to check.
	@return	1 for absolute path, 0 for other path.
*/
int
dk4path_is_relative(const dkChar *path);

/**	Append path filename to path name already stored in buffer.
	CRT on Windows: Optional, disabling CRT degrades performance.
	@param	buffer		Buffer already containing a path.
	@param	sz		Buffer size.
	@param	filename	Relative file name to append to buffer.
	@param	erp		Error report, may be NULL.
	@return	1 on success, 0 on error.
	
	Error codes:
	- DK4_E_INVALID_ARGUMENTS<br>
	  if buffer or filename is NULL or sz is 0,
	- DK4_E_MATH_OVERFLOW<br>
	  if filename is too long,
	- DK4_E_MEMORY<br>
	  if allocation of a filename copy fails,
	- DK4_E_SYNTAX<br>
	  if too many .. in filename,
	- DK4_E_BUFFER_TOO_SMALL<br>
	  if buffer size is too small.
*/
int
dk4path_append(
  dkChar *buffer, size_t sz, const dkChar *filename, dk4_er_t *erp
);


/**	Find pointer to suffix.
	CRT on Windows: Not used.
	@param	filename	File name to find suffix for.
	@param	erp		Error report, may be NULL.
	@return	Pointer to suffix dot if found, NULL otherwise.
	
	Error codes:
	- DK4_E_INVALID_ARGUMENTS<br>
	  if filename is NULL,
	- DK4_E_NOT_FOUND<br>
	  if the file name does not contain a suffix.
*/
dkChar *
dk4path_get_suffix(const dkChar *filename, dk4_er_t *erp);


/**	Correct file name separators from slash to backslash on Windows,
	vice versa on other systems.
	CRT on Windows: Not used.
	@param	filename	File name to correct.
*/
void
dk4path_correct_sep(dkChar *filename);

/**	Check whether file name needs expansion on Windows.
	CRT on Windows: Not used.
	@param	filename	File name to check.
	@return	1 if expansion is necessary, 0 otherwise.
*/
int
dk4path_must_expand(const dkChar *filename);

/**	Check whether filename is in the specified parent directory.
	It may be equal to parent or below the parent directory.
	@param	filename	File or directory name to check.
	@param	parent		Parent directory.
	@param	erp		Error report, may be NULL.
	@return	1 for true, 0 for false.

	Error codes:
	- DK4_E_INVALID_ARGUMENTS<br>
	  if filename or parent is NULL,
	- DK4_E_BUFFER_TOO_SMALL<br>
	  if filename is too long for an internal buffer.
*/
int
dk4path_is_in_subdir(const dkChar *filename,const dkChar *parent,dk4_er_t *erp);

#ifdef __cplusplus
}
#endif



#endif