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
|
#ifdef HAVE_DLFCN_H
# include <dlfcn.h>
#endif
#import "OFException.h"
#import "OFArray.h"
#import "OFLocale.h"
#import "OFString.h"
#import "OFSystemInfo.h"
#import "OFInitializationFailedException.h"
#import "OFLockFailedException.h"
#import "OFUnlockFailedException.h"
#ifdef 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
|
>
>
>
<
<
<
<
|
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#ifdef HAVE_DLFCN_H
# include <dlfcn.h>
#endif
#import "OFException.h"
#import "OFArray.h"
#import "OFLocale.h"
#ifdef OF_HAVE_THREADS
# import "OFPlainMutex.h"
#endif
#import "OFString.h"
#import "OFSystemInfo.h"
#import "OFInitializationFailedException.h"
#import "OFLockFailedException.h"
#import "OFUnlockFailedException.h"
#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
|
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
|
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;
OF_CONSTRUCTOR()
{
OF_ENSURE(of_mutex_new(&mutex) == 0);
}
OF_DESTRUCTOR()
{
of_mutex_free(&mutex);
}
#endif
OFString *
of_strerror(int errNo)
{
OFString *ret;
#ifdef HAVE_STRERROR_R
char buffer[256];
#endif
if (errNo == 0)
|
|
|
|
|
|
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
|
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 OFPlainMutex mutex;
OF_CONSTRUCTOR()
{
OFEnsure(OFPlainMutexNew(&mutex) == 0);
}
OF_DESTRUCTOR()
{
OFPlainMutexFree(&mutex);
}
#endif
OFString *
OFStrError(int errNo)
{
OFString *ret;
#ifdef HAVE_STRERROR_R
char buffer[256];
#endif
if (errNo == 0)
|
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
|
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];
@try {
# endif
ret = [OFString
stringWithCString: strerror(errNo)
encoding: [OFLocale encoding]];
# ifdef OF_HAVE_THREADS
} @finally {
if (of_mutex_unlock(&mutex) != 0)
@throw [OFUnlockFailedException exception];
}
# endif
#endif
return ret;
}
#ifdef OF_WINDOWS
OFString *
of_windows_status_to_string(LSTATUS status)
{
OFString *string = nil;
void *buffer;
if ([OFSystemInfo isWindowsNT]) {
if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
|
|
|
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
211
212
213
214
215
216
217
218
219
220
221
|
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 (OFPlainMutexLock(&mutex) != 0)
@throw [OFLockFailedException exception];
@try {
# endif
ret = [OFString
stringWithCString: strerror(errNo)
encoding: [OFLocale encoding]];
# ifdef OF_HAVE_THREADS
} @finally {
if (OFPlainMutexUnlock(&mutex) != 0)
@throw [OFUnlockFailedException exception];
}
# endif
#endif
return ret;
}
#ifdef OF_WINDOWS
OFString *
OFWindowsStatusToString(LSTATUS status)
{
OFString *string = nil;
void *buffer;
if ([OFSystemInfo isWindowsNT]) {
if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|