Cente Compact FileSystem
・ユーザーズマニュアルの変更
ユーザーズマニュアルにおいて、奥付の情報を更新しました。ソースコードに変更はありません。
・ユーザーズマニュアルの変更
ユーザーズマニュアルにおいて、奥付の情報を更新しました。ソースコードに変更はありません。
・サイズ0のファイルに対してfseek()によりセクタサイズ以下のファイル拡張が出来ない不具合を修正(Cente障害情報:002-0014)
FS_OVER_SZ_SEEKマクロに「1」または「2」を設定した環境下において、サイズ0のファイルに対してfseek()によりサイズを拡張する。その際、指定メディアのPartition Boot Sector(PBS)情報を壊してしまう不具合を修正しました。
・ファイルデータ用バッファサイズ境界(末尾)の位置へシーク後、正しくデータ読み書きを行うことが出来ない不具合を修正(Cente障害情報:002-0015)
fseek()に対してファイルデータ用バッファのサイズで割り切れる位置への移動を指定する。その後、ファイル操作を行うと本来アクセスするべきセクタより前のセクタにアクセスしてしまう不具合を修正しました。
・ディレクトリ削除時にエラーが発生した際、エラーの詳細コードを取得できない不具合を修正(Cente障害情報:002-0016)
ディレクトリ削除時にエラー「指定ディレクトリが存在しない」「デバイスドライバでリードエラー」「指定ディレクトリが空ではない」が発生した場合に、正しいエラーの詳細コードが取得できない不具合を修正しました。
・FS_SJIS_API「0」設定時にコンパイルエラーが発生する不具合を修正(Cente障害情報:002-0017)
fs_cfg.hファイル内のFS_SJIS_APIマクロが「0:無効」の状態で、FS_RMDIRマクロまたはFS_READDIRマクロを「1:有効」にした場合に、コンパイルエラーが検出されてしまう不具合を修正しました。
・ファイルを書き込みモードで多重オープンできてしまう不具合を修正(Cente障害情報:101-0073)
fopen()は書き込みモード(a, a+, w, w+, r+)の多重オープンを認めていませんが、オープン中ファイルより上の階層に存在するディレクトリの名前を変更すると、多重オープンができてしまう不具合を修正しました。
・fseek()の移動先に4GBを越える位置を指定してもエラーを検出できない不具合を修正(Cente障害情報:101-0077)
FAT32の場合、fseek()に対して4GBを超える位置(後方)への移動を指定した場合は、エラーとして検出する必要がありますが、エラーを検出できずに正常終了してしまう不具合を修正しました。
・ショートエントリ検索で誤算出する場合がある不具合を修正(Cente障害情報:101-0089)
UNICODE API に対して以下の条件に該当する名前を指定した場合、ファイル・ディレクトリを誤検出してしまう不具合を修正しました。
1.ドットが複数ある場合。
2.12文字以内のUNICODE文字列中にASCII変換できないコード(全角文字)が含まれていた場合。
3.ショートエントリ中のスペースを含む名前と一致したUNICODE名を指定した場合。
・MISRA-C 対応
C言語のためのソフトウェア設計標準規格であるMISRA-C:2004に対応しました。
・ツールの変更
RAM ディスクドライバ作成ツールを、Ver2.00以降の仕様に対応しました。これに伴い、「MKRAM.exe」から「CFS_MKRAM.exe」に名前を変更しました。
・標準ライブラリ関数追加、削除
memcmpを直接コールしていた箇所を独自のfs_memcmpに置き換えました。またMISRA-C対応に伴い、fs_memmoveをコールしている箇所をfs_memcpyに置き換え、fs_memmove
・APIを新規に実装
よりCompact化を図り、APIを新規に実装しました。
・排他制御の機能削除
シングルスレッド環境を対象とし、排他制御の機能を削除しました。(fs_lock.cファイルを削除)
・遅延書き込み機能削除
遅延書き込み機能を削除しました。(fs_dlywt.cファイルを削除)
・アクセス速度パラメータ
アクセス速度パラメータの設定を削除しました。
・高速fseek機能削除
高速fseek機能を削除しました。
・連続未使用クラスタ検索機能削除
連続未使用クラスタ検索機能を削除しました。
・API削除
以下のAPIを削除しました。
fgetc、fgets、fputc、fputs、get_dev_free、q_format、reset_fsys
・標準関数削除
以下の標準関数を削除しました。
fs_strlen、fs_strcpy、fs_strncpy、fs_strchr、fs_toupper、fs_tolower、fs_strncmp
・キャッシュ機能変更
FATキャッシュ機能及びディレクトリキャッシュ機能を一元化したメタデータ用ドライブキャッシュ機能を実装しました。
ini_cache、ini_blk_cache、ini_blk_cache_dir、refresh_cacheを削除し、ini_drvcacheを追加しました。
・タイムスタンプの更新仕様変更
各APIにおけるファイル/ディレクトリ操作時のタイムスタンプ更新仕様を変更しました。
・エラーコード返却仕様変更
より正確なエラーコードが戻されるようにエラーコードの返却仕様を変更しました。
・エラーコード追加
エラーコードの細分化に伴い、エラーコードの追加を行ないました。
・fopen関数仕様変更
fopenで同一ファイルを二重オープンした場合はモードに限らず全てエラーになるように仕様を変更しました。
・fseek関数機能変更
ファイルサイズを超える位置へシークを指定した場合の動作を、3つの動作から選択できるように機能改善を行ないました。
・カスタマイズ関数変更
fs_memory.cに定義しているファイルデータ用キャッシュ(入出力バッファ)関連のカスタマイズ関数fs_malloc、fs_freeを、OSに依存しないコードに変更しました。
またfs_inimem、fs_rstmemを削除しました。
・FileSystem独自の変数型に変更
変数型をFileSystem独自の変数型に変更しました。(fs_typedef.hファイルを追加)
・UNICODE指定API追加
引数にUNICODEを直接指定するAPIを追加しました。
・ShortEntry作成仕様変更
UNICODE指定APIの追加に伴い、ShortEntryの存在する位置(DirectoryEntryの先頭からのoffset)をASCII文字列化し、ShortEntry中のname field(11char)に格納する仕様に変更しました。
・FAT FileSystem選択マクロ追加
FAT12、FAT16、FAT32固有の処理を設定によりコンパイル対象から外す機構を追加しました。
・パラメータチェック有効/無効マクロ追加
APIの引数に対するチェックを設定により無効にする機構を追加しました。
・FAT2書き込み有効/無効マクロ追加
FAT2(File Allocation Table2)への書き込みを設定により無効にする機構を追加しました。
・ライトプロテクト検出機構追加
ST_DISK構造体のdsk_flgにセットするDISK_WPROTECTビットを追加し、ライトプロテクトの検出機構を追加しました。
・BSP変更
ESPT(OS有り)-BSP、ESPT(OS無し)-BSP、ESPT2(OS無し)-BSPを削除しました。
・fopen関数修正
16BitCPUを使用してFS_SEEK_BFマクロを有効にした場合に、クラスタ個数を格納する変数がint型だとオーバーフローする可能性があるため、unsigned long型に変更しました。
・ct_ini_disk_sect関数修正
16BitCPUを使用する場合に、ct_ini_disk_sectで使用する変数sectSizeがint型だとオーバーフローする可能性があるため、unsigned long型に変更しました。
・fs_num_chk関数修正
16BitCPUを使用する場合に、変数sectSizeがint型だとオーバーフローする可能性があるため、unsigned long型に変更しました。
・ct_ini_disk_sect、ct_mount_disk変更
アロケーションユニットサイズが最大65536バイトのメディアまでマウントする様に変更しました。
・fs_original.c、fs_system.h修正
16BitCPUでクラスタサイズが64KByte以上のデバイスを使用した時に、コンパイラによってshort型の変数の演算を行い、演算結果を long型に代入する時に、演算結果が17Bit以上になった場合16Bitのみ代入し桁落ちしてしまう不具合を修正しました。
・fwrite、fread関数修正
-クラスタサイズが64KByte以上のデバイスを使用した時に、入出力データバッファ内オフセットをunsigned short型にキャストしている箇所があり、データ書き込み・読み込み時に、本来参照すべき入出力データバッファ内オフセットを参照できずにいた不具合を 修正しました。
-ST_FILE構造体のsectnoがクラスタ内の先頭セクタか終端セクタかでAPIが参照バッファ内のオフセット位置を間違えていた箇所を修正しました。
・fs_find_dir_entry、fs_find_dir_entry_root関数修正
.(ドット)で始まり、ドットを含む4文字以下全て大文字のファイルディレクトリ名の時にremoveできない不具合の修正しました。
・get_dev1関数修正
アロケーションユニットサイズが64Kbyteの時にscが負の値になる不具合を修正しました。
・fs_memory.c、fs_lock.cソース修正
OSのシステムコール発行時にIDのチェックを行い、不正IDの時はエラーを返しシステムコールを実行しない様に修正しました。
・ディレクトリキャッシュ機能追加
ディレクトリキャッシュ機能を追加しました。
・fwrite関数修正
ディスクフルまでの書込みを行なった時に、ファイルポインタの指すST_FILE構造体のsectnoに誤ったセクタ番号を格納してしまい、その後ディスクフルにも関わらず誤った場所にデータを書込めてしまう不具合を修正しました(FATを破壊してしまう)。
・fs_find_dir_entry関数修正
サブディレクトリ上のロングファイル名のショートエントリがセクタの先頭にあった場合、存在するはずのファイル検索に失敗する不具合を修正しました。
・fputc、fputs関数修正
1クラスタ確保前にモードチェックを行っていない不具合を修正しました。
・fopen関数修正
"a"モードでファイルを新規作成できなかった場合に、エラー処理を行っていない不具合を修正しました。
・unmount_disk関数修正
ディレクトリをオープンしたままストレージデバイスを抜くと、オープンディレクトリ用資源の枯渇を招いてしまう不具合を修正しました。
・fs_get_c_dent間数修正
FAT32フォーマットされたストレージデバイスを使用した時に、16BitCPU使用時に開始クラスタ番号上位を取得できない不具合を修正しました。