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

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

?? ss_strm.c

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


/********************************************************************20**

     Name:     System Services -- STREAMS

     Type:     C source file

     Desc:     Implementation of STREAMS messaging functions.

     File:     ss_strm.c

     Sid:      ss_strm.c 1.3  -  10/14/98 14:21:37

     Prg:      kp

*********************************************************************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 */



/* private variable declarations */

PRIVATE struct
{
    Region mdRegion;     /* region for message and data blocks */
    Region datRegion;    /* region for data buffers */
} strmCfg;




/*
*     Interface functions (System Services--non-STREAMS interface)
*/


/*
*
*       Fun:   ssStrmCfg
*
*       Desc:  Configures the STREAMS system.
*
*       Ret:   ROK      - ok
*
*       Notes:
*
*       File:  ss_strm.c
*
*/
#ifdef ANSI
PUBLIC S16 ssStrmCfg
(
Region mdRegId,                 /* region for message and data blocks */
Region datRegId                 /* region for data buffers */
)
#else
PUBLIC S16 ssStrmCfg(mdRegId, datRegId)
Region mdRegId;                 /* region for message and data blocks */
Region datRegId;                /* region for data buffers */
#endif
{
    TRC1(ssStrmCfg);


    strmCfg.mdRegion = mdRegId;
    strmCfg.datRegion = datRegId;


    RETVALUE(ROK);
}


/*
*     STREAMS interface functions
*
*       All these assume that ssStrmCfg() has been called first, with
*       valid parameters.
*/


/*
*
*       Fun:   ssAdjMsg
*
*       Desc:  Trim abs(len) bytes from a message. If len is less than
*              0, trim from the tail, otherwise from the head. Operates
*              only on blocks of the same type. Does not remove emptied
*              message blocks.
*
*
*       Ret:   1        - ok
*              0        - failure
*
*       Notes:
*
*       File:  ss_strm.c
*
*/
#ifdef ANSI
PUBLIC S32 ssAdjMsg
(
SsMblk *mp,                     /* message */
S32 len                         /* bytes to remove */
)
#else
PUBLIC S32 ssAdjMsg(mp, len)
SsMblk *mp;                     /* message */
S32 len;                        /* bytes to remove */
#endif
{
    S32 n;                       /* counter */
    S32 size;                    /* size of mblks of same type as head/tail */
    U8 type;                     /* message type */
    SsMblk *bp;                  /* mblk for iteration */
    SsMblk *first;               /* first mblk to be adjusted */


    TRC1(ssAdjMsg);


#if (ERRCLASS & ERRCLS_INT_PAR)
    if (mp == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS428, ERRZERO, "Null pointer");
        RETVALUE(0);
    }
#endif


    if (len == 0)                /* nothing to do */
    {
        RETVALUE(1);
    }


    if (len > 0)                 /* trim from the head */
    {
        /* figure out the size of all blocks of the same type as the head */
        bp = mp;
        size = 0;
        type = bp->b_datap->db_type;
        while (bp  &&  bp->b_datap->db_type == type)
        {
            n = bp->b_wptr - bp->b_rptr;
            if (n > 0)
            {
                size += n;
            }

            bp = bp->b_cont;
        }


        /* if we can't trim len bytes, fail */
        if (len > size)
        {
            RETVALUE(0);
        }


        /* do the trimming */
        bp = mp;
        for (; ;)
        {
            n = bp->b_wptr - bp->b_rptr;

            if (n >= len)
            {
                bp->b_rptr += len;
                break;
            } else if (n > 0)
            {
                bp->b_rptr += len;
                len -= n;
            }

            bp = bp->b_cont;
        }
    } else                         /* trim from the tail */
    {
        /* figure out the size of all blocks of the same type as the tail */
        bp = mp;
        first = bp;
        size = 0;
        type = bp->b_datap->db_type;
        while (bp)
        {
            if (bp->b_datap->db_type == type)
            {
                n = bp->b_wptr - bp->b_rptr;
                if (n > 0)
                {
                    size += n;
                }
            } else
            {
                type = bp->b_datap->db_type;
                first = bp;
                size = 0;
            }

            bp = bp->b_cont;
        }


        /* if we can't trim len bytes, fail */
        size += len;
        if (size < 0)
        {
            RETVALUE(0);
        }


        /* do the trimming */
        while (first)
        {
            n = first->b_wptr - first->b_rptr;

            if (size <= 0)
            {
                first->b_rptr = first->b_wptr;
            } else if (n > 0)
            {
                if (n > size)
                {
                    first->b_wptr = first->b_rptr + size;
                }

                size -= n;
            }

            first = first->b_cont;
        }
    }


    RETVALUE(1);
} /* ssAdjMsg */


/*
*
*       Fun:   ssAllocB
*
*       Desc:  Returns a pointer to a message block of type M_DATA
*              in which the data buffer is of at least the specified
*              size.
*
*
*       Ret:   non-NULL - success
*              NULL     - failure
*
*       Notes: The parameter pri is unused.
*
*       File:  ss_strm.c
*
*/
#ifdef ANSI
PUBLIC SsMblk *ssAllocB
(
S32 size,                       /* required size */
U32 pri                         /* message priority */
)
#else
PUBLIC SsMblk *ssAllocB(size, pri)
S32 size;                       /* required size */
U32 pri;                        /* message priority */
#endif
{
    SsMblk *bp;                  /* mblk for iteration */
    Data *dat;                   /* pointer to data buffer */
    Size m;                      /* temporary */
    Size n;                      /* temporary */
    S16 r;                       /* return value */


    TRC1(ssAllocB);


    UNUSED(pri);


    /* allocate a single block for the mblock and the dblock */
    m = (sizeof(SsMblk) + sizeof(SsDblk));
    r = SAlloc(strmCfg.mdRegion, &m, 0, (Data **)&bp);
    if (r != ROK)
    {
#if (ERRCLASS & ERRCLS_ADD_RES)
        SSLOGERROR(ERRCLS_ADD_RES, ESS429, (ErrVal) r, "SAlloc() failed");
#endif

        RETVALUE(NULLP);
    }


    /* allocate space for the data block */
    if (size > 0)
    {
        n = size;
        r = SAlloc(strmCfg.datRegion, &n, 0, &dat);
        if (r != ROK)
        {
#if (ERRCLASS & ERRCLS_ADD_RES)
            SSLOGERROR(ERRCLS_ADD_RES, ESS430, (ErrVal) r, "SAlloc() failed");
#endif

            SFree(strmCfg.mdRegion, (Data *)bp, m);
            RETVALUE(NULLP);
        }
    }
    /* we _can_ allocate a message with an empty data block */
    else
    {
        dat = NULLP;
    }

    /* generic set-up-message function */
    SS_STRM_INITB(bp, (SsDblk *)(((U8 *)bp) + sizeof(SsMblk)), dat, size, NULLP);


    RETVALUE(bp);
} /* ssAllocB */


/*
*
*       Fun:   ssCopyB
*
*       Desc:  Copies the contents of the specified message block
*              into a newly-allocated message block of at least
*              the same size. Calls ssAllocB().
*
*       Ret:   non-NULL - ok
*              NULL     - failure
*
*       Notes:
*
*       File:  ss_strm.c
*
*/
#ifdef ANSI
PUBLIC SsMblk *ssCopyB
(
SsMblk *mp                      /* message block */
)
#else
PUBLIC SsMblk *ssCopyB(mp)
SsMblk *mp;                     /* message block */
#endif
{
    SsMblk *bp;                  /* mblk for iteration */
    U8 *ptr;                     /* pointer to data */
    U32 size;                    /* size of data content */


    TRC1(ssCopyB);


#if (ERRCLASS & ERRCLS_INT_PAR)
    if (mp == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS431, ERRZERO, "Null pointer");
        RETVALUE(NULLP);
    }
#endif


    /* allocate another message */
    bp = ssAllocB((mp->b_datap->db_lim - mp->b_datap->db_base), 0);
    if (bp == NULLP)
    {
#if (ERRCLASS & ERRCLS_ADD_RES)
        SSLOGERROR(ERRCLS_ADD_RES, ESS432, ERRZERO, "ssAllocB() failed");
#endif

        RETVALUE(NULLP);
    }


    /* copy the contents, if any */
    size = (mp->b_wptr - mp->b_rptr);
    if (size > 0)
    {
        ptr = mp->b_rptr;
        while (ptr != mp->b_wptr)
        {
            *bp->b_wptr++ = *ptr++;
        }
    }


    RETVALUE(bp);
} /* ssCopyB */


/*
*
*       Fun:   ssCopyMsg
*
*       Desc:  Uses ssCopyB to copy the message blocks contained in
*              the specified message to newly allocated blocks and
*              links those blocks into a new message.
*
*       Ret:   non-NULL - ok
*              NULL     - failure
*
*       Notes:
*
*       File:  ss_strm.c
*
*/
#ifdef ANSI
PUBLIC SsMblk *ssCopyMsg
(
SsMblk *mp                      /* message block */
)
#else
PUBLIC SsMblk *ssCopyMsg(mp)
SsMblk *mp;                     /* message block */
#endif
{
    SsMblk *first;               /* first mblk in message */
    SsMblk *bp;                  /* mblk for iteration */


    TRC1(ssCopyMsg);


#if (ERRCLASS & ERRCLS_INT_PAR)
    if (mp == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS433, ERRZERO, "Null pointer");
        RETVALUE(NULLP);
    }
#endif


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品成人综合| 亚洲v精品v日韩v欧美v专区| 中文字幕在线不卡一区| 欧美电影免费观看高清完整版在| 色婷婷综合久久久久中文一区二区| 日本道色综合久久| 91精品在线免费观看| 久久久99免费| 亚洲激情图片qvod| 国产中文字幕精品| 色综合婷婷久久| 欧美成人在线直播| 亚洲欧美成aⅴ人在线观看 | 欧美日韩一区在线观看| 日韩亚洲欧美综合| 亚洲国产精华液网站w| 午夜一区二区三区视频| 国产不卡免费视频| 91精品在线观看入口| 日韩三级高清在线| 精品88久久久久88久久久| 亚洲综合丝袜美腿| 成人网在线播放| 日韩一二三区不卡| 一区二区三区中文字幕精品精品| 久久国产人妖系列| 欧美无砖专区一中文字| 久久精品综合网| 秋霞电影一区二区| 91啦中文在线观看| 久久久综合激的五月天| 免费高清在线视频一区·| 色综合天天综合狠狠| 久久亚洲一级片| 亚洲人成网站精品片在线观看| 婷婷丁香久久五月婷婷| 99视频有精品| 国产精品午夜在线| 国产自产高清不卡| 精品日产卡一卡二卡麻豆| 亚洲第一狼人社区| 欧美亚洲另类激情小说| 自拍偷拍国产亚洲| 99久久婷婷国产综合精品 | 久久精品亚洲精品国产欧美kt∨| 国产精品的网站| 国产sm精品调教视频网站| 久久综合九色综合欧美就去吻 | 亚洲制服欧美中文字幕中文字幕| 成人小视频在线| 国产女同互慰高潮91漫画| 精品无码三级在线观看视频| 欧美一级艳片视频免费观看| 亚洲成av人片在线观看无码| 在线观看av不卡| 一区二区三区欧美视频| 国产一区999| 国产日韩欧美高清在线| 福利一区二区在线| 亚洲国产精品成人综合| 不卡的av在线播放| 亚洲免费在线播放| 日本精品免费观看高清观看| 亚洲在线免费播放| 欧美日韩专区在线| 日本美女视频一区二区| 日韩一级高清毛片| 久草中文综合在线| 久久九九影视网| 91网址在线看| 亚洲综合视频在线| 日韩亚洲欧美高清| 久久激情五月激情| 欧美精彩视频一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 成人欧美一区二区三区视频网页| 色av成人天堂桃色av| 亚洲成av人片一区二区梦乃| 日韩免费视频一区| 成人毛片视频在线观看| 亚洲一区二区在线观看视频| 欧美日韩成人综合在线一区二区 | 91精品国产aⅴ一区二区| 亚洲午夜激情网页| 欧美精品一区在线观看| 91亚洲精品一区二区乱码| 亚洲国产综合色| 2021国产精品久久精品| 99久久精品国产麻豆演员表| 日韩精品福利网| 国产欧美一区二区精品忘忧草| 在线精品观看国产| 国产在线观看免费一区| 一区二区欧美在线观看| 91精品国产手机| 国产一区二区三区久久悠悠色av| 亚洲免费成人av| 亚洲精品在线三区| 91高清视频免费看| 国产精品综合在线视频| 夜夜爽夜夜爽精品视频| 久久色成人在线| 欧美午夜一区二区| 丰满亚洲少妇av| 蜜臀91精品一区二区三区| 国产欧美日韩在线| 欧美放荡的少妇| 国产99精品国产| 亚洲午夜国产一区99re久久| 中文字幕国产一区| 欧美tickling网站挠脚心| 色狠狠一区二区| 国产激情一区二区三区桃花岛亚洲| 午夜激情一区二区| 亚洲最新视频在线观看| 国产日韩成人精品| 欧美成人video| 欧美日韩国产高清一区二区三区| 欧美色爱综合网| jvid福利写真一区二区三区| 亚洲成人一区二区| 亚洲欧美另类在线| 欧美国产精品中文字幕| 精品国产乱码久久久久久影片| 欧美日本韩国一区二区三区视频| 一本一道久久a久久精品综合蜜臀| 国产成人免费视频| 国产在线不卡一区| 麻豆一区二区在线| 美女网站色91| 久久成人免费网站| 亚洲午夜精品网| 国产喷白浆一区二区三区| 久久久一区二区| 久久女同精品一区二区| 久久久欧美精品sm网站| 久久综合色8888| 久久久久九九视频| 久久综合久久综合九色| 久久久久久**毛片大全| 国产人伦精品一区二区| 国产日韩欧美精品电影三级在线| 久久精品免视看| 国产精品乱码妇女bbbb| 国产精品视频一二三区| 欧美激情综合五月色丁香小说| 久久久www成人免费毛片麻豆 | 日韩专区中文字幕一区二区| 亚洲国产成人porn| 日韩avvvv在线播放| 日本欧美久久久久免费播放网| 天堂成人国产精品一区| 99久久久无码国产精品| 91麻豆成人久久精品二区三区| 色综合久久综合网| 国产成人免费视频网站| 成人18视频日本| 欧美亚洲一区二区在线观看| 欧美色精品在线视频| 欧美一个色资源| 久久久久久久久99精品| 1000精品久久久久久久久| 亚洲精品五月天| 国内成人精品2018免费看| 成人aaaa免费全部观看| 精品久久久久一区二区国产| 亚洲精品国产成人久久av盗摄| 久久国产精品色| 91久久国产综合久久| 26uuu亚洲| 亚洲成人动漫一区| 99精品久久免费看蜜臀剧情介绍| 日韩三级视频在线看| 又紧又大又爽精品一区二区| 国产盗摄一区二区| 欧美一级欧美三级| 亚洲午夜电影网| 成人免费高清在线| 久久综合色天天久久综合图片| 亚洲成人激情社区| 色猫猫国产区一区二在线视频| 国产三级一区二区| 日韩精品五月天| 欧美视频一二三区| 亚洲色图欧洲色图婷婷| 精品中文av资源站在线观看| 欧美久久久久久蜜桃| 亚洲伊人伊色伊影伊综合网| www.爱久久.com| 欧美高清在线一区| 国产精品18久久久久久久久| 精品日韩一区二区| 蓝色福利精品导航| 日韩欧美成人激情| 老司机精品视频线观看86| 91精品国产高清一区二区三区| 亚洲bt欧美bt精品| 91精品国产一区二区| 青青草国产成人99久久| 日韩欧美成人激情|