Lines Matching refs:file

97 static void FSi_EndCommand(FSFile *file, FSResult ret)  in FSi_EndCommand()  argument
101 FSArchive *const arc = file->arc; in FSi_EndCommand()
107 if (*pp == file) in FSi_EndCommand()
109 *pp = file->next; in FSi_EndCommand()
113 file->next = NULL; in FSi_EndCommand()
117 FSCommandType command = FSi_GetCurrentCommand(file); in FSi_EndCommand()
123 file->error = ret; in FSi_EndCommand()
124 file->stat &= ~(FS_FILE_STATUS_CANCEL | FS_FILE_STATUS_BUSY | in FSi_EndCommand()
129 OS_WakeupThread(file->queue); in FSi_EndCommand()
138 FSResult FSi_WaitForArchiveCompletion(FSFile *file, FSResult result) in FSi_WaitForArchiveCompletion() argument
142 FSi_WaitConditionOn(&file->stat, FS_FILE_STATUS_ASYNC_DONE, file->queue); in FSi_WaitForArchiveCompletion()
143 file->stat &= ~FS_FILE_STATUS_ASYNC_DONE; in FSi_WaitForArchiveCompletion()
144 result = file->error; in FSi_WaitForArchiveCompletion()
160 static FSResult FSi_InvokeCommand(FSFile *file, FSCommandType command) in FSi_InvokeCommand() argument
163 FSArchive * const arc = file->arc; in FSi_InvokeCommand()
181 type *arg = (type*) file->argument; \ in FSi_InvokeCommand()
202 FS_INVOKE_METHOD_(ReadFile, arc, file, arg->buffer, &arg->length); in FSi_InvokeCommand()
205 FS_INVOKE_METHOD_(WriteFile, arc, file, arg->buffer, &arg->length); in FSi_InvokeCommand()
208 FS_INVOKE_METHOD_(SeekDirectory, arc, file, arg->id, arg->position); in FSi_InvokeCommand()
211 FS_INVOKE_METHOD_(ReadDirectory, arc, file, arg->info); in FSi_InvokeCommand()
217 FS_INVOKE_METHOD_(GetPath, arc, file, arg->is_directory, arg->buffer, &arg->length); in FSi_InvokeCommand()
220 FS_INVOKE_METHOD_(OpenFileFast, arc, file, arg->id, arg->mode); in FSi_InvokeCommand()
223 FS_INVOKE_METHOD_(OpenFileDirect, arc, file, arg->top, arg->bottom, &arg->id); in FSi_InvokeCommand()
226 FS_INVOKE_METHOD_(CloseFile, arc, file); in FSi_InvokeCommand()
241 FS_INVOKE_METHOD_(OpenFile, arc, file, arg->baseid, arg->relpath, arg->mode); in FSi_InvokeCommand()
244 FS_INVOKE_METHOD_(SeekFile, arc, file, &arg->offset, arg->from); in FSi_InvokeCommand()
247 FS_INVOKE_METHOD_(GetFileLength, arc, file, &arg->length); in FSi_InvokeCommand()
250 FS_INVOKE_METHOD_(GetFilePosition, arc, file, &arg->position); in FSi_InvokeCommand()
290 FS_INVOKE_METHOD_(FlushFile, arc, file); in FSi_InvokeCommand()
293 FS_INVOKE_METHOD_(SetFileLength, arc, file, arg->length); in FSi_InvokeCommand()
296 FS_INVOKE_METHOD_(OpenDirectory, arc, file, arg->baseid, arg->relpath, arg->mode); in FSi_InvokeCommand()
299 FS_INVOKE_METHOD_(CloseDirectory, arc, file); in FSi_InvokeCommand()
302 FS_INVOKE_METHOD_(SetSeekCache, arc, file, arg->buf, arg->buf_size); in FSi_InvokeCommand()
322 if ((file->stat & FS_FILE_STATUS_BLOCKING) != 0) in FSi_InvokeCommand()
324 result = FSi_WaitForArchiveCompletion(file, result); in FSi_InvokeCommand()
329 FSi_EndCommand(file, result); in FSi_InvokeCommand()
449 static void FSi_ExecuteAsyncCommand(FSFile *file) in FSi_ExecuteAsyncCommand() argument
451 FSArchive * const arc = file->arc; in FSi_ExecuteAsyncCommand()
452 while (file) in FSi_ExecuteAsyncCommand()
457 file->stat |= FS_FILE_STATUS_OPERATING; in FSi_ExecuteAsyncCommand()
458 if ((file->stat & FS_FILE_STATUS_BLOCKING) != 0) in FSi_ExecuteAsyncCommand()
460 OS_WakeupThread(file->queue); in FSi_ExecuteAsyncCommand()
461 file = NULL; in FSi_ExecuteAsyncCommand()
465 if (!file) in FSi_ExecuteAsyncCommand()
470 else if (FSi_InvokeCommand(file, FSi_GetCurrentCommand(file)) == FS_RESULT_PROC_ASYNC) in FSi_ExecuteAsyncCommand()
477 file = FSi_NextCommand(arc, TRUE); in FSi_ExecuteAsyncCommand()
491 static void FSi_ExecuteSyncCommand(FSFile *file) in FSi_ExecuteSyncCommand() argument
494 … FSi_WaitConditionChange(&file->stat, FS_FILE_STATUS_OPERATING, FS_FILE_STATUS_BUSY, file->queue); in FSi_ExecuteSyncCommand()
496 if ((file->stat & FS_FILE_STATUS_OPERATING) != 0) in FSi_ExecuteSyncCommand()
498 FSArchive * const arc = file->arc; in FSi_ExecuteSyncCommand()
500 result = FSi_InvokeCommand(file, FSi_GetCurrentCommand(file)); in FSi_ExecuteSyncCommand()
501 FSi_EndCommand(file, result); in FSi_ExecuteSyncCommand()
503 file = FSi_NextCommand(arc, TRUE); in FSi_ExecuteSyncCommand()
504 if (file) in FSi_ExecuteSyncCommand()
506 FSi_ExecuteAsyncCommand(file); in FSi_ExecuteSyncCommand()
523 BOOL FSi_SendCommand(FSFile *file, FSCommandType command, BOOL blocking) in FSi_SendCommand() argument
526 FSArchive * const arc = file->arc; in FSi_SendCommand()
529 if (FS_IsBusy(file)) in FSi_SendCommand()
536 file->error = FS_RESULT_INVALID_PARAMETER; in FSi_SendCommand()
541 file->error = FS_RESULT_BUSY; in FSi_SendCommand()
542 file->stat &= ~(FS_FILE_STATUS_CMD_MASK << FS_FILE_STATUS_CMD_SHIFT); in FSi_SendCommand()
543 file->stat |= (command << FS_FILE_STATUS_CMD_SHIFT); in FSi_SendCommand()
544 file->stat |= FS_FILE_STATUS_BUSY; in FSi_SendCommand()
545 file->next = NULL; in FSi_SendCommand()
548 file->stat |= FS_FILE_STATUS_BLOCKING; in FSi_SendCommand()
555 FSi_EndCommand(file, FS_RESULT_CANCELED); in FSi_SendCommand()
563 *pp = file; in FSi_SendCommand()
565 owner = (arc->list == file) && ((arc->flag & FS_ARCHIVE_FLAG_RUNNING) == 0); in FSi_SendCommand()
569 if (file->error != FS_RESULT_CANCELED) in FSi_SendCommand()
576 FSi_ExecuteSyncCommand(file); in FSi_SendCommand()
577 retval = FS_IsSucceeded(file); in FSi_SendCommand()
1124 FSFile *file = arc->list; in FS_UnmountArchive() local
1126 while (file) in FS_UnmountArchive()
1128 FSFile *next = file->next; in FS_UnmountArchive()
1129 FSi_EndCommand(file, FS_RESULT_CANCELED); in FS_UnmountArchive()
1130 file = next; in FS_UnmountArchive()
1215 FSFile *file = NULL; in FS_ResumeArchive() local
1216 file = FSi_NextCommand(arc, TRUE); in FS_ResumeArchive()
1217 if (file) in FS_ResumeArchive()
1219 FSi_ExecuteAsyncCommand(file); in FS_ResumeArchive()
1239 FSFile *file = arc->list; in FS_NotifyArchiveAsyncEnd() local
1240 if ((file->stat & FS_FILE_STATUS_BLOCKING) != 0) in FS_NotifyArchiveAsyncEnd()
1243 file->stat |= FS_FILE_STATUS_ASYNC_DONE; in FS_NotifyArchiveAsyncEnd()
1244 file->error = ret; in FS_NotifyArchiveAsyncEnd()
1245 OS_WakeupThread(file->queue); in FS_NotifyArchiveAsyncEnd()
1250 FSi_EndCommand(file, ret); in FS_NotifyArchiveAsyncEnd()
1251 file = FSi_NextCommand(arc, TRUE); in FS_NotifyArchiveAsyncEnd()
1252 if (file) in FS_NotifyArchiveAsyncEnd()
1254 FSi_ExecuteAsyncCommand(file); in FS_NotifyArchiveAsyncEnd()
1269 BOOL FS_WaitAsync(FSFile *file) in FS_WaitAsync() argument
1271 SDK_NULL_ASSERT(file); in FS_WaitAsync()
1278 if (FS_IsBusy(file)) in FS_WaitAsync()
1281 is_owner = !(file->stat & (FS_FILE_STATUS_BLOCKING | FS_FILE_STATUS_OPERATING)); in FS_WaitAsync()
1284 file->stat |= FS_FILE_STATUS_BLOCKING; in FS_WaitAsync()
1290 FSi_ExecuteSyncCommand(file); in FS_WaitAsync()
1294 FSi_WaitConditionOff(&file->stat, FS_FILE_STATUS_BUSY, file->queue); in FS_WaitAsync()
1298 return FS_IsSucceeded(file); in FS_WaitAsync()