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

📄 wyret.cpp

📁 一个不错
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2003*/#define WYLIB_SOURCE#include "wyret.h"#include <cerrno>#include <cstring>     // for strlen#include <pthread.h>   // for mutex//-------------------------------------------------// Definition for Wy_RepInfo//// Note: Order of code is significant//-------------------------------------------------const Wy_RepInfo::RepCodeType Wy_RepInfo::_default_rcode=Wy::_default_errno;Wy_RepInfo::Wy_RepInfo(const char* cstr) WY__NOTHROW__ : _rcode(_default_rcode), _rstr(cstr){ if(cstr==NULL) {   WY_TERMINATE(""); }};Wy_RepInfo::Wy_RepInfo(Wy_RepInfo::RepCodeType rc, const char* cstr) WY__NOTHROW__ : _rcode(rc), _rstr(cstr){ if(cstr==NULL) {   WY_TERMINATE(""); }};Wy_RepInfo::RepCodeType Wy_RepInfo::c_repcode(void) const WY__NOTHROW__{ return _rcode; };const char* Wy_RepInfo::c_repstr(void) const WY__NOTHROW__{ return _rstr;};size_t Wy_RepInfo::get_reply(char* buf, size_t blen) const WY__NOTHROW__{ size_t slen( std::strlen(_rstr) ); if(buf==NULL) {   return slen; } if(blen<slen) {   slen=blen; } std::memcpy(buf,_rstr,slen); return slen; };//-------------------------------------------------// Definition for WyRet//// Note: Order of code is significant//-------------------------------------------------class Wy__ErrNo : public Wy_RepInfo {    const char* _ap_str;   // application reply string    size_t      _ap_len;   // length of char's pointed by _ap_buf    mutable ::pthread_mutex_t _mtx;    // Hidden    const Wy__ErrNo& operator =(const Wy__ErrNo&);    bool operator ==(const Wy__ErrNo&);    void* operator new(size_t);  public:    // [Syn] Construct object    //    //       c_repcode()  = en    //       c_repstr()= cstr    //     get_reply()= copy out cstr    //    Wy__ErrNo(Wy__ErrNoType en, const char* cstr) WY__NOTHROW__       : Wy_RepInfo(en,cstr), _ap_str(cstr), _ap_len(std::strlen(cstr))         {           ::pthread_mutex_init(&_mtx,NULL);         };    ~Wy__ErrNo() WY__NOTHROW__         {           ::pthread_mutex_destroy(&_mtx);          };    // Note: .Copy constructor is not defined.    //       .Compiler (g++) seems need to 'see' this declaration.    //        This may be from Standard requirement.    //       .Wy_RepInfo object is not supposed to be derived by copy    //        constructor    //    Wy__ErrNo(const Wy__ErrNo&) WY__NOTHROW__;    // [Derived]    // int c_repcode(void) const throw()    // const char* c_repstr(void) const throw()    // [Override]    //    size_t get_reply(char* buf, size_t blen) const WY__NOTHROW__         {           if(::pthread_mutex_lock(&_mtx)!=0) {             WY_TERMINATE("");           }           if(buf==NULL) {             const size_t rv(_ap_len);             if(::pthread_mutex_unlock(&_mtx)!=0) {               WY_TERMINATE("");             }             return(rv);           }           const size_t slen( (blen<_ap_len)? blen:_ap_len);           std::memcpy(buf,_ap_str,slen);           if(::pthread_mutex_unlock(&_mtx)!=0) {             WY_TERMINATE("");           }           return slen;          };    // [Override]    //    void set_reply(const char* str, size_t slen) WY__NOTHROW__         {           if(::pthread_mutex_lock(&_mtx)!=0) {             WY_TERMINATE("");           }           _ap_str=str;           _ap_len=slen;           if(::pthread_mutex_unlock(&_mtx)!=0) {             WY_TERMINATE("");           }         };};// The object for default WyReply to refer tostatic Wy__ErrNo wye_default_repinfo(Wy::_default_errno,Wy::_default_repstr);//-------------------------------------------------// Definition for WyRet//// Note: Order of code is significant//-------------------------------------------------Wy_RepInfo* const WyReply::_default_ri_ptr=&wye_default_repinfo;// Wy__ErrNo object for errno//static Wy__ErrNo wye_tab[Wy::_max_errno+1]= {  Wy__ErrNo(  0,"Success"),  Wy__ErrNo(  1,"Operation not permitted"),  Wy__ErrNo(  2,"No such file or directory"),  Wy__ErrNo(  3,"No such process"),  Wy__ErrNo(  4,"Interrupted system call"),  Wy__ErrNo(  5,"Input/output error"),  Wy__ErrNo(  6,"No such device or address"),  Wy__ErrNo(  7,"Argument list too long"),  Wy__ErrNo(  8,"Exec format error"),  Wy__ErrNo(  9,"Bad file descriptor"),  Wy__ErrNo( 10,"No child processes"),  Wy__ErrNo( 11,"Resource temporarily unavailable"),  Wy__ErrNo( 12,"Cannot allocate memory"),  Wy__ErrNo( 13,"Permission denied"),  Wy__ErrNo( 14,"Bad address"),  Wy__ErrNo( 15,"Block device required"),  Wy__ErrNo( 16,"Device or resource busy"),  Wy__ErrNo( 17,"File exists"),  Wy__ErrNo( 18,"Invalid cross-device link"),  Wy__ErrNo( 19,"No such device"),  Wy__ErrNo( 20,"Not a directory"),  Wy__ErrNo( 21,"Is a directory"),  Wy__ErrNo( 22,"Invalid argument"),  Wy__ErrNo( 23,"Too many open files in system"),  Wy__ErrNo( 24,"Too many open files"),  Wy__ErrNo( 25,"Inappropriate ioctl for device"),  Wy__ErrNo( 26,"Text file busy"),  Wy__ErrNo( 27,"File too large"),  Wy__ErrNo( 28,"No space left on device"),  Wy__ErrNo( 29,"Illegal seek"),  Wy__ErrNo( 30,"Read-only file system"),  Wy__ErrNo( 31,"Too many links"),  Wy__ErrNo( 32,"Broken pipe"),  Wy__ErrNo( 33,"Numerical argument out of domain"),  Wy__ErrNo( 34,"Numerical result out of range"),  Wy__ErrNo( 35,"Resource deadlock would occur"),  Wy__ErrNo( 36,"File name too long"),  Wy__ErrNo( 37,"No locks available"),  Wy__ErrNo( 38,"Function not implemented"),  Wy__ErrNo( 39,"Directory not empty"),  Wy__ErrNo( 40,"Too many levels of symbolic links"),  Wy__ErrNo( 41,"Unknown error 41"),   Wy__ErrNo( 42,"No message of desired type"),  Wy__ErrNo( 43,"Identifier removed"),  Wy__ErrNo( 44,"Channel number out of range"),  Wy__ErrNo( 45,"Level 2 not synchronized"),  Wy__ErrNo( 46,"Level 3 halted"),  Wy__ErrNo( 47,"Level 3 reset"),  Wy__ErrNo( 48,"Link number out of range"),  Wy__ErrNo( 49,"Protocol driver not attached"),  Wy__ErrNo( 50,"No CSI structure available"),  Wy__ErrNo( 51,"Level 2 halted"),  Wy__ErrNo( 52,"Invalid exchange"),  Wy__ErrNo( 53,"Invalid request descriptor"),  Wy__ErrNo( 54,"Exchange full"),  Wy__ErrNo( 55,"No anode"),  Wy__ErrNo( 56,"Invalid request code"),  Wy__ErrNo( 57,"Invalid slot"),  Wy__ErrNo( 58,"Unknown error 58"),  Wy__ErrNo( 59,"Bad font file format"),  Wy__ErrNo( 60,"Device not a stream"),  Wy__ErrNo( 61,"No data available"),  Wy__ErrNo( 62,"Timer expired"),  Wy__ErrNo( 63,"Out of streams resources"),  Wy__ErrNo( 64,"Machine is not on the network"),  Wy__ErrNo( 65,"Package not installed"),  Wy__ErrNo( 66,"Object is remote"),  Wy__ErrNo( 67,"Link has been severed"),  Wy__ErrNo( 68,"Advertise error"),  Wy__ErrNo( 69,"Srmount error"),  Wy__ErrNo( 70,"Communication error on send"),  Wy__ErrNo( 71,"Protocol error"),  Wy__ErrNo( 72,"Multihop attempted"),  Wy__ErrNo( 73,"RFS specific error"),  Wy__ErrNo( 74,"Bad message"),  Wy__ErrNo( 75,"Value too large for defined data type"),  Wy__ErrNo( 76,"Name not unique on network"),  Wy__ErrNo( 77,"File descriptor in bad state"),  Wy__ErrNo( 78,"Remote address changed"),  Wy__ErrNo( 79,"Can not access a needed shared library"),  Wy__ErrNo( 80,"Accessing a corrupted shared library"),  Wy__ErrNo( 81,".lib section in a.out corrupted"),  Wy__ErrNo( 82,"Attempting to link in too many shared libraries"),  Wy__ErrNo( 83,"Cannot exec a shared library directly"),  Wy__ErrNo( 84,"Illegal byte sequence"),  Wy__ErrNo( 85,"Interrupted system call should be restarted"),  Wy__ErrNo( 86,"Streams pipe error"),  Wy__ErrNo( 87,"Too many users"),

⌨️ 快捷键说明

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