亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ss_msg.c

?? 中國石油二期加油站IC系統后臺通訊軟件
?? C
?? 第 1 頁 / 共 5 頁
字號:


/********************************************************************20**
 
     Name:     System Services -- Message manipulation functions
 
     Type:     C source file
 
     Desc:     Source Code for message related functions.
 
     File:     ss_msg.c
 
     Sid:      ss_msg.c 1.3  -  10/14/98 14:12:52
 
     Prg:      sn
 
*********************************************************************21*/



/* header include files (.h) */

#include "envopt.h"        /* environment options */
#include "envdep.h"        /* environment dependent */
#include "envind.h"        /* environment independent */

#include "gen.h"           /* general layer */
#include "ssi.h"           /* system services */

#include "ss_err.h"        /* errors */
#include "ss_dep.h"        /* implementation-specific */
#include "ss_queue.h"      /* queues */
#include "ss_strm.h"       /* STREAMS */
#include "ss_msg.h"        /* messaging */
#include "ss_mem.h"        /* memory management interface */
#include "ss_gen.h"        /* general */



/* header/extern include files (.x) */

#include "gen.x"           /* general layer */
#include "ssi.x"           /* system services */

#include "ss_dep.x"        /* implementation-specific */
#include "ss_queue.x"      /* queues */
#include "ss_task.x"       /* tasking */
#include "ss_timer.x"      /* timers */
#include "ss_strm.x"       /* STREAMS */
#include "ss_msg.x"        /* messaging */
#include "ss_mem.x"        /* memory management interface */
#include "ss_drvr.x"       /* driver tasks */
#include "ss_gen.x"        /* general */



/* forward declarations */
PRIVATE S16 ssGetDBufOfSize ARGS((Region region, Size size, Buffer **dBuf));



/* local defines */
#define MBSIZE   (sizeof(SsMblk))
#define MDBSIZE  (sizeof(SsDblk) + sizeof(SsMblk))
#define MSGSIZE  (MDBSIZE + sizeof(SsMsgInfo))

#define INITMBLK(mp, dp, dat)   {\
   mp->b_next = NULLP;\
   mp->b_prev = NULLP;\
   mp->b_cont = NULLP;\
   mp->b_rptr = dat;\
   mp->b_wptr = dat;\
   mp->b_datap = dp;\
}

#define INITDBLK(dp, dat, size, frtn)   {\
   dp->db_frtnp = frtn;\
   dp->db_base = dat;\
   dp->db_lim = (dat == NULLP ? dat : (dat + size));\
   ssLockTsk(); \
   dp->db_ref = 1;\
   ssUnlockTsk(); \
   dp->db_type = SS_M_DATA;\
}

#define INITB(mp, dp, dat, size, frtn)   {\
   INITMBLK(mp, dp, dat)\
   INITDBLK(dp, dat, size, frtn)\
}


/*
*
*       Fun:   ssGetDBufOfSize
*
*       Desc:  This function gets a message buffer from specified region and
*              size
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*              ROUTRES  - failed, out of resources (optional)
*
*       Notes: message is created. message is returned via message buffer
*              pointer. Buffer type is SS_M_DATA.
*              return is ok.
*
*       File:  ss_msg.c
*
*/
#ifdef ANSI
PRIVATE S16 ssGetDBufOfSize
(
Region region,
Size size,
Buffer **dBuf
)
#else
PRIVATE S16 ssGetDBufOfSize(region, size, dBuf)
Region region;
Size size;
Buffer **dBuf;
#endif
{
    Size mdsize;
    Data *data;
    SsDblk *dptr;

    TRC1(ssGetDBufOfSize)

#if (ERRCLASS & ERRCLS_INT_PAR)
    /* check buffer pointer */
    if (!dBuf)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS216, ERRZERO, "ssGetDBufOfSize : Null\
                 Buffer");
        RETVALUE(RFAILED);
    }
    if (region >= SS_MAX_REGS)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS217, ERRZERO, "ssGetDBufOfSize : Invalid\
                region id");
        RETVALUE(RFAILED);
    }

    if (size <= 0)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS218, ERRZERO, "ssGetDBufOfSize : Invalid\
                 size");
        RETVALUE(RFAILED);
    }
#endif

    mdsize = MDBSIZE;

    if (osCp.regionTbl[region].flags & SS_OUTBOARD_FLAG)
    {
        /* allocate memory for data buffer */
        if (SAlloc(region, &size, 0, &data) != ROK)
            RETVALUE(ROUTRES);
        if (SAlloc(SS_DFLT_REGION, &mdsize, 0, (Data **) dBuf) != ROK)
        {
            SFree(region, (Data *) data, size);
            RETVALUE(ROUTRES);
        }
    } else
    {
        mdsize += size;
        if (SAlloc(region, &mdsize, 0, (Data **) dBuf) != ROK)
        {
            RETVALUE(ROUTRES);
        }
        data = (Data *) (*dBuf) + MDBSIZE;
        size = mdsize - MDBSIZE;
    }

    dptr = (SsDblk*) (((Data *) (*dBuf)) + MBSIZE);

    INITB((*dBuf), dptr, data, size, NULLP)

    RETVALUE(ROK);
} /* ssGetDBufOfSize */


/*
*
*       Fun:   SGetMsg
*
*       Desc:  This function gets a message
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*              ROUTRES  - failed, out of resources (optional)
*
*       Notes: message is created. message is set to type SS_M_PROTO.
*              message is returned via message buffer pointer.
*              return is ok.
*
*       File:  ss_msg.c
*
*/

#ifdef ANSI
PUBLIC S16 SGetMsg
(
Region region,              /* region id */
Pool pool,                  /* pool id */
Buffer **mBuf               /* pointer to message buffer */
)
#else
PUBLIC S16 SGetMsg(region, pool, mBuf)
Region region;              /* region id */
Pool pool;                  /* pool id */
Buffer **mBuf;              /* pointer to message buffer */
#endif
{
    SsMsgInfo *minfo;
    Size size;
    SsDblk *dptr;
    Data *data;

    TRC1(SGetMsg)

#if (ERRCLASS & ERRCLS_INT_PAR)
    /* check buffer pointer */
    if (!mBuf)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS219, ERRZERO, "SGetMsg : Null Buffer");
        RETVALUE(RFAILED);
    }
    if (region >= SS_MAX_REGS)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS220, ERRZERO, "SGetMsg : Invalid region\
                                                   id");
        RETVALUE(RFAILED);
    }

    if (pool >= SS_MAX_POOLS_PER_REG)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS221, ERRZERO, "SGetMsg : Invalid pool id");
        RETVALUE(RFAILED);
    }
#endif
    size = MSGSIZE;

    if (SAlloc(SS_DFLT_REGION, &size, 0, (Data**) mBuf) != ROK)
    {
        SSLOGERROR(ERRCLS_DEBUG, ESS222, size, "SGetMsg:Failed in SAlloc");
        RETVALUE(ROUTRES);
    }

    dptr = (SsDblk*) (((Data *) (*mBuf)) + MBSIZE);
    data = (Data*) (((Data *) (*mBuf)) + MDBSIZE);

    /* INITB initialises and sets up the message blk */
    INITB((*mBuf), dptr, data, size, NULLP)

    (*mBuf)->b_datap->db_type = SS_M_PROTO;
    (*mBuf)->b_wptr = (*mBuf)->b_rptr + sizeof(SsMsgInfo);

    /* initialise message info of mBuf */
    minfo = (SsMsgInfo*) (*mBuf)->b_rptr;

    minfo->region = region;
    minfo->pool = pool;
    minfo->len = 0;
    minfo->endptr = NULLP;
    minfo->eventInfo.event = SS_EVNT_DATA;

    RETVALUE(ROK);
}

/*
*
*       Fun:   SPutMsg
*
*       Desc:  This function deallocates a message back.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*
*       Notes: all data attached to message is returned to memory.
*              message is returned to memory. return is ok.
*
*       File:  ss_msg.c
*
*/

#ifdef ANSI
PUBLIC S16 SPutMsg
(
Buffer *mBuf
)
#else
PUBLIC S16 SPutMsg(mBuf)
Buffer *mBuf;
#endif
{
    Buffer *tmp;
    SsMsgInfo *minfo;

    TRC1(SPutMsg)

#if (ERRCLASS & ERRCLS_INT_PAR)
    if (mBuf == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS223, ERRZERO, "SPutMsg: Null Buffer");
        RETVALUE(RFAILED);
    }
    if (mBuf->b_datap->db_type != SS_M_PROTO)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS224, ERRZERO, "SPutMsg: Incorrect buffer\
                                                   type");
        RETVALUE(RFAILED);
    }
#endif

    /* get the message info */
    minfo = (SsMsgInfo *) mBuf->b_rptr;

    while ((tmp = mBuf->b_cont))
    {
        /* set b_cont of mBuf to point to the b_cont of tmp */
        mBuf->b_cont = tmp->b_cont;
        (Void) SPutDBuf(minfo->region, minfo->pool, tmp);
    }
    SFree(SS_DFLT_REGION, (Data *) mBuf, MSGSIZE);

    RETVALUE(ROK);
}

/*
*
*       Fun:   SInitMsg
*
*       Desc:  This function deallocates a message back and then
*              reinitializes the message.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*
*       Notes: all data attached to message is returned to memory.
*              message is set to empty. message is not returned to
*              memory. return is ok.
*
*       File:  ss_msg.c
*
*/

#ifdef ANSI
PUBLIC S16 SInitMsg
(
Buffer *mBuf
)
#else
PUBLIC S16 SInitMsg(mBuf)
Buffer *mBuf;
#endif
{
    SsMsgInfo *minfo;
    Buffer *tmp;

    TRC1(SInitMsg)

#if (ERRCLASS & ERRCLS_INT_PAR)
    /* check message buffer */
    if (mBuf == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS225, ERRZERO, "SInitMsg: Null Buffer");
        RETVALUE(RFAILED);
    }
    if (mBuf->b_datap->db_type != SS_M_PROTO)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS226, ERRZERO, "SInitMsg: Incorrect buffer\
                                                   type");
        RETVALUE(RFAILED);
    }
#endif

    /* get the message info */
    minfo = (SsMsgInfo*) mBuf->b_rptr;

    /* free all SS_M_DATA blks */
    while ((tmp = mBuf->b_cont))
    {
        mBuf->b_cont = tmp->b_cont;
        (Void) SPutDBuf(minfo->region, minfo->pool, tmp);
    }
    /* initialise the length and endptr variables of mBuf */

    minfo->len = 0;
    minfo->endptr = NULLP;
    minfo->next = NULLP;

    RETVALUE(ROK);
}

/*
*
*       Fun:   SAddPreMsg
*
*       Desc:  This function copies one byte of data to the
*              beginning of a message.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*              ROUTRES  - failed, out of resources (optional)
*
*       Notes: if message is empty: data is placed in the message. message
*              length is incremented. return is ok.
*
*              if message is not empty: data is placed in front of all
*              other data in message. message length is incremented.
*              return is ok.
*
*       File:  ss_msg.c
*
*/


#ifdef ANSI
PUBLIC S16 SAddPreMsg
(
Data data,
Buffer *mBuf
)
#else
PUBLIC S16 SAddPreMsg (data, mBuf)
Data data;
Buffer *mBuf;
#endif
{
    SsMsgInfo *minfo;
    Buffer *tmp;
    Buffer *newb;

    TRC1(SAddPreMsg)

#if (ERRCLASS & ERRCLS_INT_PAR)
    /* check message buffer */
    if (!mBuf)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS227, ERRZERO, "SAddPreMsg: Null Buffer");
        RETVALUE(RFAILED);
    }
    if (mBuf->b_datap->db_type != SS_M_PROTO)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS228, ERRZERO, "SAddPreMsg: Incorrect\
                                                   buffer type");
        RETVALUE(RFAILED); 
    }
#endif

    minfo = (SsMsgInfo *) mBuf->b_rptr;

    /*
     * allocate a message blk using SGetDBuf(), if there are no data blks in the
     * message, mBuf, or if the reference count of the first data blk is greater
     * than 1, or if there is no space to append databytes in front of the read
     * pointer of the first data blk
    */
    ssLockTsk();
    if (!(tmp = mBuf->b_cont) || (tmp->b_datap->db_ref > 1) ||
        (tmp->b_rptr == tmp->b_datap->db_base))
    {
        ssUnlockTsk();
        if (SGetDBuf(minfo->region, minfo->pool, &newb) != ROK)
        {
            SSLOGERROR(ERRCLS_DEBUG, ESS229, ERRZERO, "SAddPreMsg:Failed in\
                    SGetDBuf");
            RETVALUE(ROUTRES);
        }
        /* set the read and write pointers to end of data buffer */
        /* subsequent prepends have all the buffer to insert data into */
        newb->b_wptr = newb->b_datap->db_lim;
        newb->b_rptr = newb->b_datap->db_lim;

        /* insert newb before tmp */
        newb -> b_cont = tmp;
        mBuf->b_cont = newb;

        /* if endptr of mBuf is NULLP, set it to newb */
        if (tmp == NULLP)
            minfo->endptr = newb;
        tmp = newb;
    } else
        ssUnlockTsk();
    /* insert data, increment length */
    *--tmp->b_rptr = data;
    minfo->len++;

    RETVALUE(ROK);
}

/*
*
*       Fun:   SAddPstMsg
*
*       Desc:  This function copies one byte of data to the
*              end of a message.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*              ROUTRES  - failed, out of resources (optional)
*
*       Notes: if message is empty: data is placed in the message. message
*              length is incremented. return is ok.
*
*              if message is not empty: data is placed in back of all
*              other data in message. message length is incremented.
*              return is ok.
*
*       File:  ss_msg.c
*

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区欧美| 暴力调教一区二区三区| 精品成人佐山爱一区二区| 成人欧美一区二区三区| 99综合影院在线| 久久精品国产第一区二区三区| 欧美变态凌虐bdsm| 久久超碰97中文字幕| 午夜亚洲福利老司机| 久久亚洲捆绑美女| 91猫先生在线| 日本午夜一区二区| 国产精品久久久久久久久免费丝袜| 色婷婷国产精品| 日韩不卡在线观看日韩不卡视频| 91激情在线视频| 国产精品进线69影院| 欧美一区二区三区视频免费播放| 在线观看av不卡| 国产欧美日韩另类视频免费观看| 99精品一区二区三区| 香蕉加勒比综合久久| 337p日本欧洲亚洲大胆色噜噜| 日韩精品自拍偷拍| 欧美午夜电影网| 成人精品免费视频| 国产欧美日韩另类一区| 亚洲青青青在线视频| 欧美mv日韩mv国产网站app| 精品日韩一区二区| 国产精品伦一区二区三级视频| 日韩免费性生活视频播放| 国产欧美日韩一区二区三区在线观看| www日韩大片| 国产色综合一区| 亚洲色图欧美偷拍| 欧美日韩精品一区视频| 不卡的av网站| 欧美色图免费看| 欧美色窝79yyyycom| 日韩欧美在线1卡| 91精品国产手机| 久久精品一二三| 国产精品一区二区免费不卡| 天天爽夜夜爽夜夜爽精品视频| 美女在线观看视频一区二区| 亚洲国产精品麻豆| 亚洲免费色视频| 久久99国产精品久久| 看片的网站亚洲| 国产一区二区三区在线观看免费| 日韩欧美一级二级三级| 欧美一区二区三区视频在线观看 | 久久久久久久久伊人| 欧美群妇大交群中文字幕| 国产午夜久久久久| 首页国产欧美久久| 亚洲午夜日本在线观看| 国产ts人妖一区二区| 国产白丝精品91爽爽久久| 欧美日韩国产美| 国产精品国产三级国产a| 久久国产精品露脸对白| 91精品国产色综合久久ai换脸| 亚洲欧洲三级电影| 懂色av噜噜一区二区三区av | 精品一区二区免费看| 欧美日韩中文国产| 亚洲国产精品一区二区尤物区| 9久草视频在线视频精品| 欧美mv和日韩mv国产网站| 欧美成人a∨高清免费观看| 欧美色欧美亚洲另类二区| 欧美日韩在线观看一区二区| 国产精品夫妻自拍| 不卡在线观看av| 国产女主播一区| 国产69精品久久99不卡| 久久夜色精品一区| 国产精品自在在线| 国产亚洲1区2区3区| 国产一区二区三区国产| 欧美成人午夜电影| 国内精品不卡在线| 国产.精品.日韩.另类.中文.在线.播放 | 亚洲欧洲日韩在线| 93久久精品日日躁夜夜躁欧美| 国产精品久久免费看| 成人av在线电影| 天天综合色天天| 亚洲影院理伦片| 国产乱妇无码大片在线观看| 欧美性猛交一区二区三区精品| 最新不卡av在线| 色噜噜狠狠一区二区三区果冻| 亚洲黄一区二区三区| 免费观看一级特黄欧美大片| av中文字幕一区| 日韩一区中文字幕| 欧洲精品一区二区三区在线观看| 香蕉成人啪国产精品视频综合网 | 99re热这里只有精品视频| 一区二区在线电影| 欧美一区二区性放荡片| 国产专区综合网| 亚洲日本va午夜在线电影| 欧美日韩在线精品一区二区三区激情| 欧美aa在线视频| 国产精品人成在线观看免费| 国产精品久久久久久妇女6080| 午夜不卡av在线| 日韩精品专区在线影院重磅| 亚洲黄色av一区| 7777女厕盗摄久久久| 精品国产污网站| 国内精品写真在线观看| 国产精品电影一区二区| 欧美三级电影网站| 国产精品综合二区| 三级久久三级久久久| 中文字幕 久热精品 视频在线| 激情亚洲综合在线| 亚洲精品欧美激情| 精品国产乱码久久久久久影片| 99re这里只有精品6| 激情偷乱视频一区二区三区| 一区二区三区丝袜| 欧美极品aⅴ影院| 日韩免费高清视频| 欧美日韩mp4| 色婷婷久久99综合精品jk白丝| 激情图区综合网| 极品少妇一区二区| 国产午夜精品久久| 国内精品自线一区二区三区视频| 免费成人在线网站| 亚洲精品国产精华液| 久久精品夜色噜噜亚洲a∨| 欧美日韩在线综合| 色综合久久88色综合天天免费| 国产丶欧美丶日本不卡视频| 日韩欧美色电影| 欧美午夜精品久久久久久孕妇| 成人免费视频视频在线观看免费| 韩国中文字幕2020精品| 日韩精品国产精品| 午夜精品国产更新| 亚洲综合成人在线视频| 亚洲丝袜制服诱惑| 国产精品污www在线观看| 精品国产髙清在线看国产毛片| 91精品国产欧美日韩| 欧美日本国产视频| 欧美一a一片一级一片| 91国产免费观看| 欧美日韩国产在线观看| 欧美日韩激情一区二区三区| 欧美丰满一区二区免费视频| 美美哒免费高清在线观看视频一区二区 | 有码一区二区三区| 亚洲精品欧美在线| 亚洲福利视频一区二区| 亚洲国产精品久久久久秋霞影院| 亚洲综合一区二区| 亚洲国产精品影院| 日韩高清欧美激情| 国产一区二区三区久久久| 国内精品视频一区二区三区八戒| 国产一区二区调教| 国产成人免费视| 成人av电影在线播放| 91黄色免费版| 日韩欧美一级片| 久久综合中文字幕| 中文字幕一区二区日韩精品绯色| 亚洲特黄一级片| 视频一区二区中文字幕| 免费看日韩精品| 成人免费视频视频在线观看免费| 91久久人澡人人添人人爽欧美 | 精品国产乱码久久久久久久| 国产欧美一二三区| 亚洲第一搞黄网站| 久久国产夜色精品鲁鲁99| 成人激情小说乱人伦| 欧美性猛交xxxx黑人交| 欧美刺激脚交jootjob| 日本一区二区在线不卡| 亚洲综合丁香婷婷六月香| 国产一区二区视频在线| 日本黄色一区二区| 精品国产精品网麻豆系列| 亚洲乱码精品一二三四区日韩在线| 日韩黄色免费电影| 成人一区二区三区在线观看| 欧美日本国产一区| 日韩码欧中文字| 韩日精品视频一区| 欧美日韩久久久一区| 欧美激情综合在线|