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()
448 static void FSi_ExecuteAsyncCommand(FSFile *file) in FSi_ExecuteAsyncCommand() argument
450 FSArchive * const arc = file->arc; in FSi_ExecuteAsyncCommand()
451 while (file) in FSi_ExecuteAsyncCommand()
456 file->stat |= FS_FILE_STATUS_OPERATING; in FSi_ExecuteAsyncCommand()
457 if ((file->stat & FS_FILE_STATUS_BLOCKING) != 0) in FSi_ExecuteAsyncCommand()
459 OS_WakeupThread(file->queue); in FSi_ExecuteAsyncCommand()
460 file = NULL; in FSi_ExecuteAsyncCommand()
464 if (!file) in FSi_ExecuteAsyncCommand()
469 else if (FSi_InvokeCommand(file, FSi_GetCurrentCommand(file)) == FS_RESULT_PROC_ASYNC) in FSi_ExecuteAsyncCommand()
476 file = FSi_NextCommand(arc, TRUE); in FSi_ExecuteAsyncCommand()
490 static void FSi_ExecuteSyncCommand(FSFile *file) in FSi_ExecuteSyncCommand() argument
492 FSArchive * const arc = file->arc; in FSi_ExecuteSyncCommand()
495 FSi_WaitConditionOn(&file->stat, FS_FILE_STATUS_OPERATING, file->queue); in FSi_ExecuteSyncCommand()
496 result = FSi_InvokeCommand(file, FSi_GetCurrentCommand(file)); in FSi_ExecuteSyncCommand()
497 FSi_EndCommand(file, result); in FSi_ExecuteSyncCommand()
499 file = FSi_NextCommand(arc, TRUE); in FSi_ExecuteSyncCommand()
500 if (file) in FSi_ExecuteSyncCommand()
502 FSi_ExecuteAsyncCommand(file); in FSi_ExecuteSyncCommand()
518 BOOL FSi_SendCommand(FSFile *file, FSCommandType command, BOOL blocking) in FSi_SendCommand() argument
521 FSArchive * const arc = file->arc; in FSi_SendCommand()
523 if (FS_IsBusy(file)) in FSi_SendCommand()
530 file->error = FS_RESULT_INVALID_PARAMETER; in FSi_SendCommand()
535 file->error = FS_RESULT_BUSY; in FSi_SendCommand()
536 file->stat &= ~(FS_FILE_STATUS_CMD_MASK << FS_FILE_STATUS_CMD_SHIFT); in FSi_SendCommand()
537 file->stat |= (command << FS_FILE_STATUS_CMD_SHIFT); in FSi_SendCommand()
538 file->stat |= FS_FILE_STATUS_BUSY; in FSi_SendCommand()
539 file->next = NULL; in FSi_SendCommand()
542 file->stat |= FS_FILE_STATUS_BLOCKING; in FSi_SendCommand()
549 FSi_EndCommand(file, FS_RESULT_CANCELED); in FSi_SendCommand()
557 *pp = file; in FSi_SendCommand()
562 if (file->error != FS_RESULT_CANCELED) in FSi_SendCommand()
569 FSi_ExecuteSyncCommand(file); in FSi_SendCommand()
570 retval = FS_IsSucceeded(file); in FSi_SendCommand()
1117 FSFile *file = arc->list; in FS_UnmountArchive() local
1119 while (file) in FS_UnmountArchive()
1121 FSFile *next = file->next; in FS_UnmountArchive()
1122 FSi_EndCommand(file, FS_RESULT_CANCELED); in FS_UnmountArchive()
1123 file = next; in FS_UnmountArchive()
1208 FSFile *file = NULL; in FS_ResumeArchive() local
1209 file = FSi_NextCommand(arc, TRUE); in FS_ResumeArchive()
1210 if (file) in FS_ResumeArchive()
1212 FSi_ExecuteAsyncCommand(file); in FS_ResumeArchive()
1232 FSFile *file = arc->list; in FS_NotifyArchiveAsyncEnd() local
1233 if ((file->stat & FS_FILE_STATUS_BLOCKING) != 0) in FS_NotifyArchiveAsyncEnd()
1236 file->stat |= FS_FILE_STATUS_ASYNC_DONE; in FS_NotifyArchiveAsyncEnd()
1237 file->error = ret; in FS_NotifyArchiveAsyncEnd()
1238 OS_WakeupThread(file->queue); in FS_NotifyArchiveAsyncEnd()
1243 FSi_EndCommand(file, ret); in FS_NotifyArchiveAsyncEnd()
1244 file = FSi_NextCommand(arc, TRUE); in FS_NotifyArchiveAsyncEnd()
1245 if (file) in FS_NotifyArchiveAsyncEnd()
1247 FSi_ExecuteAsyncCommand(file); in FS_NotifyArchiveAsyncEnd()
1262 BOOL FS_WaitAsync(FSFile *file) in FS_WaitAsync() argument
1264 SDK_NULL_ASSERT(file); in FS_WaitAsync()
1271 if (FS_IsBusy(file)) in FS_WaitAsync()
1274 is_owner = !(file->stat & (FS_FILE_STATUS_BLOCKING | FS_FILE_STATUS_OPERATING)); in FS_WaitAsync()
1277 file->stat |= FS_FILE_STATUS_BLOCKING; in FS_WaitAsync()
1283 FSi_ExecuteSyncCommand(file); in FS_WaitAsync()
1287 FSi_WaitConditionOff(&file->stat, FS_FILE_STATUS_BUSY, file->queue); in FS_WaitAsync()
1291 return FS_IsSucceeded(file); in FS_WaitAsync()