追記モードで開いたファイルに正しく追記できない不具合について
・Cente exFAT FileSystem Ver1.00~Ver2.01
・Cente exFAT FileSystem Ver1.00~Ver2.01
・FAT領域かディレクトリエントリ領域に書き込み中に電源断が起きたとき、修復不能になる場合がある不具合を修正 (Cente障害情報:101-0065)
メタデータ保護機能使用時、セクタの書き込み中に電源断が発生し、メディアによってはそのセクタを読むとメディアからエラーが返ってきてデータが読めないときがあります。その場合に修復出来なくなる不具合を修正しました。
・キャッシュのブロック単位の書込みを考慮していなかった為、修復不能になる場合がある不具合を修正 (Cente障害情報:101-0066)
メタデータ保護機能使用時、ini_blk_cache(), ini_blk_cache_dir(), ini_ab_cache()の第4引数(キャッシュブロック数)を2以上に設定します。この設定でメディアに書き込み中、電源が落ちるといずれかのブロックで不良セクタとなる可能性があります。修復時この不良セクタを読み取るとエラーが発生し、修復処理エラーとなっていた不具合を修正しました。
・ジャーナルファイルリード時に修復不可能エラーが発生すると、ジャーナルファイルで使用できない領域ができてしまう不具合を修正 (Cente障害情報:101-0067)
メタデータ保護機能使用時、修復処理でエラーが発生するとフラグ管理領域の該当エリアをクリアしていないため、再使用ができなくなります。その為フラグ管理領域が枯渇しメタデータ保護処理ができなくなる不具合を修正しました。
・FATチェーンクリア中の電源断後、修復による再FATチェーンクリアが実行できない場合がある不具合を修正 (Cente障害情報:101-0068)
メタデータ保護機能使用時、FATチェーンクリア処理中に電源断が発生するとFATチェーンが寸断される為、修復時の再FATチェーンクリアができません。その結果クリアされないFATチェーンは破損クラスタとして残ってしまう不具合を修正しました。
・複数ドライブでメタデータ保護機能を有効にした場合に正常に修復できない場合がある不具合を修正 (Cente障害情報:101-0070)
複数ドライブでメタデータ保護機能を有効にした場合、メタデータ保護用のメモリが誤った情報になり、正しくデータを書き戻せない場合がある不具合を修正しました。
・ファイルを書き込みモードで多重オープンできてしまう不具合を修正 (Cente障害情報:101-0073)
名前を変更したディレクトリを含むフルパスで、オープン中のファイルを多重オープンできてしまう不具合を修正しました。
・マルチバイト文字の2byte目のコードを正しく処理できていない不具合を修正 (Cente障害情報:101-0076)
マルチバイト文字の2バイト目を1バイトコードとして扱っていた為、アルファベットの小文字に該当するコードを誤って大文字に変換し文字列比較を行ってしまう不具合を修正しました。
・API処理中のアンマウントによる資源返却の不具合を修正 (Cente障害情報:101-0085)
API処理中にunmount_disk()を実行するとタイミングによって以下の問題が発生する不具合を修正しました。
1. ディスクドライブセマフォ資源の返却が行えず、再度mount_disk()を実行した際に、資源獲得でタイムアウトエラーが発生する(マウントできない)。
2. 処理中のAPIが、ST_FILE、ST_DIR構造体のポインタを引数に持つAPIであった場合、NULLポインタアクセスが発生する。
・全角の大文字・小文字の表記が可能なコードの扱いに誤りがある不具合を修正 (Cente障害情報:101-0092)
アルファベットのファイル・ディレクトリ名に対する大文字・小文字を同一視すべき判定処理に誤りがあった不具合を修正しました。 以下のコード領域が不具合対象となります。
【全角英字、ギリシャ文字、ロシア文字、アラビア数字】
・追記モードで開いたファイルに正しく追記できない不具合を修正 (Cente障害情報:103-0018)
追記モードで開いたファイルの読み書き位置を終端以外に移動すると、fputc(), fputs(), fwrite()により正しく追記できない不具合を修正しました。
・UNICODE API追加
UNICODEを指定してファイル・ディレクトリアクセスできるAPIを追加しました。
・メタデータ保護機能の仕様変更
1. 複数ドライブに対応しました。
2. メタデータ保護管理ファイルのサイズを縮小しました。
3. 保護処理及び修復処理を高速化しました。
・ファイル分割、クラスタ挿入、ファイル結合API追加
S-JIS用ファイル分割API【ct_divide()】、クラスタ挿入API【ct_ins_clust()】、ファイル結合API【ct_combine()】
UNICODE用ファイル分割API【ct_divide_uni()】、クラスタ挿入API【ct_ins_clust_uni()】、ファイル結合API【ct_combine_uni()】を追加しました。
・ドライブ削除API追加
ドライブ削除API【del_disk()】を追加しました。
・機能制限の撤廃
rename(), rename_uni(), move(), move_uni() において大文字から小文字もしくは小文字から大文字に変更できない機能制限がありましたが、この制限が無くなりました。
・ファイル名、ディレクトリ名の文字数の変更
Ver2.01までの最大長は、フルパスでS-JIS APIは258byte、UNICODE APIは516byteだった為、全角文字(2バイトコード)を含めると255文字の名前を作成・検索・削除ができませんでしたが、この制限が無くなり、フルパスで258文字までになりました。
・DISK_MOUNTビット処理をAPIへ移動
ST_DISK構造体のメンバdsk_flgのDISK_MOUNTビットの処理をmount_disk()でセット、unmount_disk()でリセットするよう変更しました。従って、デバイスドライバ内での処理は必要なくなりました。
・ショートエントリ検索で誤検出する場合がある不具合を修正(Cente障害情報:101-0089)
UNICODE APIにおいて12文字以内のUNICODEのASCII変換に誤りがあり、指定名以外のエントリを検出してしまう場合がある不具合を修正。
・rename_uniにおける名前比較で誤ったエラーコードを返す不具合を修正(Cente障害情報:101-0090)
UNICODEファイル名が同一か否かを比較する際に、文字列の終端を誤検出していた為、誤った比較結果を返していた不具合を修正。
・UNICODE文字の2バイト目のコードの扱いに誤りがある不具合を修正(Cente障害情報:101-0091)
UNICODE文字列比較関数fs_unicodecmp(), fs_unicodencmp()において異なるUNICODE文字を同一と判定してしまう場合がある不具合を修正。
・全角の大文字・小文字の表記が可能なコードの扱いに誤りがある不具合を修正(Cente障害情報:101-0092)
アルファベットのファイル・ディレクトリ名に対する大文字・小文字を同一視すべき判定処理に誤りがあった不具合を修正。
以下のコード領域が不具合対象となります。【全角英字、ギリシャ文字、ロシア文字、アラビア数字】
・高速なファイル・ディレクトリ検索機能追加
ハッシュアルゴリズムを応用することでファイル・ディレクトリの検索が高速になる機能が追加されました。
・FAT領域のビットマップ化機能変更
(1)メディアの最適なビットマップサイズを取得できるAPI get_bitmapsize()を追加しました。
(2)大容量メディア向けに空き時間を使用してビットマップを構築するサンプルタスクを提供しました。
(3)ini_bitmapfat()の第1引数を変更しました。
第1引数をST_DISK *d[ディスク構造体]からct_int8_t drv[ドライブ名(’A’,’B’,…)]に変更しました。
・メタデータ保護機能用のマクロ名を変更
S-JIS API用とUNICODE API用を個別に設定できるようにしました。
・チェックディスクAPI追加
UNICODE用チェックディスクAPI【chk_dsk_uni()】を追加しました。
・UNICODE API追加
UNICODE用ファイル分割API【ct_divide_uni()】、クラスタ挿入API【ct_ins_clust_uni()】を追加しました。
・ファイル結合API追加
S-JIS用ファイル結合API【ct_combine()】、UNICODE用ファイル結合API【ct_combine_uni()】を追加しました。
・ドライブ削除API追加
ドライブ削除API【del_disk()】を追加しました。
・機能制限の撤廃
rename(), rename_uni(), move(), move_uni() において大文字から小文字もしくは小文字から大文字に変更できない機能制限がありましたが、この制限が無くなりました。
・ファイル名・ディレクトリ名の文字数の変更
Ver6.11までの最大長は、フルパスでS-JIS APIは258byte、UNICODE APIは516byteだった為、全角文字(2バイトコード)を含めると255文字の名前を作成・検索・削除ができませんでしたが、この制限が無くなり、フルパスで258文字までになりました。
・FSINFOが異常値だった場合の対策を追加
(1)fs_drv.c内get_dev2()にてFSINFOセクタのsignatureチェックでエラーを戻すよう変更しました。
(2)renew_fsinfo(), renew_fsinfo_uni()にてNextFreeClusterの更新機能を追加しました。
・DISK_MOUNTビット処理をAPIへ移動
ST_DISK構造体のメンバdsk_flgのDISK_MOUNTビットの処理をmount_disk()でセット、unmount_disk()でリセットするよう変更しました。従って、デバイスドライバ内での処理は必要なくなりました。
・空きFAT検索開始位置の仕様改善
remove(), remove_uni(), rmdir(), rmdir_uni()で削除されたクラスタを空きFAT検索時、早期に再利用できるよう変更しました。
・BSP追加
ESPT-RXを追加しました。
・アプリケーションサンプルファイルの追加
シェルコマンド及びFileSystem APIを使用したアプリケーションサンプルプログラムを新規に追加しました。
・ユーザカスタマイズファイルを追加
fs_mmc_cfg.c及びfs_mmc_cfg.hを新規追加しました。
fs_mmc_cfg.cファイル内にOS依存部及びタイムアウト機能を記述しています。fs_mmc_cfg.hファイルはfs_mmc_cfg.cファイル内で使用しているマクロを定義しています。
・データタイプ(変数型)の変更
独自データタイプ名の頭に「ct_」を付加させ、より独自性を持たせるようにしました。
・マウント処理のCMD10発行時にレスポンスエラーが発生してしまう不具合を修正 (Cente障害情報:005-0001)
CSD,CIDレジスタのリード時にCRCの受信処理を行っておらず、SDカードに依ってCMD9発行後のCMD10発行に失敗する不具合を修正しました。
・整数型(integer)16bit環境でSDHCカードを正常にマウントできない不具合を修正 (Cente障害情報:005-0002)
SDHCカードを識別するためのCMD58発行時において、受信した32bitの「OCR Register」情報に対するキャスト処理が正しく行われておらず、マウントまたはリード/ライトに失敗する不具合を修正しました。
整数型(integer)が16bitの環境でSDHCカードを使用した場合に発生します。
・暗号ライブラリ変更
暗号ライブラリをCente cryptoパッケージからCente Compact Cryptoパッケージに変更しました。
・ARC4追加
暗号アルゴリズム ARC4を追加しました。
・get_efsyser関数修正
・set_api_efsyser関数追加
エラーコード取得時に上書きに依り正しく取得できない不具合を修正。(Cente障害情報:109-0001)
・Cente FileSystem Encrypting Module Ver1.00
・Cente FileSystem Ver6.00~Ver6.11
・Cente FileSystem Ver6.00~Ver6.11
・ファイル分割、クラスタ挿入時にFAT操作が正しく行えない不具合を修正
ct_divideでFATチェーンの分割位置とディレクトリエントリに書き込むサイズ情報に不整合が発生する不具合を修正ct_ins_clustで挿入位置に「1」以上を指定した場合、指定位置とは誤った位置にクラスタを挿入してしまう不具合を修正
(Cente障害情報:101-0079)
・同一ファイルの多重オープン時の読み出しで誤ったデータを読み込む不具合を修正
書き込みモード("w","w+","a","a+","r+")と読み出しモード("r")で同一ファイルを同時にオープンした時に、以下の問題が発生する不具合を修正
1. 誤ったデータを読み込んでしまう
2. 古いデータを読み込んでしまう
3. ファイルサイズが更新されない
(Cente障害情報:101-0080)
・高速fseek機能を使用した場合のファイル操作時に、データの上書き及びメタデータの不整合が発生する不具合を修正
高速fseek機能を使用した場合に以下の問題が発生する不具合を修正
1. 入出力バッファの管理セクタ番号を指定シーク先より手前のセクタ番号で管理してしまう
2. FATチェーンの拡大をせずにファイルサイズのみ拡大してしまう
3. 高速fseek用クラスタバッファに積み上げていない位置から不正なクラスタ番号を取得し、入出力バッファに誤ったデータを取り込んでしまう
(Cente障害情報:101-0081)
・ビルドの結果エラー、ワーニングが発生する不具合を修正
以下のエラー、ワーニング検出内容を修正
1. Undefined external symbolのリンクエラー
2. 整数値比較演算において無意味な演算式
3. グローバル関数宣言とローカル関数宣言の矛盾
4. 引数の型と一致していない呼び出し関数
5. 戻り値の型と異なる戻り値
6. 未使用変数、未使用関数
7. 値の初期化が必要な変数
(Cente障害情報:101-0082)
・追記モードで開いたファイルに正しく追記できない不具合を修正
メタデータ保護機能使用時、"a"もしくは"a+"モードで開いたファイルに対して追記を行った場合、FATとディレクトリエントリの不整合が発生する不具合を修正
(Cente障害情報:101-0083)
・ディレクトリ拡張時不特定な領域を壊す場合がある不具合を修正
メタデータ保護機能使用時、ファイル、ディレクトリの作成/名前変更/移動に伴うディレクトリエントリ領域の拡張処理で、FATアクセス用セマフォ資源の獲得に失敗(タイムアウトエラー)すると不特定領域に拡張してしまう不具合を修正
(Cente障害情報:101-0084)
・API処理中のアンマウントによる資源返却の不具合を修正
API処理中にunmount_diskを実行するとタイミングによって以下の問題が発生する不具合を修正
1. ディスクドライブセマフォ資源の返却が行えず、再度mount_diskを実行した際に、資源獲得でタイムアウトエラーが発生する(マウントできない)
2. 処理中のAPIが、ST_FILE、ST_DIR構造体のポインタを引数に持つAPIであった場合、NULLポイントアクセスが発生する
(Cente障害情報:101-0085)
・fs_cfg.hのメタデータ保護機能関連マクロ値によって起こる不具合を修正
メタデータ保護機能使用時、マクロに設定した値によって以下の問題が発生する不具合を修正
1. 複数のメディアを使用し且つセクタサイズが異なっていた場合、セクタサイズの小さいメディアにおいてバックアップ領域の破壊が発生する
2. FS_DIR_BLK_NUMを「1」に設定した場合に、バックアップ領域が不足し、獲得バッファオーバーのエラーが発生する
(Cente障害情報:101-0086)
・fwriteの第2引数sizeに1以外を指定すると書き込みができない不具合を修正
メタデータ保護機能使用時、fwriteの第2引数 size に 1 以外を指定すると書き込みが行われず、また、その際の戻り値を正常時の値で戻してしまう不具合を修正
(Cente障害情報:101-0087)
・既存ファイル、ディレクトリに対し後からメタデータ保護機能を有効にした場合の不具合を修正
既にファイル、ディレクトリが存在するメディアに対し後からメタデータ保護機能を有効にした時、既存のファイル、ディレクトリの更新を行うとエラーが発生する不具合を修正
(Cente障害情報:101-0088)
・JFS_SIG_DAMAGEのマクロ名を修正
JFS_SIG_DAMAGEのマクロ名がソースコード上、JER_SIG_DAMAGEになっていた誤りを修正
・下記関数を修正
fs_inimem, fs_iniworkmem
固定長メモリプールを設定する時、取得IDをchar型でキャストしたため、256以上のIDを引き渡せなかった誤りを修正
・set_seekbf()の第2引数を変更
第2引数buf_pの型名を明示的にvoid型からct_uint32_t型に変更
Page 7 of 27