Cente FileSystem

Cente FileSystem

・機能仕様の一部を変更
・メタデータ保護機能の仕様を変更しました。また仕様変更に伴いメタデータ保護機能のマクロ名を「POWER_CUT」を「FS_JOURNAL」に改名しました。
・高速fseek処理の仕様を変更しました。また仕様変更に伴い高速fseekマクロ名を「FS_SEEK_BF」を「FS_SEEK_HIGH」に改名しました。
・UNICODE APIの仕様を変更しました。
・rename,moveの仕様を変更しました。

・API追加
UNICODE APIを追加しました。

・API削除
ダイレクトアクセスAPI、ハッシュAPIを削除しました。

・fgetc, fgets, fputc, fputs, fread, fwrite関数修正
ファイルの終端へのfseek後のread/write不具合について修正しました。(Cente障害情報:001-0041)

・putc、fputs関数修正
fflush()後にfputc()又はfputs()を実行すると、FATチェーンの作成が正常に行なわれずデータの上書きが発生する場合があり、その場合、書き込んだサイズ分のデータを読み込むことができない不具合を修正しました。(Cente障害情報:001-0043)

・fs_mk_subd修正
ディレクトリ作成中(mkdir実行中)にディスパッチした場合まだ初期化されていないディレクトリに他のタスクがアクセスできてしまう場合がある不具合を修正しました。(Cente障害情報:001-0045)

・fread関数修正
freadでエラーになった時に読み込んだバイト数を正常に返却できない不具合を修正しました。(Cente障害情報:001-0046)

・move関数修正
ディレクトリのmoveを行う時に、親クラスタ番号の書き換えを正常に行えない不具合を修正しました。(Cente障害情報:001-0047)

・fopen関数修正
同一ファイルの2重openにおけるモードチェック不具合を修正(Cente障害情報:001-0048)

・fs_find_dir_entry_root修正
ディレクトリエントリ作成時にエントリの先頭が0xE5、次のエントリの先頭が0x00だった時に0xE5エントリ
からディレクトリエントリを作成する様に変更しました。

・fs_find_dir_entry_sub修正
ファイル・ディレクトリ作成時に親ディレクトリが存在するか否かチェック処理を追加しました。

・fs_set_dir_entry_root、fs_set_dir_entry修正
ディレクトリエントリのrsv(リザーブ領域)のクリア処理を追加しました。

・fclose関数修正
ファイルサイズが変化しない書き込みを行った後fcloseを行った時にタイムスタンプが更新されない処理を修正しました。

・チェックディスク機能変更
chk_dsk内で、無条件にFATのコピーを行っている箇所があったので、エラー修正が必要な場合のみコピーを行うように変更しました。

・クラスタ番号の終端の変更
クラスタ番号の終端範囲を0x0FFFFFF8~0x0FFFFFFFに変更しました。

・構造体名変更
ST_DIR_ENTRY_SEM、ST_FAT_SEMは同じ意味の構造体なのでST_FSYS_SEMに統一しました

・fs_fat_chain_clear_sub修正
bitmap使用時bitmapの最終クラスタがクリアされない処理を修正しました。

・キャスト処理修正
無駄なキャスト処理を削除しました。

・エラーコード修正
アプリケーションにCT_ERRを返す箇所を修正しました。

Cente FileSystem

・save_cache関数修正
セーブキャッシュ時にデバイスへのアクセスに失敗した場合、FAT、ディレクトリ領域用のセマフォ返却が行なわれない不具合を修正。

・new_cache, new_dcache関数修正
FAT, Directory Cacheのデバイスへのアクセスに失敗した場合のキャッシュの扱いにおける不具合を修正。

・ct_get_api_fsyser, set_api_fsyser関数修正
エラーコード取得時に格納変数配列を超えてアクセスしてしまう不具合を修正。

・fwrite関数修正
書込みエラー発生時に、正しい戻り値を返さない場合がある不具合を修正。

・fclose関数修正
ファイルクローズ時にエラーが発生した場合、ファイル構造体の資源が減少してしまう不具合を修正。

・readdir_uni関数修正
ビックエンディアンでreaddir_uniを実行した場合に、正しいディレクトリ・ファイル情報が取得できない不具合を修正。

・fread, fwrite関数修正
入出力バッファを更新する時に、バッファに保存しているデータに対するセクタ番号の情報を誤った内容に更新してしまう場合がある不具合を修正。

・fs_find_dir_entry_root_sub、fs_find_dir_entry_sub関数修正
ショートファイル名のチルダ(~)後の番号の上限チェックが行われない為ショートファイル名が重複してしまい、ファイル/ディレクトリに正常にアクセスできない不具合、及びバッファオーバーフローが発生しシステムが誤動作する可能性がある不具合を修正。

・fclose, fflush関数修正
入出力バッファ内の未保存データを書き込み時にエラーが発生した場合、再度fflushを行おうとしてもデータをデバイスに反映できない不具合を修正。

・遅延書込みタスク取り扱い変更
マクロ(DLYWT)指定に依る遅延書込みタスクの組込み方式を廃止しました。
今後はパッケージ内に提案されたサンプルを参考にして頂き導入の可否をご判断願います。
 

Cente FileSystem

・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にセットされたライトプロテクトビットのチェックを行い、早期にエラー終了するように修正しました。

・デバッグログの削除
メタデータ保護機能評価用として各ソースファイル内に組み込まれていたデバッグログを全て削除しました。

・エラーコード返却不具合修正

  • fs_er()により戻された0/-1の値を再びfs_er()に渡してしまっている箇所を修正しました。
  • 発生したエラー

Cente FileSystem

・chg_attr、chg_tstamp関数修正

SAVE_CACHEマクロが有効な時に、ディレクトリキャッシュを保存する処理を追加しました。

・ct_chg_attrfp、ct_chg_tstampfp関数修正

"r"モードで開いたファイルのファイル属性、タイムスタンプが変更されてしまう不具合を修正しました。

・fs_ini_fatlock、fs_ini_direntrylock関数修正

初期化時に構造体の0クリア処理を追加しました。

・new_cluster関数修正

16BitCPUでFAT32フォーマットされたメディアを使用した場合に、new_clusterの戻り値をint型で返してしまい上位ビットが反転してしまう不具合を修正しました。

・get_dev_free、save_cache、refresh_cache関数修正

複数タスクから左記APIを同時に実行すると、タイミングによってFAT情報が後からAPIを実行したタスクに上書きされてしまう不具合を修正しました。

・opendir_cl、fopen_cl、fopen_uni、opendir_uni、readdir_uni、opendir_hash関数修正

複数タスクから左記APIを同時に実行すると、タイミングによってディレクトリ情報が後からAPIを実行したタスクに上書きされてしまう不具合を修正しました。

・get_sect_no関数修正

get_sect_noでエラーが発生した時に、ワークバッファの返却を実行しない不具合を修正しました。

・fopen、fopen_cl、fopen_hash、fopen_uni関数修正

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バイトのメディアまでマウントする様に変更しました。

Cente FileSystem

・fs_time.c修正

"rtc.h"と"string.h"をインクルードしている記述を削除しました。

・opendir_hash関数修正

ct_hash_entry関数に渡す第二引数をct_hash_entry関数に合わせてキャストする様に修正しました。

・readdir_uni関数修正

取得したUNICODE文字列の終端コードの付け方にミスがありました。終端コードを1byte(0x00)から2byte(0x0000)に修正しました。

・fs_lock.c修正

戻り値を常に0を返している箇所を修正しました。

・fs_original.c・fs_system.h修正

16BitCPUでクラスタサイズが64KByte以上のデバイスを使用した時に、コンパイラによってshort型の変数の演算を行い、演算結果を long型に代入する時に、演算結果が17Bit以上になった場合16Bitのみ代入し桁落ちしてしまう不具合を修正しました。

Cente FileSystem

・ハッシュ対応APIの追加

ファイル検索時にハッシュ法を用いる事でファイル検索の高速化を実現しました。

・FAT領域のbitmap化

FAT領域のクラスタの使用/未使用情報をRAM上に持つ事で、空きクラスタ検索時にデバイスドライバのアクセス頻度が低減しクラスタ検索が高速になりました。

・fopen_uni関数修正

既存ファイルを"w"モードでオープンした時に過剰にセマフォ資源を返却している箇所を修正しました。

・ディレクトリキャッシュ処理修正

ディレクトリキャッシュ実行時にローカルバッファに一旦コピーしている箇所を修正しました。

・create_pwc_area関数変更

メータデータ保護機能の管理ファイル作成方法を変更しました。

・fs_system.h修正

-Ver5.50で削除してしまった、Ver5.40までで定義されていたfeofマクロのundefを復活しました。

-ST_WORK構造体で使用していないメンバnameを削除しました。

・fs_memory.c修正

戻り値を常に0を返している箇所の修正しました。

・fs_lock.c修正

-FAT領域セマフォをドライブ毎に獲得する様に取り方修正。

-Ver5.50で削除してしまった、Ver5.40までで用いられていたセマフォ関連関数を復活しました。

・fopen・fopen_cl・fopen_uni・opendir・opendir_cl・opendir_uni・fs_divide・fs_ins_clust関数修正

複数タスクから左記API を同時に実行すると、タイミングによってファイル情報やディレクトリ情報が後から書込み操作したタスクから上書きされてしまう不具合の修正。

Cente FileSystem

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の時はエラーを返しシステムコールを実行しない様に修正。

ダイレクトアクセス機能追加

クラスタ番号・オフセットを指定してファイルアクセスできるAPIを追加しました。

UNICODE対応

UNICODEを指定してファイルアクセスできるAPIを追加しました。

マルチパーテーション対応

基本領域・拡張領域にパーテーション分割されたメディアに対応しました。

ディレクトリキャッシュ機能追加

ディレクトリキャッシュ機能を追加しました。

ファイル分割・クラスタ挿入機能追加

ファイルの分割・クラスタを挿入するAPIを追加しました。

リエントラント対応(排他処理変更)

排他処理について変更を行い、複数タスクからの同時アクセスが可能になりました。

fwrite関数修正

ディスクフルまでの書込みを行なった時に、ファイルポインタの指すST_FILE構造体のsectnoに誤ったセクタ番号を格納してしまい、その後ディスクフルにも関わらず誤った場所にデータを書込めてしまう不具合を修正。(FATを破壊してしまう)

Cente FileSystem

fat_recover関数修正

fat_recover関数内で使用している変数chk_countの型がshort型なので、4GByte以上のストレージデバイスに対応されていない不具合を修正。

fat_recover仕様変更

fat_recoverで使用するバッファサイズをユーザー指定可能になる様に変更。

fs_find_dir_entry関数修正

サブディレクトリ上のロングファイル名のショートエントリがセクタの先頭にあった場合、存在するはずのファイル検索に失敗する不具合を修正。

fclose関数修正

メタデータ保護機能有効時にclr_island_flg()を実行するタイミングを修正

fputc・fputs関数修正

1クラスタ確保前にモードチェックを行っていない不具合を修正。

fopen関数修正

"a"モードでファイルを新規作成できなかった場合に、エラー処理を行っていない不具合を修正。

unmount_disk関数修正

ディレクトリをオープンしたままストレージデバイスを抜くと、オープンディレクトリ用資源の枯渇を招いる不具合を修正。

fs_get_c_dent関数修正

FAT32フォーマットされたストレージデバイスを使用した時に、16BitCPU使用時に開始クラスタ番号上位を取得できない不具合を修正。

マクロ名修正

マクロ名の重複を避けるため「UNICODE」を「FS_UNICODE」に改名。

マクロ名「NORTI」を「ITRON」に改名。

Cente FileSystem

fopen関数修正

ファイル(ディレクトリでは無い)下にファイルが出来てしまう不具合を修正。

mkdir関数修正

ファイル(ディレクトリでは無い)下にディレクトリが出来てしまう不具合を修正。

スタック使用量修正

rename, remove, mkdir, rmdir関数においてメタデータ保護機能無効時であってもスタック使用量が多かった点を修正。

ファイル検索関連修正

エントリがクラスタサイズ丁度だった時、ファイル検索の結果見つからなかった時のエラーコードが正しく無い点を修正。

VFAT不具合修正

FAT12/16ルートディレクトリにおいてロングファイル名のショートエントリでの「~」以降の番号付記不具合を修正。

API選択マクロ不具合修正

API選択マクロの指定に依っては、chk_possect関数にまつわるコンパイルエラーが出る不具合修正。

メタデータ保護機能修正

fs_pwc.cのclr_island_flg()で島状FAT警告フラグのdown countにて0以下になってしまう不具合修正。

fs_pwc.cのcreate_pwc_area(), analyze_pwc(), pwc_repair()にて関数の実体にstatic宣言が抜けていた点を修正。

FATキャッシュ関連修正

FAT32にてFSINFOのNextFreeClusterからブロックキャッシュを確保した場合同一セクタを重複して持ってしまう不具合を修正。(フラッシュの際に上書きによりFAT破壊してしまう)

FSINFOの取り扱い変更

FAT32のFSINFOのFreeClusterCountとNextFreeClusterの扱いをSDA仕様に対応しました。

fwrite関数修正

4G超え時FSYSERへのエラーコードセットを追加修正。

fclose関数修正

メディアアクセスエラーであっても fp開放、メモリプール返却するよう修正。

OS依存部修正

fs_memory.c 生成情報パケットの第5引数を削除しNORTi以外のOSに対応しました。

fs_lock.c 生成情報パケットの第4引数を削除しNORTi以外のOSに対応しました。

rename関数修正

Newnameの長さに対する仕様ミスを修正。

(正しくは、oldnameのパス長+newname <= FULLPATHLEN(258))

引数チェック強化

finfo, chg_attr, get_attr, chg_tstamp, get_tstamp の各関数における引数の正当性チェックを強化しました。

get_attrfp関数修正

エラーコードの引渡しミスを修正。

Page 2 of 5