亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
成人精品鲁一区一区二区| 国产原创一区二区三区| 欧美一区二区三区四区久久| 日本va欧美va精品| 国产精品污网站| 欧美日韩国产色站一区二区三区| 免费高清不卡av| 亚洲午夜影视影院在线观看| 日韩视频免费观看高清完整版在线观看| 欧美aaaaaa午夜精品| 国产精品久久久久久户外露出| 欧美四级电影在线观看| 国产电影精品久久禁18| 亚洲国产成人精品视频| 中文av一区二区| 精品福利一区二区三区免费视频| 99国产精品视频免费观看| 另类欧美日韩国产在线| 亚洲国产成人av| 亚洲综合视频在线观看| 国产欧美日本一区二区三区| 欧美日韩国产高清一区二区三区 | 国产一区二区三区久久久| 一区二区免费看| 亚洲免费大片在线观看| 亚洲老司机在线| 亚洲综合av网| 亚洲午夜免费福利视频| 一区二区三区四区在线免费观看| 国产欧美日韩另类视频免费观看| 国产亚洲综合在线| 亚洲视频网在线直播| 亚洲人xxxx| 午夜视频一区二区三区| 日韩制服丝袜先锋影音| 激情国产一区二区| 成人激情午夜影院| 欧美日韩一二三| 久久久美女艺术照精彩视频福利播放| 欧美一卡在线观看| 亚洲一区二区成人在线观看| 日韩va欧美va亚洲va久久| 国产剧情一区二区| 欧美在线视频你懂得| 国产性天天综合网| 午夜欧美视频在线观看| 捆绑调教美女网站视频一区| 不卡av免费在线观看| 在线视频亚洲一区| 欧美日韩国产综合一区二区| 久久久午夜精品| 一区二区免费视频| 成人app在线| 精品国产凹凸成av人导航| 尤物视频一区二区| 精品午夜久久福利影院| 在线精品视频免费观看| 国产欧美精品一区| 国产一区二三区| 欧美精选在线播放| 午夜成人在线视频| 欧美色视频一区| 一区二区国产盗摄色噜噜| 日韩一级片网站| 日韩视频一区二区在线观看| 国产米奇在线777精品观看| 欧美日韩一二三| 久久久久久黄色| 911精品国产一区二区在线| 国产电影一区在线| 天堂久久一区二区三区| 中文字幕亚洲区| 国产丝袜美腿一区二区三区| 欧美日韩五月天| 91免费在线播放| 国产成人av网站| 亚洲欧洲精品一区二区精品久久久| 日产精品久久久久久久性色| 欧美日韩一区二区三区在线看 | 一区二区在线观看免费| 美女任你摸久久| 欧美韩日一区二区三区| 色婷婷亚洲精品| 欧美一区二区三区视频在线| 日韩一区欧美二区| 精品国产91亚洲一区二区三区婷婷| 男男成人高潮片免费网站| 久久综合九色综合欧美就去吻 | 久久精品国产精品亚洲综合| 久久久久九九视频| 91丨九色porny丨蝌蚪| 亚洲国产精品自拍| 国产日韩高清在线| 欧美影院精品一区| 久久国产精品99精品国产| 亚洲视频免费在线| 精品国产91亚洲一区二区三区婷婷 | 久久久精品国产免大香伊| 色噜噜狠狠成人网p站| 韩国毛片一区二区三区| 亚洲欧美国产毛片在线| 欧美一级专区免费大片| 96av麻豆蜜桃一区二区| 另类的小说在线视频另类成人小视频在线 | 91福利资源站| 国产成人av一区二区| 成人av午夜影院| 色综合天天综合色综合av | 88在线观看91蜜桃国自产| 欧美特级限制片免费在线观看| 91视频com| 欧美日韩大陆一区二区| 日本道色综合久久| 欧美三级电影网| 久久先锋影音av鲁色资源| 久久久久国产精品厨房| 亚洲视频 欧洲视频| 亚洲高清视频中文字幕| 精品一区免费av| 99re在线精品| 久久久久久久久伊人| 亚洲视频 欧洲视频| 青青青爽久久午夜综合久久午夜| 麻豆精品久久久| 在线看不卡av| 国产亚洲欧美激情| 亚洲五月六月丁香激情| 国产成人啪午夜精品网站男同| 色婷婷一区二区| 国产亚洲欧美日韩在线一区| 亚洲一区欧美一区| 成人ar影院免费观看视频| 欧美一区二区三区人| 亚洲视频免费在线观看| 国产麻豆精品theporn| 在线观看日韩电影| 国产精品国产成人国产三级| 麻豆精品在线看| 欧美人xxxx| 日韩不卡一区二区| 91尤物视频在线观看| 久久久av毛片精品| 欧美aⅴ一区二区三区视频| 欧美一区日本一区韩国一区| 亚洲九九爱视频| 色呦呦日韩精品| 日日夜夜精品视频免费| 日日嗨av一区二区三区四区| 粉嫩在线一区二区三区视频| 国产精品久久久久四虎| 色婷婷亚洲一区二区三区| 婷婷综合久久一区二区三区| 久久久青草青青国产亚洲免观| 成人天堂资源www在线| 亚洲电影一级黄| 欧美国产1区2区| 欧美一区二区在线播放| 国产 欧美在线| 日韩国产欧美三级| 欧美激情一区二区三区全黄| 欧美日韩一区二区在线视频| 麻豆久久久久久久| 亚洲亚洲人成综合网络| 精品sm在线观看| 欧美日韩一级片网站| 国产原创一区二区| 蜜臀av性久久久久蜜臀av麻豆| 国产精品电影一区二区| 欧美另类久久久品| 国产米奇在线777精品观看| 亚洲欧洲在线观看av| 91精选在线观看| 风间由美性色一区二区三区| 亚洲午夜一区二区| 欧美激情中文不卡| 精品久久久久久久一区二区蜜臀| 国产成人久久精品77777最新版本| 亚洲人精品午夜| 国产色综合久久| 欧美大片在线观看一区二区| 成人av在线影院| 高清成人在线观看| 免费成人av资源网| 日本在线不卡视频| 日韩美女啊v在线免费观看| 日韩一区二区视频在线观看| 色综合久久66| 色噜噜久久综合| www.成人网.com| 高清不卡一二三区| 国内一区二区在线| 国产不卡一区视频| 国产成人鲁色资源国产91色综| 国产一区日韩二区欧美三区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品久久久久精k8| 国产欧美在线观看一区| 337p粉嫩大胆噜噜噜噜噜91av| 日韩精品一区二区三区在线观看 | 亚洲视频你懂的|