📄 ck_sysfile.cpp
字号:
CHK_DEFAULT(tmp); if((r=tmp.reset())!=Ok) { WY_THROW(r); } CHK_DEFAULT(tmp); if((r=tmp.reset(tmp))!=Ok) { // self-ops WY_THROW(r); } CHK_DEFAULT(tmp); if((r=tmp.reset(tmp.fh()))!=Ok) { WY_THROW(r); } #ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); } #endif // WySysFile S0(HSrc0); WySysFile S1(HSrc1); CHK_SAME_SYSF(S0,HSrc0); CHK_SAME_SYSF(S1,HSrc1); if((r=tmp.reset(S0))!=Ok) { // default->S0 WY_THROW(r); } CHK_NOT_DEFAULT(tmp); CHK_SAME_SYSF(tmp,S0); if((r=tmp.reset(S1))!=Ok) { // S0->S1 WY_THROW(r); } CHK_NOT_DEFAULT(tmp); CHK_SAME_SYSF(tmp,S1); if((r=tmp.reset())!=Ok) { WY_THROW(r); } CHK_DEFAULT(tmp); if((r=tmp.reset(S0.fh()))!=Ok) { // default->S0.fh() WY_THROW(r); } CHK_SAME_SYSF(tmp,S0); if((r=tmp.reset(S1.fh()))!=Ok) { // S0->S1.fh() WY_THROW(r); } CHK_SAME_SYSF(tmp,S1); // feature { WyFileHandle PreFh(tmp.fh()); if((r=tmp.reset(tmp))!=Ok) { WY_THROW(r); } CHK_SAME_SYSF(tmp,S1); std::cout << "Feature(Ok,non-default): "; if(tmp.fh()==PreFh) { std::cout << "t.reset(t) did not change fd\n"; } else { std::cout << "t.reset(t) changes fd\n"; } } if((r=tmp.reset())!=Ok) { WY_THROW(r); } CHK_DEFAULT(tmp); }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); }#endif // chk reset(const char*,int)/reset(const WyStr&,int) { WySysFile tmp1; WySysFile tmp2; CHK_DEFAULT(tmp1); CHK_DEFAULT(tmp2); if((r=tmp1.reset(WyStr(__FILE__),O_RDONLY))!=Ok) { WY_THROW( WyRet(r) ); } if((r=tmp2.reset(__FILE__,O_RDONLY))!=Ok) { WY_THROW( WyRet(r) ); } CHK_NOT_DEFAULT(tmp1); CHK_NOT_DEFAULT(tmp2); CHK_SAME_SYSF(tmp1,tmp2); if((r=tmp2.reset(__FILE__,O_RDONLY))!=Ok) { WY_THROW( WyRet(r) ); } CHK_SAME_SYSF(tmp1,tmp2); #ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt+2) { WY_THROW( WyRet() ); } #endif }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); }#endif // chk _swap(WySysFile&) { WySysFile S0(HSrc0); WySysFile S1(HSrc1); const WyFileHandle Fh0(S0.fh()), Fh1(S1.fh()); CHK_SAME_SYSF(S0,HSrc0); CHK_SAME_SYSF(S1,HSrc1); r=S0._swap(S1); if(r!=Ok) { WY_THROW(r); } CHK_SAME_SYSF(S0,HSrc1); CHK_SAME_SYSF(S1,HSrc0); if(S0.fh()!=Fh1) { WY_THROW(r); } if(S1.fh()!=Fh0) { WY_THROW(r); } r=S1._swap(S0); if(r!=Ok) { WY_THROW(r); } if(S0.fh()!=Fh0) { WY_THROW(r); } if(S1.fh()!=Fh1) { WY_THROW(r); } WySysFile tmp; CHK_DEFAULT(tmp); CHK_NOT_DEFAULT(S0); if((r=tmp._swap(S0))!=Ok) { WY_THROW(r); } CHK_NOT_DEFAULT(tmp); CHK_DEFAULT(S0); #ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt+2) { WY_THROW( WyRet() ); } #endif }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); } if(WySysFile::wydbg_get_objcnt()!=ObjCnt+1) { WY_THROW( WyRet() ); }#endif // chk _alloc { WySysFile tmp; WySysFile* p=tmp._alloc(r); if(r!=Ok) { WY_THROW(r); } if(p==0) { WY_THROW( WyRet() ); } Wy_AtDestroy<void,WySysFile*> rrid(Wy::_delete_one,p); CHK_DEFAULT(*p); if((r=tmp._swap(*p))!=Ok) { WY_THROW(r); } CHK_DEFAULT(*p); CHK_DEFAULT(tmp); // chk _alloc not override { class T : public WySysFile { } tmp; WySysFile* p=tmp._alloc(r); if(r!=Wym_ENOSYS) { if(r==Ok) { delete p; } WY_THROW(r); } } }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); } if(WySysFile::wydbg_get_objcnt()!=ObjCnt+1) { WY_THROW( WyRet() ); }#endif // chk ctor failure (WyFileHandle) { try { WySysFile tmp( WyFileHandle(-2) ); WY_THROW( WyRet() ); } catch(const WySysFile::Reply& e) { if(e!=Wym_EBADF) { WY_THROW( WyRet(e) ); } // FALLTHROUGH }; }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); }#endif // chk copy ctor failure (const WySysFile&) { const WySysFile Fref(HSrc1); const Wy__TypeFD Fref_fd( Fref.wy_fd() ); try { exaust_cpy_ctor(Fref); WY_THROW( WyRet() ); } catch(const WySysFile::Reply& e) { if((e!=Wym_EMFILE)&&(e!=Wym_ENOMEM)) { WY_THROW( WyRet(e) ); } // FALLTHROUGH }; if(Fref.wy_fd()!=Fref_fd) { WY_THROW( WyRet() ); } #ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt+1) { WY_THROW( WyRet() ); } #endif }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); }#endif // chk copy ctor failure (const char*,int) { try { WySysFile tmp("no.such.file.delete.me",O_RDONLY); WY_THROW( WyRet() ); } catch(const WySysFile::Reply& e) { if(e!=Wym_ENOENT) { WY_THROW( WyRet(e) ); } // FALLTHROUGH }; }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); // fd lost }#endif // chk copy ctor failure (const WyStr&,int) { try { WySysFile tmp( WyStr("no.such.file.delete.me"),O_RDONLY); WY_THROW( WyRet() ); } catch(const WySysFile::Reply& e) { if(e!=Wym_ENOENT) { WY_THROW( WyRet(e) ); } // FALLTHROUGH }; }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); // fd lost }#endif // chk err reset(WyFileHandle) { r=exaust_reset(HSrc0); if((r!=Wym_EMFILE)&&(r!=Wym_ENOMEM)) { WY_THROW( WyRet(r) ); } WySysFile tmp; if((r=tmp.reset(WyFileHandle(-2)))!=Wym_EBADF) { WY_THROW( WyRet(r) ); // assume no fd -2 currently } }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); // fd lost }#endif // chk err reset(const WySysFile&) { const WySysFile Fref( WyFileHandle(2) ); const Wy__TypeFD Fref_fd( Fref.wy_fd() ); r=exaust_reset(Fref); if((r!=Wym_EMFILE)&&(r!=Wym_ENOMEM)) { WY_THROW( WyRet(r) ); } if(Fref.wy_fd()!=Fref_fd) { WY_THROW( WyRet() ); } }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); // fd lost }#endif // chk swap err { struct TMP : public WySysFile {}; WySysFile tmp0; TMP tmp1; r=tmp0._swap(tmp1); if(r!=Wym_EBADTYPE) { WY_THROW( WyRet(r) ); } r=tmp1._swap(tmp0); if(r!=Wym_EBADTYPE) { WY_THROW( WyRet(r) ); } }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); // fd lost }#endif // chk _alloc err { //WySysFile tmp; //exaust_alloctmp); } } catch(...) { #ifdef WY_DEBUG if(WySysFile::wydbg_get_objcnt()!=ObjCnt+1) { WY_THROW( WyRet() ); } #endif throw; }; #ifdef WY_DEBUG if(WySysFile::wydbg_get_objcnt()!=ObjCnt+1) { WY_THROW( WyRet() ); } #endif};void ck_sysfile(void){#ifdef WY_DEBUG initial_fdcnt=wydbg_get_fdcnt();#endif ck_0();#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); // fd lost }#endif ck_sysfile_1();#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) { WY_THROW( WyRet() ); // fd lost } std::cout << "At most " << wydbg_get_fdcnt_max() << " fd's allocated\n";#endif};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -