︙ | | |
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
-
+
-
+
|
# define S_IWOTH 0
#endif
#define DEFAULT_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
#define DIR_MODE DEFAULT_MODE | S_IXUSR | S_IXGRP | S_IXOTH
#if defined(OF_HAVE_CHOWN) && defined(OF_HAVE_THREADS)
static of_mutex_t mutex;
static of_mutex_t chownMutex;
#endif
#if !defined(HAVE_READDIR_R) && !defined(_WIN32) && defined(OF_HAVE_THREADS)
static of_mutex_t mutex;
static of_mutex_t readdirMutex;
#endif
int
of_stat(OFString *path, of_stat_t *buffer)
{
#if defined(_WIN32)
return _wstat64([path UTF16String], buffer);
|
︙ | | |
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
-
+
-
+
|
@implementation OFFile
+ (void)initialize
{
if (self != [OFFile class])
return;
#if defined(OF_HAVE_CHOWN) && defined(OF_HAVE_THREADS)
if (!of_mutex_new(&mutex))
if (!of_mutex_new(&chownMutex))
@throw [OFInitializationFailedException
exceptionWithClass: self];
#endif
#if !defined(HAVE_READDIR_R) && !defined(_WIN32) && defined(OF_HAVE_THREADS)
if (!of_mutex_new(&mutex))
if (!of_mutex_new(&readdirMutex))
@throw [OFInitializationFailedException
exceptionWithClass: self];
#endif
#ifdef __wii__
if (!fatInitDefault())
@throw [OFInitializationFailedException
|
︙ | | |
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
|
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
|
-
+
|
encoding = [OFSystemInfo native8BitEncoding];
if ((dir = opendir([path cStringWithEncoding: encoding])) == NULL)
@throw [OFOpenItemFailedException exceptionWithPath: path
errNo: errno];
# if !defined(HAVE_READDIR_R) && defined(OF_HAVE_THREADS)
if (!of_mutex_lock(&mutex))
if (!of_mutex_lock(&readdirMutex))
@throw [OFLockFailedException exception];
# endif
@try {
for (;;) {
struct dirent *dirent;
# ifdef HAVE_READDIR_R
|
︙ | | |
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
|
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
|
-
+
|
[files addObject: file];
objc_autoreleasePoolPop(pool);
}
} @finally {
closedir(dir);
# if !defined(HAVE_READDIR_R) && defined(OF_HAVE_THREADS)
if (!of_mutex_unlock(&mutex))
if (!of_mutex_unlock(&readdirMutex))
@throw [OFUnlockFailedException exception];
# endif
}
#else
void *pool = objc_autoreleasePoolPush();
HANDLE handle;
WIN32_FIND_DATAW fd;
|
︙ | | |
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
|
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
|
-
+
|
if (path == nil || (owner == nil && group == nil))
@throw [OFInvalidArgumentException exception];
encoding = [OFSystemInfo native8BitEncoding];
# ifdef OF_HAVE_THREADS
if (!of_mutex_lock(&mutex))
if (!of_mutex_lock(&chownMutex))
@throw [OFLockFailedException exception];
@try {
# endif
if (owner != nil) {
struct passwd *passwd;
|
︙ | | |
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
|
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
|
-
+
|
group: group
errNo: errno];
gid = group_->gr_gid;
}
# ifdef OF_HAVE_THREADS
} @finally {
if (!of_mutex_unlock(&mutex))
if (!of_mutex_unlock(&chownMutex))
@throw [OFUnlockFailedException exception];
}
# endif
if (chown([path cStringWithEncoding: encoding], uid, gid) != 0)
@throw [OFChangeOwnerFailedException exceptionWithPath: path
owner: owner
|
︙ | | |