# FS_COMMAND_READFILE

## 定義

  `FSResult FS_ARCHIVE_PROC_FUNC(FSFile *p_file, FSCommandType command /* = FS_COMMAND_READFILE */);
  `

## 説明

アーカイブコマンド `FS_COMMAND_READFILE の動作仕様を以下に示します`。

このコマンドに渡される引数

>     p_file に格納された変数 arg.readfile をコマンド引数とします。
>     この変数は nitro/fs/file.h にて以下のように定義されています。

>     typedef struct
>     {
>         void    *dst;
>         u32     len_org;
>         u32     len;
>     } FSReadFileInfo;

> 引数の内容は以下のとおりです。

引数 | 内容
dst | データを読み出して格納する転送先のメモリアドレスを示します。
len_org | データを読み出すバイトサイズを、指定されたそのままの値で示します。
len | データを読み出すバイトサイズを、コマンド呼び出し時のファイルサイズにて補正した値で示します。

このコマンドに要求される動作

>     p_file は常に、prop.file にファイル情報を格納したハンドルです。
>     p_file の変数 prop.file に基づいて以下のように設定します。

>     ・prop.file.pos で示されるアーカイブオフセット位置から len バイト分のデータを dst のメモリに転送します。
>       その後、prop.file.pos を len だけ加算します。

>       len の値は実際に指定された値から prop,file.bottom を考慮して補正されています。
>       ファイルサイズを超えて読み込む際に特別な処理を実行したい場合は、
>       引数 len_org に格納されている本来の値を使用することができます。

デフォルトの実装

> prop.file.pos で示されるベースオフセット位置からアーカイブのリードコールバック関数を用いて dst へ len バイト分を転送します。
> その後、prop.file.pos を len だけ加算します。

コマンドの結果

>     FS_RESULT_SUCCESS を返した場合、転送処理は len バイト分正しく完了したと判断されます。
>     それ以外を返した場合、何らかのエラーにより転送が失敗したと判断されます。

このコマンドが使用される関数

> FS_ReadFile
> FS_ReadFileAsync

## 参照

`FSArchive FS_ARCHIVE_PROC_FUNC FS_COMMAND_*
FS_SetArchiveProc`

## 履歴

2004/07/12 初版