1/*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6#include <stdio.h>
7#include <string.h>
8
9#include "posix_error_mapper.h"
10
11
12static int*
13real_errnop()
14{
15	GET_REAL_FUNCTION(int*, _errnop, (void));
16	return sReal__errnop();
17}
18
19
20int*
21_errnop(void)
22{
23	HIDDEN_FUNCTION(_errnop);
24
25	// convert errno to positive error code
26	int* error = real_errnop();
27	if (*error < 0)
28		*error = B_TO_POSITIVE_ERROR(*error);
29	return error;
30}
31
32
33
34WRAPPER_FUNCTION(char*, strerror, (int errorCode),
35	return sReal_strerror(B_TO_NEGATIVE_ERROR(errorCode));
36)
37
38
39WRAPPER_FUNCTION(int, strerror_r,
40		(int errorCode, char* buffer, size_t bufferSize),
41	return sReal_strerror_r(B_TO_NEGATIVE_ERROR(errorCode), buffer, bufferSize);
42)
43
44
45WRAPPER_FUNCTION(void, perror, (const char* errorPrefix),
46	// convert errno to negative error code
47	int* error = real_errnop();
48	int oldError = *error;
49	if (*error > 0)
50		*error = B_TO_NEGATIVE_ERROR(*error);
51
52	// call the real perror()
53	sReal_perror(errorPrefix);
54
55	// reset errno
56	*error = oldError;
57)
58