Cente FileSystem

Cente FileSystem

・ログ管理チェックディスク機能の追加

ファイル/ディレクトリへのアクセス中にログを取ることで、電源断や不意なメディア取り外しが発生した場合に、問題があった箇所のみ的確に修復する機能を追加しました。チェックディスク機能と同様に、メタデータの不整合や規格外の値などを検出した上で修復を行う、低負荷な保護機能です。

・ST_FILE構造体使用部の見直し

ST_FILE型ポインタに対して、FILE型のアドレスをキャストせずにそのまま渡していた箇所を修正しました。Centeとは別にFILE型を定義している環境で、コンパイラエラーになる可能性がありました。

Cente FileSystem

・全角の大文字・小文字の表記が可能なコードの扱いに誤りがある不具合を修正(Cente障害情報:101-0092)

全角ファイル・ディレクトリ名に対し大文字/小文字の関係にあった場合、異なったファイル・ディレクトリであると判断してしまう不具合を修正。本修正はVer6.20で修正した「Cente障害情報:101-0092」について追加修正を行ったものです。以下の処理部を修正しています。

1.同一ファイルオープンの検出

2.rename(), rename_uni()実行時の同一ファイル検出

3.move(), move_uni()実行時の同一ファイル検出

・高速fseek時に異なる位置にシークしてしまう不具合を修正(Cente障害情報:101-0093)

高速fsek使用時において、クラスタ内移動セクタ数の算出方法に誤りがあり、以下の問題が発生する不具合を修正。

1.正しい位置にデータが書き込めない。

2.データが正しく読み出せない。

3.サイズ情報とFAT チェーン情報に不整合が発生してしまう。

・ハッシュによる検索時にCT_ENTRY_ERR(-71)エラーが発生する不具合を修正(Cente障害情報:101-0094)

ハッシュ機能有効時に、フルパス指定で且つディレクトリエントリ情報の変更を伴うAPIを実行した場合、CT_ENTRY_ERR(-71)エラーが発生する可能性がある不具合を修正。

・nullfat2による空き検索の不具合を修正(Cente障害情報:101-0095)

ファイル削除処理が一度行われた場合に(fopen w、w+モードによるファイルオープンを含む)、その後の書き込み処理において、容量に空きがあるのにも関わらずディスクフルエラー(CT_DISK_FULL:-11)が発生する可能性がある不具合を修正。

・ディレクトリ一括削除API追加

S-JIS用ディレクトリ一括削除API【rmdir_all()】、UNICODE用ディレクトリ一括削除API【rmdir_all_uni()】を追加しました。

・ディレクトリ内総数取得API追加

S-JIS用ディレクトリ内総数取得API【dinfo()】、UNICODE用ディレクトリ内総数取得API【dinfo_uni()】を追加しました。

・ワイルドカードを用いた検索APIを追加

S-JIS用ワイルドカードを用いた検索API【readdir_wc()】、UNICODE用ワイルドカードを用いた検索API【readdir_wc_uni()】を追加しました。

・文字列操作関数の追加/削除

「Cente障害情報:101-0092」の修正に伴い、以下の関数を追加/削除しました。

《追加》

 1.fs_fnaicmp()

 2.fs_fnanicmp()

 3.fs_fnaicmp_uni()

 4.fs_fnanicmp_uni()

《削除》

 1.fs_mbsncmp ()

 2.fs_unicodencmp()

・ini_journal()の戻り値修正

エラーコード「CT_ABN_FILE:-1」が戻される一部のケースにおいて、より解りやすいエラーコードへの置き換えを行いました。

・静的解析ツールの指摘事項修正

ルート上のファイル/ディレクトリ検索、作成を行う内部関数、fs_set_dir_entry_root()、fs_find_longer_entry_root()において、処理上の問題はないが、静的解析ツールを使用した場合に、型の違いによりワーニングが検出される問題を修正しました。

・ショートファイル名のチルダ後に付加する番号の仕様変更

ロングファイル名でファイル/ディレクトリを作成した際、重複回避のためにショートファイル名に付加させる「チルダ(~) + 番号」はエントリ情報に格納されている最大値に加算させる形で付加させています。上限値を超えた場合は即座にCT_OVER_SFILENAME(-66)エラーとしていましたが、エントリ情報の最小値を確認することで、削除済みの番号(最小値より若い番号)が再利用できるように改善を行いました。

Cente FileSystem

 ・ショートエントリ検索で誤検出する場合がある不具合を修正(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検索時、早期に再利用できるよう変更しました。

 

Page 4 of 17