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
|
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
|
-
-
+
+
-
+
-
+
|
#ifndef O_EXLOCK
# define O_EXLOCK 0
#endif
#ifndef OF_AMIGAOS
# define closeHandle(h) close(h)
#else
static struct of_file_handle {
of_file_handle_t previous, next;
static struct OFFileHandle
OFFileHandle previous, next;
BPTR handle;
bool append;
} *firstHandle = NULL;
static void
closeHandle(of_file_handle_t handle)
closeHandle(OFFileHandle handle)
{
Close(handle->handle);
if (handle->previous != NULL)
handle->previous->next = handle->next;
if (handle->next != NULL)
handle->next->previous = handle->previous;
if (firstHandle == handle)
firstHandle = handle->next;
free(handle);
}
OF_DESTRUCTOR()
{
for (of_file_handle_t iter = firstHandle; iter != NULL;
for (OFFileHandle iter = firstHandle; iter != NULL;
iter = iter->next)
Close(iter->handle);
}
#endif
#ifndef OF_AMIGAOS
static int
|
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
|
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
|
-
+
-
+
|
}
+ (instancetype)fileWithURL: (OFURL *)URL mode: (OFString *)mode
{
return [[[self alloc] initWithURL: URL mode: mode] autorelease];
}
+ (instancetype)fileWithHandle: (of_file_handle_t)handle
+ (instancetype)fileWithHandle: (OFFileHandle)handle
{
return [[[self alloc] initWithHandle: handle] autorelease];
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithPath: (OFString *)path mode: (OFString *)mode
{
of_file_handle_t handle;
OFFileHandle handle;
@try {
void *pool = objc_autoreleasePoolPush();
int flags;
#ifndef OF_AMIGAOS
if ((flags = parseMode(mode.UTF8String)) == -1)
|
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
|
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
|
-
+
|
self = [self initWithPath: fileSystemRepresentation mode: mode];
objc_autoreleasePoolPop(pool);
return self;
}
- (instancetype)initWithHandle: (of_file_handle_t)handle
- (instancetype)initWithHandle: (OFFileHandle)handle
{
self = [super init];
_handle = handle;
return self;
}
|