

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 初版