fflush・fcloseの不具合について
Cente FileSystem Ver 4.00 – Ver 5.70
Cente Compact FileSystem Ver 1.00 – Ver 1.01
Cente FileSystem Ver 4.00 – Ver 5.70
Cente Compact FileSystem Ver 1.00 – Ver 1.01
Cente FileSystem Ver4.00~Ver5.70
Cente FileSystem Ver4.00~Ver5.70
Cente FileSystem Ver5.50~Ver5.70
Cente FileSystem Ver5.70
Cente FileSystem Ver4.00~Ver5.70
Cente FileSystem Ver5.50~Ver5.70
Cente FileSystem Ver4.00~Ver5.70
Cente FileSystem Ver5.70
・new_cluster、next_cluster、fs_vins_clust関数修正
戻り値の型がunsigned longであるにも関わらず、マイナス値を返していた箇所を修正しました。
・fs_ini_disklock、fs_rst_disklock関数修正
アンマウント実行時にセマフォの削除が行えず、再度マウントを実行すると過剰にセマフォを生成してしまう不具合を修正しました。
・fread、fwrite、ct_ins_clust関数修正
get_api_fsyserによる、マルチタスク環境下でのエラーの詳細コード取得に対応できていない不具合を修正しました。
・ini_blk_cache_dir関数修正
ini_blk_cache_dir()の引数には最低でも、バッファサイズ / (キャッシュサイズ * ブロック数) が3以上になる値が指定される必要があるが、それを下回る値を指定することができてしまう不具合を修正しました。
・fwrite関数修正
アクセス速度パラメータ(#define WRITE_CLUSTER)に 1 を設定した場合で、書き込み開始クラスタの先頭から書き込み終了位置までのサイズが1クラスタ以上、2クラスタ未満の場合に、セクタ番号の更新が行われず DATAが上書きされてしまう不具合を修正しました。
・fs_find_dir_entry関数修正
FAT領域アクセス用のセマフォ獲得及び返却に失敗した場合に、それ以前にディレクトリエントリ領域アクセス用に獲得したセマフォの返却が行なわれない不具合を修正しました。
・fs_ini_disklock関数修正
複数のパーティションに分割されたメディアにおいて、各ドライブは同一ドライバで動作するため、生成するセマフォは1つになるが、 fs_ini_disklock()の先頭でセマフォIDのクリアを行なっていたため、同一ドライバでも複数個セマフォが生成されてしまう不具合を修正しました。
・ini_disk_sect、mount_disk関数修正
fs_ini_disklock()によりセマフォ資源を生成している箇所について、その後の処理でエラー終了した場合にセマフォ資源の削除が行なわれない不具合を修正しました。
・ct_ini_disk_sect、mount_disk関数修正
連続未使用クラスタ検索機能を有効(#define FS_FREE_CLUST 1)にした状態でのマウント処理において、獲得したワーク用バッファの返却を二重に行なっている箇所があり、その結果OSの誤動作を招く不具合を修正しました。
・fopen、fopen_cl、fopen_hash、fopen_uni関数修正
高速fseek機能有効時(#define FS_SEEK_BF 1)、fseek用2次キャッシュバッファ獲得後の処理でエラー終了した場合に、バッファの返却が行なわれない不具合を修正しました。
・ini_disk_sect、mount_disk、remove_hash、fs_r_sect、fs_w_sect関数修正
セマフォの獲得/返却またはメモリプールの獲得/返却に失敗した場合に、OSシステムコールのエラーコードをそのままFileSsytem APIが戻り値として返してしまう不具合を修正しました。
・fopen_hash、hash_entry、hash_delete、ini_fsys、reset_fsys関数修正
fopen_hash()で作成したファイルをmoveで移動した後、再度同一名称のファイルをfopen_hash()で作成しようとした場合、ハッシュテーブルへのハッシュ値が存在するため、エラーで終了してしまう不具合を修正しました。
・get_dev0関数修正
マルチパーティション環境(#define FS_MULTI_P 1)で、スーパーフロッピーディスク形式に対応するためのコードを追加しました。
・unmount_disk関数修正
ファイル操作中にメディアが抜かれてしまった場合の対応として、入出力バッファ、高速fseek用バッファのメモリブロック解放がunmount_disk()実行時に必ず行なわれるように改善しました。
・ini_disk、ini_disk_sect、mount_disk、unmount_disk関数修正
デバイスドライバ上でエラーが発生した場合は戻り値として-2を返すように変更を行ない、デバイスドライバ上のエラー、FileSystem上のエラーを区別できるように改善を行ないました。
・fs_find_dir_entry_root、fs_find_dir_entry、fs_fat_chain_clear、 set_fsinfo、fs_find_dir_entry_root_uni、fs_find_dir_entry_uni、 fs_remove_entry関数修正
サブ関数を新設し、セマフォ獲得・返却関数の呼び出しが一回で済むような形に改善しました。
・fs_iniworkmem関数修正
正常の場合の戻り値としてOSシステムコールからの戻り値をそのまま返していたため、「0」に置き換えて返すように修正しました。
・ini_fsys、ini_disk_sect、reset_fsys関数修正
エラー発生時に直ぐにエラー終了せず、そのエラーが無視され処理が続けて行なわれてしまう不具合を修正しました。
・fread、chg_filelen関数修正
マウントのチェック処理が抜けていたため追加を行ないました。
・save_cache関数修正
FAT領域保護用のセマフォ獲得/返却はct_save_cache()内で行なっているが、メタデータ保護機能又はキャッシュの自動保存機能を有効にした際、各APIではfs_save_cache()を実行しているため、fs_save_cahe()内でFAT領域保護用のセマフォ獲得/返却が行なわれるように修正しました。
・mount_disk、ini_disk_sect関数修正
マウント処理時にFAT32用のディスク構造体メンバの初期化処理を追加しました。
・fclose関数修正
入出力バッファの解放前にファイル構造体メンバの stat を 0 に初期化していたため、マルチタスク環境下では入出力バッファの解放前にそのファイル構造体が別のファイルに割り当てられしまう不具合を修正しました。
・fopen_cl、fopen_hash関数修正
FAT12/16ルートディレクトリ上において、オープン対象ファイルのディレクトリエントリの位置が1セクタを超える場合に正しいディレクトリエントリの検索が行なえず、誤ったディレクトリエントリにサイズ情報を書き込んでしまう不具合を修正しました。
・ライトプロテクトチェックの追加
キャッシュ機能有効の状態でライトプロテクト機構のあるメディアを使用した場合、キャッシュの自動フラッシュが起こってしまい誤動作する可能性があるため、書き込み系APIではST_DISK構造体のdsk_flgにセットされたライトプロテクトビットのチェックを行い、早期にエラー終了するように修正しました。
・デバッグログの削除
メタデータ保護機能評価用として各ソースファイル内に組み込まれていたデバッグログを全て削除しました。
・エラーコード返却不具合修正
Page 11 of 17