ObjFW  Diff

Differences From Artifact [aa89efc62e]:

To Artifact [c2351f2243]:


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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41




42
43
44
45
46
47
48







+
+
+







-
-
-
-







#ifdef HAVE_DLFCN_H
# include <dlfcn.h>
#endif

#import "OFException.h"
#import "OFArray.h"
#import "OFLocale.h"
#ifdef OF_HAVE_THREADS
# import "OFMutex.h"
#endif
#import "OFString.h"
#import "OFSystemInfo.h"

#import "OFInitializationFailedException.h"
#import "OFLockFailedException.h"
#import "OFUnlockFailedException.h"

#if !defined(HAVE_STRERROR_R) && defined(OF_HAVE_THREADS)
# import "mutex.h"
#endif

#if defined(OF_WINDOWS) && defined(OF_HAVE_SOCKETS)
# include <winerror.h>
#endif

#if defined(OF_ARM) && !defined(__ARM_DWARF_EH__)
# define HAVE_ARM_EHABI_EXCEPTIONS
#endif
67
68
69
70
71
72
73
74

75
76
77
78
79






80
81
82
83
84
85
86
66
67
68
69
70
71
72

73
74
75
76


77
78
79
80
81
82
83
84
85
86
87
88
89







-
+



-
-
+
+
+
+
+
+







extern uintptr_t _Unwind_GetIP(struct _Unwind_Context *);
#else
extern int _Unwind_VRS_Get(struct _Unwind_Context *, int, uint32_t, int,
    void *);
#endif

#if !defined(HAVE_STRERROR_R) && defined(OF_HAVE_THREADS)
static of_mutex_t mutex;
static OFMutex *mutex;

OF_CONSTRUCTOR()
{
	if (of_mutex_new(&mutex) != 0)
		@throw [OFInitializationFailedException exception];
	mutex = [[OFMutex alloc] init];
}

OF_DESTRUCTOR()
{
	[mutex release];
}
#endif

OFString *
of_strerror(int errNo)
{
	OFString *ret;
185
186
187
188
189
190
191
192
193
194

195
196
197
198
199
200
201
202

203
204
205
206
207
208
209
210
188
189
190
191
192
193
194



195
196
197
198
199
200
201
202

203

204
205
206
207
208
209
210







-
-
-
+







-
+
-







	if (strerror_r(errNo, buffer, 256) != 0)
		return @"Unknown error (strerror_r failed)";

	ret = [OFString stringWithCString: buffer
				 encoding: [OFLocale encoding]];
#else
# ifdef OF_HAVE_THREADS
	if (of_mutex_lock(&mutex) != 0)
		@throw [OFLockFailedException exception];

	[mutex lock];
	@try {
# endif
		ret = [OFString
		    stringWithCString: strerror(errNo)
			     encoding: [OFLocale encoding]];
# ifdef OF_HAVE_THREADS
	} @finally {
		if (of_mutex_unlock(&mutex) != 0)
		[mutex unlock];
			@throw [OFUnlockFailedException exception];
	}
# endif
#endif

	return ret;
}