# FS_COMMAND_GETPATH

## 定義

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

## 説明

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

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

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

>     typedef struct
>     {
>         u8     *buf;
>         u32    buf_len;
>         u16    total_len;
>         u16    dir_id;
>     } FSGetPathInfo;

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

引数 | 内容
buf | 取得した絶対パス名文字列を格納するメモリへのポインタを示します。 この値が NULL の場合、絶対パス名文字列の取得は不要です。
buf_len | buf のメモリバイトサイズを示します。
total_len | すでに計算済みの、正しい絶対パス名文字列長を示します。 この値が 0 の場合、正しく設定する必要があります。
dir_id | 対象がディレクトリであればその位置を、ファイルであればそれが属するディレクトリの位置を示します。 total_len が 0 の場合、この値を正しく設定する必要があります。

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

>     p_file は、ファイル情報またはディレクトリ位置情報のいずれかを保持しています。
>     どちらの情報を保持しているかは、FS_IsFile 関数または FS_IsDir 関数で判断することができます。
>     引数の各変数を以下のように設定します。

>     ・引数の total_len が 0 の場合、p_file を表す絶対パス名文字列の長さを終端の '\0' も含めて total_len に設定し、
>       p_file がディレクトリであればその値を、ファイルであればそれが属するディレクトリ位置を、dir_id に設定します。
>       total_len が 0 でない場合、すでにこのコマンドによって上記の設定が行われていることが保証されます。

>     ・引数の buf が NULL でなければ、p_file を表す絶対パス名文字列を終端の '\0' も含めてメモリへ格納します。
>       ただし、buf_len が total_len より小さい場合には FS_RESULT_FAILURE を返す必要があります。
>       このとき、可能な限り文字列を格納することも、全く格納しないことも許されます。

デフォルトの実装

> 与えられた引数から、FS_COMMAND_SEEKDIR コマンドと FS_COMMAND_READDIR コマンドのみを使用して結果を求めます。

コマンドの結果

>     FS_RESULT_SUCCESS を返した場合、total_len には正しい絶対パス名文字列長が設定され、
>     かつ、buf が NULL でなければ終端の '\0' も含めた絶対パス名文字列が格納されたものと判断されます。
>     そうでない場合、buf が NULL でなく buf_len が total_len 未満であったと判断されます。

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

> FS_GetPathLength
> FS_GetPathName

## 参照

`FSArchive FS_ARCHIVE_PROC_FUNC FS_COMMAND_*
FS_SetArchiveProc`

## 履歴

2004/08/25 誤記修正 FS_IdFile → FS_IsFile
2004/07/12 初版