Cente FileSystem

独自APIでのディレクトリ検索時、エラーコード「CT_NOT_INI_D」が戻される不具合について


発行番号: Cente101-0114
Rev: 第1版
発行日: 2021/10/15

【題名】
独自APIでのディレクトリ検索時、エラーコード「CT_NOT_INI_D」が戻される不具合について

【適用製品】
Cente FileSystem Ver6.42

【影響API】
rmdir_all, rmdir_all_uni, dinfo, dinfo_uni

【現象】
以下全ての条件を満たした状態で【影響API】を実行した場合、『CT_NOT_INI_D:-17 初期化(ini_disk)されていない』エラーが発生します。
(1)fs_cfg.h内の FS_DINFO、FS_DINFO_UNI、FS_RMDIR_ALL、FS_RMDIR_ALL_UNIマクロの何れかを有効
(2)fs_cfg.h内の FS_READDIR_WC、FS_READDIR_WC_UNIマクロを無効
 ※(1)がS-JIS用のマクロの場合はFS_READDIR_WCマクロを、UNICODE用の場合はFS_READDIR_WC_UNIマクロを
  無効にした場合に発生
(3)メディア内のディレクトリに対して【影響API】を実行

【原因】
【影響API】では内部的に opendir() を実行する事でST_DIR構造体の情報を取得し、
ファイル又はディレクトリを参照する流れになっていますが、opendir()内での処理に問題がありました。
具体的には、opendir()の内部関数 DT_opendir()でディレクトリパス名を取得する必要がありますが、
FS_READDIR_WCマクロ、又はFS_READDIR_WC_UNIマクロが有効の時にしか取得できておらず、
【影響API】のマクロのみ有効にした場合は取得できておりませんでした。

ディレクトリパス名の取得に失敗した場合、その後の処理において本来アクセスしたいディレクトリでなく、
APIがサポートしていないドライブ自体を読み出す処理として動作してしまい(A:\, B:\, C:…)、その結果、
ドライブを全て読み出した後に「CT_NOT_INI_D」エラーが戻されていました。

【回避方法】
fs_cfg.h の以下のマクロを有効にする事で、本不具合を回避する事が出来ます。
・FS_READDIR_WCマクロ
・FS_READDIR_WC_UNIマクロ

■プログラムによる回避方法
修正ソースにつきましては、弊社サポートまでお問い合わせ下さい。