static void fileClose(struct _CFStream *stream, void *info) { _CFFileStreamContext *ctxt = (_CFFileStreamContext *)info; if (ctxt->fd >= 0) { close(ctxt->fd); ctxt->fd = -1; #ifdef REAL_FILE_SCHEDULING if (ctxt->rlInfo.cffd) { CFFileDescriptorInvalidate(ctxt->rlInfo.cffd); CFRelease(ctxt->rlInfo.cffd); ctxt->rlInfo.cffd = NULL; } } else if (ctxt->rlInfo.rlArray) { CFRelease(ctxt->rlInfo.rlArray); ctxt->rlInfo.rlArray = NULL; #endif } }
static void fileFinalize(struct _CFStream *stream, void *info) { _CFFileStreamContext *ctxt = (_CFFileStreamContext *)info; if (ctxt->fd > 0) { #ifdef REAL_FILE_SCHEDULING if (ctxt->rlInfo.cffd) { CFFileDescriptorInvalidate(ctxt->rlInfo.cffd); CFRelease(ctxt->rlInfo.cffd); ctxt->rlInfo.cffd = NULL; } #endif close(ctxt->fd); #ifdef REAL_FILE_SCHEDULING } else if (ctxt->rlInfo.rlArray) { CFRelease(ctxt->rlInfo.rlArray); #endif } if (ctxt->url) { CFRelease(ctxt->url); } CFAllocatorDeallocate(CFGetAllocator(stream), ctxt); }
FskErr FskFSDirectoryChangeNotifierDispose(FskDirectoryChangeNotifier dirChangeNotifier) { FskFSDirectoryChangeNotifier directoryChangeNotifier; if (dirChangeNotifier == NULL) return kFskErrInvalidParameter; directoryChangeNotifier = (FskFSDirectoryChangeNotifier)dirChangeNotifier; if (directoryChangeNotifier->dirKQRef != NULL) { CFFileDescriptorInvalidate(directoryChangeNotifier->dirKQRef); CFRelease(directoryChangeNotifier->dirKQRef); } if(directoryChangeNotifier->dirFD != -1) { close(directoryChangeNotifier->dirFD); } FskMemPtrDispose(directoryChangeNotifier->path); FskMemPtrDispose(directoryChangeNotifier); return kFskErrNone; }