Cente FileSystem

エラーコードが正しく更新されない問題について


発行番号: Cente101-0122
Rev: 第1版
発行日: 2024/03/21

【題名】
エラーコードが正しく更新されない問題について

【適用製品】
Cente FileSystem Ver6.41 ~ Ver6.50

【影響API】
fopen, fopen_uni, rename, rename_uni, move, move_uni, mkdir, mkdir_uni, ct_vdivide, ct_vdivide_uni

【現象】
FileSystemエラーコードにエラーコード(0未満)が格納されている状態で、
影響APIを実行すると、エラーコードを更新せずそのまま返却してしまう可能性があります。

《発生条件について》
以下の全ての条件を満たした場合に発生します。
①「2.影響API」を実行した時に、その直前で他のAPIで異常のエラーコードが戻されていた場合
②「2.影響API」を実行した時に、対象ファイルの情報がディレクトリエントリ領域に新規で書き込まれる場合
③「2.影響API」を実行した時に、対象のディレクトリエントリ領域が複数のクラスタ領域に跨る場合
“(FAT12/16の場合はサブディレクトリ領域のみ、FAT32の場合はルート/サブの両方)”

[例] ①remove()を実行し、存在しないファイルを指定する。
CT_NO_FILE(-3)。
②fopen()をアペンドモードで実行し、存在しないファイルを指定する。
アペンドモードの為、ファイルを作成しようとするが、
①のエラーコードを更新せずそのまま返却してしまい、ファイルの作成が行われない。

【原因】
Cente FileSystemに実装されている関数について、エラーコード返却処理は以下の2パターンがあります。

①returnでエラーコードを上位の関数に戻す。
 [例] return CT_DISK_FULL,

②FSYSER変数にセットし、上位の関数はその変数からエラーコードをゲットする。
 [例] セット: fs_er(CT_DISK_FULL, NULL) ※fs_erp 関数を使用する場合もあります。
   ゲット: er = ct_get_api_fsyser()

ct_get_api_fsyser()を使用する場合は、事前にFSYSER変数にセットする処理が呼ばれている必要がありますが、
ディレクトリエントリにアクセスする関数において、セットする処理を通らずゲットが実行される場合がありました。その結果、以前FSYSERにセットされているエラーコードを上位の関数に戻してしまいます。

【回避方法】
ありません。

■プログラムによる回避方法
修正ソースにつきましては、弊社サポートまでお問い合わせ下さい。