# FSResult

## 定義

    #include <nitro/fs.h>

    typedef	enum FSResult
    {
        FS_RESULT_SUCCESS = 0,
        FS_RESULT_FAILURE = 1,
        FS_RESULT_BUSY = 2,
        FS_RESULT_CANCELED = 3,
        FS_RESULT_UNSUPPORTED = 4,
        FS_RESULT_ERROR = 5,
        FS_RESULT_INVALID_PARAMETER = 6,
        FS_RESULT_NO_MORE_RESOURCE = 7,
        FS_RESULT_ALREADY_DONE = 8,
        FS_RESULT_PERMISSION_DENIED = 9,
        FS_RESULT_MEDIA_FATAL = 10,
        FS_RESULT_NO_ENTRY = 11,
        FS_RESULT_MEDIA_NOTHING = 12,
        FS_RESULT_MEDIA_UNKNOWN = 13,
        FS_RESULT_BAD_FORMAT = 14,

        FS_RESULT_PROC_ASYNC = 256,
        FS_RESULT_PROC_DEFAULT,
        FS_RESULT_PROC_UNKNOWN,

        FS_RESULT_CANCELLED = FS_RESULT_CANCELED
    }
    FSResult;

## 説明

ファイルシステムAPIの実行結果、およびアーカイブのユーザプロシージャの結果を表現する列挙型です。
以下のように定義されます。

以下はFSライブラリ関数の実行結果として返されます。
FS_RESULT_SUCCESS | 関数が正しく処理した結果としての成功を示します。 例えば `FS_ReadFile()` にて 100 BYTE リードしようとしたところが終端に達して 50 BYTE しか読めなかった場合も、動作としては正常なので「成功」として扱われます。
FS_RESULT_FAILURE | 関数が正しく処理した結果としての失敗を示します。 例えば `FS_ReadDir()` で終端を読んだときなど、処理として認められている想定内の「失敗」を指します。
FS_RESULT_BUSY | 現在コマンド処理中であることを示します。 未完なので厳密にはエラーではありませんが、便宜上エラーに含みます。
FS_RESULT_CANCELED | コマンドをキャンセルされたことを示します。 ユーザ自身による明示的なコマンドキャンセルと、アーカイブがアンロードされる際の強制キャンセルがあります。
FS_RESULT_UNSUPPORTED | アーカイブが指定コマンドに対応しなかったことを示します。 このエラーは特定のコマンドをあえて無視するアーカイブがユーザプロシージャの返り値として明示的に返すことで発生します。 意図せずこのエラーが返された場合、対象としているアーカイブの特殊な仕様を改めてご確認ください。
FS_RESULT_INVALID_PARAMETER | 与えた引数いずれかが不正かまたは範囲外であることを示します。 主に、ポインタがNULLであったり無効なハンドルを指定した場合に発生します。
FS_RESULT_NO_MORE_RESOURCE | 処理に必要とされるなんらかのリソースが内部で不足したことを示します。 同時に開くことのできるハンドルの総数や内部で消費される動的なメモリの上限はアーカイブごとに異なります。
FS_RESULT_ALREADY_DONE | すでに要求された処理と同じ状態になっていたことを示します。 `FS_CreateFile()` で指定したファイルがすでに存在している場合や、`FS_DeleteDirectory()` で指定したディレクトリが元から存在していない場合などに発生します。

FS_RESULT_PERMISSION_DENIED

要求された処理がアクセス権の問題で失敗したことを示します。
主に以下のような状況で発生します。

- 読み込み専用のファイルを書き込み権限で開こうとした場合
- 空でないディレクトリを削除しようとした場合
- makeromツールの"Put"パラメータで指定したTWL専用ファイルをNTR環境で開こうとした場合
- SDカードがライトプロテクトされている場合
- FSライブラリでサポートしていない2Gバイト以上のファイルを開こうとした場合

FS_RESULT_MEDIA_FATAL | NANDアーカイブやSDカードアーカイブなどの書き込み可能メディアで致命的なデバイス異常を検知した場合などに発生します。 このアーカイブに対する処理の継続は困難なため、SDカードであればメディアの交換や挿し直しを、本体保存メモリ(NAND)であれば本体の修理を促す必要があります。
FS_RESULT_BAD_FORMAT | NANDアーカイブやSDカードアーカイブなどの書き込み可能メディアでファイルシステムの破損を検知した場合などに発生します。 このアーカイブに対する処理の継続は困難なため、SDカードであればメディアの交換や挿し直しを、本体保存メモリ(NAND)であればNA_FormatTitleArchive()でアーカイブを再フォーマットする必要があります。
FS_RESULT_NO_ENTRY | 指定されたパスが存在しなかったことを示します。 存在しないディレクトリの下にファイルを生成しようとした場合にもこのエラーが発生します。
FS_RESULT_MEDIA_NOTHING | 指定されたアーカイブはリムーバブルメディアであり、デバイスが挿入されていませんでした。 現在はSDカードアーカイブだけがこのエラーを返します。
FS_RESULT_MEDIA_UNKNOWN | 指定されたアーカイブはリムーバブルメディアであり、ファイルシステムではない不明なデバイスが挿入されています。 現在はSDカードアーカイブだけがこのエラーを返します。
FS_RESULT_ERROR | 上記いずれにも該当しない検知可能な異常が処理中に発生した結果としての失敗を示します。
以下はユーザプロシージャ返り値としてのみ使用されます。
FS_RESULT_PROC_ASYNC | ユーザプロシージャが処理を非同期的に行うためにひとまず制御を戻すときの返り値です。 この値を返した場合は、リード・ライトコールバックと同様に `FS_NotifyArchiveAsyncEnd()` で処理の完了を通知する必要があります。
FS_RESULT_PROC_DEFAULT | ユーザプロシージャが少なくとも今回だけはデフォルト処理に任せるときの返り値です。 次回も当該コマンドへのユーザプロシージャは呼び出されます。単に既存のコマンドをフックしたい場合などは毎回これを返します。
FS_RESULT_PROC_UNKNOWN | ユーザプロシージャが今回以降のこのコマンドを全てデフォルト処理に任せるときの返り値です。 当該コマンドへのプロシージャ呼び出しフラグは解除され、次回から呼び出されません。
FS_RESULT_SUCCESS | 前述の規則に従ってアーカイブ固有の判断でプロシージャから返す必要があります。
FS_RESULT_FAILURE
FS_RESULT_UNSUPPORTED
FS_RESULT_INVALID_PARAMETER
FS_RESULT_NO_MORE_RESOURCE
FS_RESULT_ALREADY_DONE
FS_RESULT_PERMISSION_DENIED
FS_RESULT_MEDIA_FATAL
FS_RESULT_NO_ENTRY
FS_RESULT_ERROR

## 参照

`FSArchive FS_ARCHIVE_PROC_FUNC
FS_SetArchiveProc`

## 履歴

2009/06/08 TWL専用ファイルの説明へのリンクを追加。
2009/02/05 エラー要因の説明を追記
2008/10/21 FS_RESULT_MEDIA_FATALとFS_RESULT_BAD_FORMATの説明を詳細化
2008/07/16 FS_RESULT_PERMISSION_DENIEDの発生条件を追加
2008/06/25 FS_RESULT_MEDIA_NOTHING,FS_RESULT_MEDIA_UNKNOWN,FS_RESULT_BAD_FORMATを追加
2008/05/13 FS_RESULT_NO_ENTRYを追加
2008/04/42 エラーコードと数値の対応を明記。
2008/03/12 FS_RESULT_MEDIA_FATALを追加
2007/09/18 列挙値とその説明を追加
2004/07/12 列挙値とその説明を追加
2004/07/01 初版