⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ck_sysfile.cpp

📁 一个不错
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2005*/#include "wysysfile.h"#include "wy_atdestroy.h"#include "wy__cfunc.h"#include <iostream>#if WYSYSFILE_VERSION!=31#error Test code is for WYSYSFILE_VERSION 31#endifvoid ck_sysfile(void);#ifdef WY_DEBUGstatic int initial_fdcnt=0;#endif// Assert sysf is default//static void assert_default(const WySysFile& sysf){ WyRet r; if(sysf.is_default()==false) {   WY_THROW( WyRet() ); } if(sysf.fh().is_default()==false) {   WY_THROW( WyRet() ); } // chk fh() if(sysf.fh()!=WyFileHandle()) {   WY_THROW( WyRet() ); }  // stat {   WyFileStat stt;   if((r=sysf.stat(stt))!=Wym_EBADF) {     WY_THROW(r);   }   if(stt.is_default()==false) {     WY_THROW( WyRet() );   } } if(sysf.wy_fd()!=WY__DEFAULT_FD) {   WY_THROW( WyRet() ); } if(sysf.ftype()!=0) {   WY_THROW( WyRet() ); }};static void assert_not_default(const WySysFile& sysf){ WyRet r; if(sysf.is_default()) {   WY_THROW( WyRet() ); } if(sysf.fh().is_default()) {   WY_THROW( WyRet() ); } // chk fh() if(sysf.fh()==WyFileHandle()) {   WY_THROW( WyRet() ); } // stat {   WyFileStat stt;   if((r=sysf.stat(stt))!=Ok) {     WY_THROW(r);   }   if(stt.is_default()) {     WY_THROW( WyRet() );   } } if(sysf.wy_fd()==WY__DEFAULT_FD) {   WY_THROW( WyRet() ); } if(sysf.ftype()==0) {   WY_THROW( WyRet() ); }};// Assert f1,f2 refers to the same systerm file//template<typename Dev1, typename Dev2>static void assert_same_ftype(const Dev1&,const Dev2&) {};static void assert_same_ftype(const WySysFile& f1,const WySysFile& f2) { if(f1.ftype()!=f2.ftype()) {   WY_THROW( WyRet() ); }};template<typename Dev1, typename Dev2>static void assert_same_sysf(const Dev1& f1,const Dev2& f2){ assert_same_ftype(f1,f2); if(f1.is_default()&&f2.is_default()) {   return; } WyRet r; WyFileStat stt1,stt2; if((r=f1.stat(stt1))!=Ok) {   WY_THROW( WyRet() ); } if((r=f2.stat(stt2))!=Ok) {   WY_THROW( WyRet() ); } if(stt1.sf_ino()!=stt2.sf_ino()) {   WY_THROW( WyRet() ); } if(stt1.sf_dev()!=stt2.sf_dev()) {   WY_THROW( WyRet() ); }};#define CHK_DEFAULT(p)\    try { assert_default(p); } catch(...) { WY_THROW( WyRet()); }#define CHK_NOT_DEFAULT(p)\    try { assert_not_default(p); } catch(...) { WY_THROW( WyRet()); }#define CHK_SAME_SYSF(p1,p2)\    try { assert_same_sysf(p1,p2); } catch(...) { WY_THROW( WyRet()); }static void exaust_cpy_ctor(const WySysFile& sysf){ WySysFile tmp(sysf); exaust_cpy_ctor(sysf);   // recursive until failure};static WyRet exaust_reset(const WySysFile& sysf) throw(){ WySysFile tmp; WyRet r( tmp.reset(sysf) ); if(r!=Ok) {   WY_RETURN(r); } return exaust_reset(sysf);   // recursive until failure};static WyRet exaust_reset(WyFileHandle fh) throw(){ WySysFile tmp; WyRet r( tmp.reset(fh) ); if(r!=Ok) {   WY_RETURN(r); } return exaust_reset(fh);   // recursive until failure};/* stack may overflow firststatic void exaust_allocconst WySysFile& sysf) throw(){ WySysFile* p=sysf._alloc); if(p==0) {   return; } Wy_AtDestroy<void,WySysFile*> rrid(Wy::_delete_one,p); exaust_allocsysf);}*/// chk stat//static void ck_0(void){ WyFileHandle tfh(STDIN_FILENO);    // use STDIN_FILENO struct ::stat stt0; if(::fstat(tfh.fd(),&stt0)==-1) {   WY_THROW( WyRet(WyReply(errno)) ); } WyRet r; WyFileStat stt1; if((r=WySysFile(tfh).stat(stt1))!=Ok) {   WY_THROW( WyRet() ); } if((stt0.st_dev!=stt1.sf_dev())||    (stt0.st_ino!=stt1.sf_ino())||    (stt0.st_mode!=stt1.sf_mode())||    (stt0.st_nlink!=stt1.sf_nlink())||    (stt0.st_uid!=stt1.sf_uid())||    (stt0.st_gid!=stt1.sf_gid())||    (stt0.st_rdev!=stt1.sf_rdev())||    (stt0.st_size!=stt1.sf_size())||    (stt0.st_blksize!=stt1.sf_blksize())||    (stt0.st_blocks!=stt1.sf_blocks())||    (stt0.st_atime!=stt1.sf_atime())||    (stt0.st_mtime!=stt1.sf_mtime())||    (stt0.st_ctime!=stt1.sf_ctime())) {   WY_THROW( WyRet() ); }};void ck_sysfile_1(void)   // global name to access WySysFile protected member{ const WyFileHandle HSrc0(STDIN_FILENO); const WyFileHandle HSrc1(STDOUT_FILENO); WyRet r; #ifdef WY_DEBUG const int ObjCnt=WySysFile::wydbg_get_objcnt(); #endif WySysFile tmp; CHK_DEFAULT(tmp); #ifdef WY_DEBUG if(WySysFile::wydbg_get_objcnt()!=ObjCnt+1) {   WY_THROW( WyRet() ); } #endif try {    // ctor()    {     WySysFile t0;     WySysFile t1(t0);     CHK_DEFAULT(t0);     CHK_DEFAULT(t1);     if((r=t0.reset())!=Ok) {       WY_THROW(r);     }     if((r=t1.reset())!=Ok) {       WY_THROW(r);     }     CHK_DEFAULT(t0);     CHK_DEFAULT(t1);    #ifdef WY_DEBUG     if(wydbg_get_fdcnt()!=initial_fdcnt) {       WY_THROW( WyRet() );      }    #endif    }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) {   WY_THROW( WyRet() ); }#endif   // ctor(WyFileHanlde)/(const WySysFile&)   {    WySysFile tmp0(HSrc0);    CHK_NOT_DEFAULT(tmp0);    CHK_SAME_SYSF(tmp0,HSrc0);    if(tmp0.fh()==HSrc0) {      WY_THROW( WyRet() );    }      WySysFile tmp1(HSrc1);    CHK_NOT_DEFAULT(tmp1);    CHK_SAME_SYSF(tmp1,HSrc1);    if(tmp1.fh()==HSrc1) {      WY_THROW( WyRet() );    }      WySysFile ctmp0(tmp0);    CHK_NOT_DEFAULT(ctmp0);    CHK_SAME_SYSF(tmp0,ctmp0);    if(tmp0.fh()==ctmp0.fh()) {      WY_THROW( WyRet() );    }      WySysFile ctmp1(tmp1);    CHK_NOT_DEFAULT(ctmp1);    CHK_SAME_SYSF(tmp1,ctmp1);    if(tmp1.fh()==ctmp1.fh()) {      WY_THROW( WyRet() );    }    WyFileHandle H0;    WySysFile tmp9(H0);    CHK_DEFAULT(tmp9);   }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) {   WY_THROW( WyRet() ); }#endif     // ctor(const char*,int)/ctor(const WyStr&,int)   {    WySysFile tmp1(__FILE__,O_RDONLY);    WySysFile tmp2(WyStr(__FILE__),O_RDONLY);    CHK_NOT_DEFAULT(tmp1);    CHK_NOT_DEFAULT(tmp2);    CHK_SAME_SYSF(tmp1,tmp2);    #ifdef WY_DEBUG     if(wydbg_get_fdcnt()!=initial_fdcnt+2) {       WY_THROW( WyRet() );     }    #endif    // convenient chk reset    if((r=tmp1.reset(tmp1))!=Ok) {   // self-ops       WY_THROW( WyRet(r) );    }    #ifdef WY_DEBUG     if(wydbg_get_fdcnt()!=initial_fdcnt+2) {       WY_THROW( WyRet() );     }    #endif    CHK_SAME_SYSF(tmp1,tmp2);    if((r=tmp1.reset())!=Ok) {       WY_THROW( WyRet(r) );    }    #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 move ctor   {    char raw_buf[2*sizeof(WySysFile)];    ::memset(raw_buf,0,sizeof(raw_buf));    WySysFile * const p1( reinterpret_cast<WySysFile*>(raw_buf) );    WySysFile * const p2(p1+1);    new(p1) WySysFile(__FILE__,O_RDONLY);    #ifdef WY_DEBUG     if(wydbg_get_fdcnt()!=initial_fdcnt+1) {       WY_THROW( WyRet() );     }    #endif    {      try {        CHK_NOT_DEFAULT(*p1);      }      catch(...) {        p1->~WySysFile();        throw;      };    }    // move *p1 to p2    WyFileHandle ofh( p1->fh() );    mode_t oft( p1->ftype() );    if(oft!=S_IFREG) {      WY_THROW( WyRet() );    }    try {      new(p2) WySysFile(*p1,Wy::ByMove);    }    catch(...) {      p1->~WySysFile();      throw;    };    #ifdef WY_DEBUG     if(wydbg_get_fdcnt()!=initial_fdcnt+1) {       WY_THROW( WyRet() );     }    #endif    WyFileHandle nfh( p2->fh() );    mode_t nft( p2->ftype() );    p2->~WySysFile();    if(nfh!=ofh) {      WY_THROW( WyRet() );    }    if(nft!=oft) {      WY_THROW( WyRet() );    }   }#ifdef WY_DEBUG if(wydbg_get_fdcnt()!=initial_fdcnt) {   WY_THROW( WyRet() ); }#endif   // chk reset()/reset(WyFileHandle)/reset(const SysFile&)   {    WySysFile tmp;  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -