From 37c7b4ae74ad56f3e77ec2a5a889dacbf9a754e5 Mon Sep 17 00:00:00 2001 From: sauron Date: Mon, 25 Aug 2025 15:51:05 +0900 Subject: [PATCH] commit 2025-08-25 15:51 refine codes about readdir_r() and readdir() in ZCppMain/ZMainHead.H --- ZCppMain/ZMainHeadEx.H | 105 ++++++++++++++++++++++++++++------------ ZCppMainTest/ZtCLoadXml_000.cpp | 3 ++ 2 files changed, 78 insertions(+), 30 deletions(-) diff --git a/ZCppMain/ZMainHeadEx.H b/ZCppMain/ZMainHeadEx.H index 4655a50..eaa1bf1 100644 --- a/ZCppMain/ZMainHeadEx.H +++ b/ZCppMain/ZMainHeadEx.H @@ -4368,9 +4368,10 @@ namespace ZNsMain ::chdir(".."); ::closedir(VH_File); - if(VB_RemoveFail==true) return false; + if(VP_DirEnt ==0 ) {return false;} + if(VB_RemoveFail==true) {return false;} - ::rmdir(AP_DirName); return true; + ::rmdir(AP_DirName); return true ; //#elif defined(_REENTRANT) // && !defined(_WIN) #else // !defined(_WIN) && !defined(_REENTRANT) @@ -4403,7 +4404,7 @@ namespace ZNsMain //////////////////////////////////////////////////////////////////*/ - while(VP_DirEnt = ::readdir(VH_File)) + while((VP_DirEnt = ::readdir(VH_File))!=0) { const bool CB_IsNotValid = //////////////////// ( @@ -4441,13 +4442,14 @@ namespace ZNsMain VB_RemoveFail=false; }/* - while(VP_DirEnt = ::readdir(VH_File))*/ + while((VP_DirEnt = ::readdir(VH_File))!=0)*/ ::chdir(".."); ::closedir(VH_File); + if(VP_DirEnt ==0 ) return false; if(VB_RemoveFail==true) return false; - ::rmdir(AP_DirName); return true; + ::rmdir(AP_DirName); return true ; #endif //!defined(_WIN) && !defined(_REENTRANT) }/* @@ -4528,7 +4530,7 @@ namespace ZNsMain ) //////////////////////////////////////////// { - ZNsMain::ZNsEnum::ZERun VE_ERun=ZNsMain::ZNsEnum::ZERun_OK; + ZNsMain::ZNsEnum::ZERun VE_ERun = ZNsMain::ZNsEnum::ZERun_OK; #if defined(_WIN) @@ -4623,7 +4625,7 @@ namespace ZNsMain #ifdef _REENTRANT while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) #else - while(VP_DirEnt = ::readdir(VH_File)) + while((VP_DirEnt = ::readdir(VH_File))!=0) #endif { const bool CB_IsNotValid = @@ -4643,7 +4645,7 @@ namespace ZNsMain ::strcat(VCA_Search , VP_DirEnt->d_name); ::strcpy(VO_CFileData.cFileName, VP_DirEnt->d_name); - if(::lstat(VCA_Search,&VO_CFileData)<0) + if(::lstat(VCA_Search, &VO_CFileData)<0) { throw ZCExceptDir ( @@ -4654,7 +4656,7 @@ namespace ZNsMain return ZNsMain::ZNsEnum::ZERun_NO; }/* - if(::lstat(VCA_Search,&VO_CFileData)<0)*/ + if(::lstat(VCA_Search, &VO_CFileData)<0)*/ if(VO_CFileData.IsDir()) // S_ISDIR(VO_CFileData.st_mode)) { @@ -4694,10 +4696,18 @@ namespace ZNsMain }/* else // !VO_CFileData.IsDir()*/ }/* - while(VP_DirEnt = ::readdir(VH_File))*/ + #ifdef _REENTRANT + while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) + #else + while((VP_DirEnt = ::readdir(VH_File))!=0) + #endif + */ ::closedir(VH_File); + if(VP_DirEnt==0) + return ZNsMain::ZNsEnum::ZERun_NO; + #endif //!defined(_WIN) return VE_ERun; @@ -4751,7 +4761,7 @@ namespace ZNsMain ZtCTypeData::GetObjRef(AR_CViewDir); - ZNsMain::ZNsEnum::ZERun VE_ERun=ZNsMain::ZNsEnum::ZERun_OK; + ZNsMain::ZNsEnum::ZERun VE_ERun = ZNsMain::ZNsEnum::ZERun_OK; #if defined(_WIN) @@ -4834,13 +4844,15 @@ namespace ZNsMain #ifdef _REENTRANT while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) #else - while(VP_DirEnt=::readdir(VH_File)) + while((VP_DirEnt = ::readdir(VH_File))!=0) #endif { - const bool CB_IsNotValid=( - ::strcmp(".", VP_DirEnt->d_name)==0 || - ::strcmp("..", VP_DirEnt->d_name)==0 - /*//////////*/ ); + const bool CB_IsNotValid = + ( + ::strcmp(".", VP_DirEnt->d_name)==0 || + ::strcmp("..", VP_DirEnt->d_name)==0 + ); + ////////////////////////// if(CB_IsNotValid) continue; @@ -4891,10 +4903,18 @@ namespace ZNsMain }/* else*/ }/* - while(VP_DirEnt=::readdir(VH_File))*/ + #ifdef _REENTRANT + while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) + #else + while((VP_DirEnt = ::readdir(VH_File))!=0) + #endif + */ ::closedir(VH_File); + if(VP_DirEnt==0) + return ZNsMain::ZNsEnum::ZERun_NO ; + #endif //!defined(_WIN) return VE_ERun; @@ -5005,7 +5025,7 @@ namespace ZNsMain #ifdef _REENTRANT while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) #else - while(VP_DirEnt= ::readdir(VH_File)) + while((VP_DirEnt= ::readdir(VH_File))!=0) #endif { const bool CB_IsNotValid = @@ -5063,11 +5083,11 @@ namespace ZNsMain #ifdef _REENTRANT while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) #else - while(VP_DirEnt= ::readdir(VH_File)) + while((VP_DirEnt= ::readdir(VH_File))!=0) #endif */ - ::closedir(VH_File); + ::closedir(VH_File); if(VP_DirEnt==0) return ZERun_NO; #endif //!defined(_WIN) @@ -5163,13 +5183,15 @@ namespace ZNsMain #ifdef _REENTRANT while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) #else - while(VP_DirEnt= ::readdir(VH_File)) + while((VP_DirEnt= ::readdir(VH_File))!=0) #endif { - const bool CB_IsNotValid = ( - ::strcmp(".", VP_DirEnt->d_name)==0 || - ::strcmp("..", VP_DirEnt->d_name)==0 - /*//////////*/ ); + const bool CB_IsNotValid = + ( + ::strcmp(".", VP_DirEnt->d_name)==0 || + ::strcmp("..", VP_DirEnt->d_name)==0 + ); + ////////////////////////// if(CB_IsNotValid) continue; @@ -5212,10 +5234,17 @@ namespace ZNsMain }/* else*/ }/* - while((VP_DirEnt= ::readdir(VH_File))!=0)*/ + #ifdef _REENTRANT + while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) + #else + while((VP_DirEnt= ::readdir(VH_File))!=0) + #endif*/ ::closedir(VH_File); + if(VP_DirEnt==0) + return ZNsMain::ZNsEnum::ZERun_NO ; + #endif // !defined(_WIN) return VE_ERun; @@ -5319,7 +5348,7 @@ namespace ZNsMain #ifdef _REENTRANT while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) #else - while(VP_DirEnt= ::readdir(VH_File)) + while((VP_DirEnt= ::readdir(VH_File))!=0) #endif { const bool CB_IsNotValid=( @@ -5368,10 +5397,18 @@ namespace ZNsMain }/* else*/ }/* - while((VP_DirEnt=::readdir(VH_File))!=0)*/ + #ifdef _REENTRANT + while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) + #else + while((VP_DirEnt= ::readdir(VH_File))!=0) + #endif + */ ::closedir(VH_File); + if(VP_DirEnt==0) + return ZNsMain::ZNsEnum::ZERun_NO ; + #endif //!defined(_WIN) return VE_ERun; @@ -5463,7 +5500,7 @@ namespace ZNsMain #ifdef _REENTRANT while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) #else - while(VP_DirEnt = ::readdir(VH_File)) + while((VP_DirEnt = ::readdir(VH_File))!=0) #endif { const bool CB_IsNotValid = @@ -5518,10 +5555,18 @@ namespace ZNsMain }/* else*/ }/* - while((VP_DirEnt = ::readdir(VH_File))!=0)*/ + #ifdef _REENTRANT + while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0) + #else + while((VP_DirEnt = ::readdir(VH_File))!=0) + #endif + */ ::closedir(VH_File); + if(VP_DirEnt==0) + return ZNsMain::ZNsEnum::ZERun_NO ; + #endif // !defined(_WIN) return VE_ERun; diff --git a/ZCppMainTest/ZtCLoadXml_000.cpp b/ZCppMainTest/ZtCLoadXml_000.cpp index c5c3f2d..9236c49 100644 --- a/ZCppMainTest/ZtCLoadXml_000.cpp +++ b/ZCppMainTest/ZtCLoadXml_000.cpp @@ -225,6 +225,9 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/ g++ -std=c++98 -o ZtCLoadXml_000.exe ZtCLoadXml_000.cpp -I../ g++ -std=c++98 -o ZtCLoadXml_000_D.exe ZtCLoadXml_000.cpp -I../ -D_DEBUG + g++ -std=c++98 -o ZtCLoadXml_000_r.exe ZtCLoadXml_000.cpp -I../ -D_REENTRANT + g++ -std=c++98 -o ZtCLoadXml_000_r_D.exe ZtCLoadXml_000.cpp -I../ -D_REENTRANT -D_DEBUG + sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0