1168191Sjhb/*
2168191Sjhb * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
3168191Sjhb * Distributed under the terms of the MIT License.
4168191Sjhb */
5168191Sjhb
6168191Sjhb
7168191Sjhb#include <stdarg.h>
8168191Sjhb
9168191Sjhb#include "remapped_functions.h"
10168191Sjhb
11168191Sjhb
12168191Sjhb#if __GNUC__ >= 4
13168191Sjhb#	define HIDDEN_FUNCTION(function)	do {} while (0)
14168191Sjhb#	define HIDDEN_FUNCTION_ATTRIBUTE	__attribute__((visibility("hidden")))
15168191Sjhb#else
16168191Sjhb#	define HIDDEN_FUNCTION(function)	asm volatile(".hidden " #function)
17168191Sjhb#	define HIDDEN_FUNCTION_ATTRIBUTE
18168191Sjhb#endif
19168191Sjhb
20168191Sjhb
21168191Sjhbextern "C" int HIDDEN_FUNCTION_ATTRIBUTE
22168191Sjhbfchmod(int fd, mode_t mode)
23168191Sjhb{
24168191Sjhb	HIDDEN_FUNCTION(fchmod);
25168191Sjhb
26168191Sjhb	return _haiku_build_fchmod(fd, mode);
27168191Sjhb}
28168191Sjhb
29168191Sjhb
30168191Sjhbextern "C" int HIDDEN_FUNCTION_ATTRIBUTE
31168191Sjhbfchmodat(int fd, const char* path, mode_t mode, int flag)
32168191Sjhb{
33168191Sjhb	HIDDEN_FUNCTION(fchmodat);
34168191Sjhb
35168191Sjhb	return _haiku_build_fchmodat(fd, path, mode, flag);
36168191Sjhb}
37168191Sjhb
38168191Sjhb
39168191Sjhbextern "C" int HIDDEN_FUNCTION_ATTRIBUTE
40168191Sjhbfstat(int fd, struct stat* st)
41168191Sjhb{
42168191Sjhb	HIDDEN_FUNCTION(fstat);
43
44	return _haiku_build_fstat(fd, st);
45}
46
47
48extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
49fstatat(int fd, const char* path, struct stat* st, int flag)
50{
51	HIDDEN_FUNCTION(fstatat);
52
53	return _haiku_build_fstatat(fd, path, st, flag);
54}
55
56
57extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
58mkdirat(int fd, const char* path, mode_t mode)
59{
60	HIDDEN_FUNCTION(mkdirat);
61
62	return _haiku_build_mkdirat(fd, path, mode);
63}
64
65
66extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
67mkfifoat(int fd, const char* path, mode_t mode)
68{
69	HIDDEN_FUNCTION(mkfifoat);
70
71	return _haiku_build_mkfifoat(fd, path, mode);
72}
73
74
75extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
76utimensat(int fd, const char* path, const struct timespec times[2], int flag)
77{
78	HIDDEN_FUNCTION(utimensat);
79
80	return _haiku_build_utimensat(fd, path, times, flag);
81}
82
83
84extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
85futimens(int fd, const struct timespec times[2])
86{
87	HIDDEN_FUNCTION(futimens);
88
89	return _haiku_build_futimens(fd, times);
90}
91
92
93extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
94faccessat(int fd, const char* path, int accessMode, int flag)
95{
96	HIDDEN_FUNCTION(faccessat);
97
98	return _haiku_build_faccessat(fd, path, accessMode, flag);
99}
100
101
102extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
103fchdir(int fd)
104{
105	HIDDEN_FUNCTION(fchdir);
106
107	return _haiku_build_fchdir(fd);
108}
109
110
111extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
112close(int fd)
113{
114	HIDDEN_FUNCTION(close);
115
116	return _haiku_build_close(fd);
117}
118
119
120extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
121dup(int fd)
122{
123	HIDDEN_FUNCTION(dup);
124
125	return _haiku_build_dup(fd);
126}
127
128
129extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
130dup2(int fd1, int fd2)
131{
132	HIDDEN_FUNCTION(dup2);
133
134	return _haiku_build_dup2(fd1, fd2);
135}
136
137
138extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
139linkat(int toFD, const char* toPath, int pathFD, const char* path, int flag)
140{
141	HIDDEN_FUNCTION(linkat);
142
143	return _haiku_build_linkat(toFD, toPath, pathFD, path, flag);
144}
145
146
147extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
148unlinkat(int fd, const char* path, int flag)
149{
150	HIDDEN_FUNCTION(unlinkat);
151
152	return _haiku_build_unlinkat(fd, path, flag);
153}
154
155
156extern "C" ssize_t HIDDEN_FUNCTION_ATTRIBUTE
157readlinkat(int fd, const char* path, char* buffer, size_t bufferSize)
158{
159	HIDDEN_FUNCTION(readlinkat);
160
161	return _haiku_build_readlinkat(fd, path, buffer, bufferSize);
162}
163
164
165extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
166symlinkat(const char* toPath, int fd, const char* symlinkPath)
167{
168	HIDDEN_FUNCTION(symlinkat);
169
170	return _haiku_build_symlinkat(toPath, fd, symlinkPath);
171}
172
173
174extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
175ftruncate(int fd, off_t newSize)
176{
177	HIDDEN_FUNCTION(ftruncate);
178
179	return _haiku_build_ftruncate(fd, newSize);
180}
181
182
183extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
184fchown(int fd, uid_t owner, gid_t group)
185{
186	HIDDEN_FUNCTION(fchown);
187
188	return _haiku_build_fchown(fd, owner, group);
189}
190
191
192extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
193fchownat(int fd, const char* path, uid_t owner, gid_t group, int flag)
194{
195	HIDDEN_FUNCTION(fchownat);
196
197	return _haiku_build_fchownat(fd, path, owner, group, flag);
198}
199
200
201extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
202mknodat(int fd, const char* name, mode_t mode, dev_t dev)
203{
204	HIDDEN_FUNCTION(mknodat);
205
206	return _haiku_build_mknodat(fd, name, mode, dev);
207}
208
209
210extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
211creat(const char* path, mode_t mode)
212{
213	HIDDEN_FUNCTION(RESOLVE(creat));
214
215	return _haiku_build_creat(path, mode);
216}
217
218
219extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
220open(const char* path, int openMode, ...)
221{
222	HIDDEN_FUNCTION(open);
223
224	mode_t permissions = 0;
225	if ((openMode & O_CREAT) != 0) {
226		va_list args;
227		va_start(args, openMode);
228		mode_t mask = umask(0);
229		umask(mask);
230		permissions = va_arg(args, int);
231		va_end(args);
232	}
233
234	return _haiku_build_open(path, openMode, permissions);
235}
236
237
238extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
239openat(int fd, const char* path, int openMode, ...)
240{
241	HIDDEN_FUNCTION(openat);
242
243	mode_t permissions = 0;
244	if ((openMode & O_CREAT) != 0) {
245		va_list args;
246		va_start(args, openMode);
247		mode_t mask = umask(0);
248		umask(mask);
249		permissions = va_arg(args, int);
250		va_end(args);
251	}
252
253	return _haiku_build_openat(fd, path, openMode, permissions);
254}
255
256
257extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
258fcntl(int fd, int op, ...)
259{
260	HIDDEN_FUNCTION(fcntl);
261
262	va_list args;
263	va_start(args, op);
264	int argument = va_arg(args, int);
265	va_end(args);
266
267	return _haiku_build_fcntl(fd, op, argument);
268}
269
270
271extern "C" int HIDDEN_FUNCTION_ATTRIBUTE
272renameat(int fromFD, const char* from, int toFD, const char* to)
273{
274	HIDDEN_FUNCTION(renameat);
275
276	return _haiku_build_renameat(fromFD, from, toFD, to);
277}
278