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

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

?? distnamelib.c

?? vxworks操作系統的源代碼 供研究學習
?? C
?? 第 1 頁 / 共 4 頁
字號:
* NOTE: Before calling distNameLclAddRaw(), nameLen and valueLen* must been tested to prevent overflows.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: Pointer to added node, or NULL.** NOMANUAL*/LOCAL DIST_NAME_DB_NODE * distNameLclAddRaw    (    char *          name,       /* name to enter in database */    int             nameLen,    /* length of name in bytes */    void *          value,      /* value associated with name */    int             valueLen,   /* size of value in bytes */    DIST_NAME_TYPE  type        /* type associated with name */    )    {    DIST_NAME_DB_NODE * pDbNode;    DIST_NAME_DB_NODE * pDbNodeOld;    DIST_OBJ_NODE *     pObjNode;    char *              nameDest;    char *              valDest;#ifdef DIST_NAME_REPORT    printf ("distNameLclAddRaw: type %d, value: ", type);    distDump (value, valueLen);#endif    /*  Get a free database node. */    if (! (pDbNode = (DIST_NAME_DB_NODE *) sllGet (&distNameFreeList)))        return (NULL);  /* database is full */    nameDest = (char *) &pDbNode->symName;    bcopy (name, nameDest, nameLen);    *(nameDest + nameLen) = 0;    distNameLclLock();    /* Try to find symbolic name in database. */    pDbNodeOld = (DIST_NAME_DB_NODE *) hashTblFind (distNameDbId,            (HASH_NODE *) pDbNode, KEY_CMP_ARG);    if (pDbNodeOld)        {        /* Symbolic name is alreay in database. Update the node. */        sllPutAtHead (&distNameFreeList, (SL_NODE *) pDbNode);        pDbNode = pDbNodeOld;        if (type == T_DIST_MSG_Q)            {            /* New object is a distributed message queue. */            MSG_Q_ID        msgQId;            if (pDbNode->type == T_DIST_MSG_Q)                {                /* Old object is also a distributed message queue. */                msgQId = *((MSG_Q_ID *) &pDbNode->value);                pObjNode = MSG_Q_ID_TO_DIST_OBJ_NODE (msgQId);                }            else                {                /* Old object was *NOT* a distributed message queue. */                pObjNode = distObjNodeGet();                pObjNode->objNodeType = DIST_OBJ_TYPE_MSG_Q;                pDbNode->value.msgQId = DIST_OBJ_NODE_TO_MSG_Q_ID (pObjNode);                }            valDest = (char *) &(pObjNode->objNodeUniqId);            }        else            valDest = (char *) &pDbNode->value;        }    else        {        /* Symbolic name is *NOT* in the database. */        if (type == T_DIST_MSG_Q)            {            pObjNode = distObjNodeGet();            pObjNode->objNodeType = DIST_OBJ_TYPE_MSG_Q;            pDbNode->value.msgQId = DIST_OBJ_NODE_TO_MSG_Q_ID (pObjNode);            valDest = (char *) &(pObjNode->objNodeUniqId);            }        else            valDest = (char *) &pDbNode->value;        }    pDbNode->type = type;    pDbNode->valueLen = valueLen;    bcopy (value, valDest, valueLen);    if (!pDbNodeOld)        hashTblPut (distNameDbId, (HASH_NODE *) pDbNode);    distNameLclUnlock();    /* signal a database update to waiting tasks */    distNameLclSigAdd();    return (pDbNode);    }/***************************************************************************** distNameLclRemove - remove an object from the distributed database (VxFusion option)** This routines removes a name from the local name database.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, or ERROR if name could not be removed.** NOMANUAL*/LOCAL STATUS distNameLclRemove    (    char *  name,            /* name of object to remove */    int     nameLen          /* length of name without EOS */    )    {    DIST_NAME_DB_NODE *  pNode;    DIST_NAME_DB_NODE    matchNode;    bcopy (name, (char *) &matchNode.symName, nameLen);    *(((char *) &matchNode.symName) + nameLen) = '\0';    distNameLclLock();    pNode = (DIST_NAME_DB_NODE *) hashTblFind (distNameDbId,            (HASH_NODE *) &matchNode, KEY_CMP_ARG);    if (!pNode || hashTblRemove(distNameDbId, (HASH_NODE *) pNode) == ERROR)        {        distNameLclUnlock();        return (ERROR);        }    sllPutAtHead (&distNameFreeList, (SL_NODE *) pNode); /* return node */    distNameLclUnlock();    return (OK);    }/***************************************************************************** distNameHCmp - compare keys based on strings (VxFusion option)** This is the hash compare function for names in the database.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: TRUE, if the names of the DB nodes are the same.** NOMANUAL*/LOCAL BOOL distNameHCmp    (    DIST_NAME_DB_NODE * pMatchHNode,   /* first node */    DIST_NAME_DB_NODE * pHNode,        /* second node */    int                 keyCmpArg      /* not used */    )    {        UNUSED_ARG(keyCmpArg);    if (strcmp ((char *)&pMatchHNode->symName, (char *)&pHNode->symName) == 0)        return (TRUE);    else        return (FALSE);    }/***************************************************************************** distNameHFunc - hashing function for strings (VxFusion option)** This is the hashing function for database object names.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: A hash index.** NOMANUAL*/LOCAL int distNameHFunc    (    int                 elements,   /* size of hash table */    DIST_NAME_DB_NODE * pHNode,     /* node whose name to hash */    int                 seed        /* hash seed */    )    {    char *tkey;    int  hash = 0;    /* Compute string signature (sparse 32-bit hash value) */    for (tkey = (char *) &pHNode->symName; *tkey != '\0'; tkey++)        hash = hash * seed + (unsigned int) *tkey;    return (hash & (elements - 1));    /* mask hash to (0, elements - 1) */    }/***************************************************************************** distNameEach - each functionality on name database (VxFusion option)** Successively visits every node in the database and invokes <routine>,* passing it argument <routineArg>.** NOTE: Takes <distNameDbLock>.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: Pointer to last node visited.** NOMANUAL*/DIST_NAME_DB_NODE * distNameEach    (    FUNCPTR    routine,         /* routine to invoke */    int        routineArg       /* argument for routine */    )    {    DIST_NAME_DB_NODE * lastNode;    distNameLclLock();    lastNode = (DIST_NAME_DB_NODE *) hashTblEach (distNameDbId, routine,                                                  routineArg);    distNameLclUnlock();    return (lastNode);    }/***************************************************************************** distHton64 - convert a 64 bit value from host to network byte order (VxFusion option)** This routine converts T_DIST_UINT64 and T_DIST_DOUBLE* values from host to network* byte order.  The value is converted in place.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: <hostValue>** NOMANUAL*/LOCAL uint32_t * distHton64    (    uint32_t *     hostValue,   /* ptr to value to convert */    DIST_NAME_TYPE type         /* T_DIST_UINT64 or T_DIST_DOUBLE */    )    {#if _BYTE_ORDER==_LITTLE_ENDIAN    uint32_t tmp;#endif#if !XFLOAT    UNUSED_ARG(type);#endif#ifndef _BYTE_ORDER#   error "no byte order specified !!"#endif#if _BYTE_ORDER==_LITTLE_ENDIAN# if XFLOAT     /* ARM little-endian with double cross */    if (type == T_DIST_DOUBLE)        {        hostValue[0] = htonl(hostValue[0]);        hostValue[1] = htonl(hostValue[1]);        }    else        {        tmp = hostValue[0];        hostValue[0] = htonl (hostValue[1]);        hostValue[1] = htonl (tmp);        }# else           /* non-ARM little-endian */    tmp = hostValue[0];    hostValue[0] = htonl (hostValue[1]);    hostValue[1] = htonl (tmp);# endif /* XFLOAT */#endif /* _BYTE_ORDER test */    return hostValue;    }/***************************************************************************** distNtoh64 - convert a 64 bit value from network to host byte order (VxFusion option)** This routine converts T_DIST_UINT64 and T_DIST_DOUBLE values from* network to host byte order.  The value is converted in place.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: <networkValue>** NOMANUAL*/LOCAL uint32_t * distNtoh64    (    uint32_t *     networkValue,   /* ptr to value to convert */    DIST_NAME_TYPE type            /* T_DIST_UINT64 or T_DIST_DOUBLE */    )    {#if _BYTE_ORDER==_LITTLE_ENDIAN    uint32_t tmp;#endif#if !XFLOAT    UNUSED_ARG(type);#endif#ifndef _BYTE_ORDER#   error "no byte order specified !!"#endif#if _BYTE_ORDER==_LITTLE_ENDIAN    # if XFLOAT    if (type == T_DIST_DOUBLE)        {        networkValue[0] = ntohl (networkValue[0]);        networkValue[1] = ntohl (networkValue[1]);        }    else        {        tmp=networkValue[0];        networkValue[0] = ntohl (networkValue[1]);        networkValue[1] = ntohl (tmp);        }# else    tmp=networkValue[0];    networkValue[0] = ntohl (networkValue[1]);    networkValue[1] = ntohl (tmp);# endif /* XFLOAT */#endif /* _BYTE_ORDER test */    return networkValue;    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美成aⅴ人在线观看| 青青青爽久久午夜综合久久午夜| 亚洲综合男人的天堂| 麻豆国产欧美日韩综合精品二区 | 亚洲国产精品激情在线观看| 亚洲欧美日韩国产另类专区| 久久精品国产免费看久久精品| 91偷拍与自偷拍精品| 亚洲精品一区二区三区影院| 亚洲小说春色综合另类电影| 不卡的av在线| 欧美激情一区二区三区在线| 麻豆精品一区二区| 欧美日韩精品是欧美日韩精品| 中文字幕乱码久久午夜不卡| 免费人成网站在线观看欧美高清| 色妞www精品视频| 久久久久久麻豆| 毛片av一区二区| 欧美日韩一区在线| 亚洲视频图片小说| 成人黄色免费短视频| 国产亚洲欧美激情| 国产在线一区观看| 精品sm捆绑视频| 久久av老司机精品网站导航| 精品视频1区2区| 亚洲一区二区三区四区在线免费观看 | caoporm超碰国产精品| 欧美精品一区二区高清在线观看| 美国三级日本三级久久99| 欧美精品色一区二区三区| 亚洲一区二区三区四区五区黄 | 欧美成人一区二区三区在线观看| 午夜欧美一区二区三区在线播放| 色婷婷亚洲综合| 亚洲国产欧美另类丝袜| 欧美在线免费观看亚洲| 一区二区三区电影在线播| 欧美性猛交xxxxxxxx| 婷婷综合在线观看| 欧美女孩性生活视频| 日本亚洲免费观看| 精品福利一区二区三区免费视频| 韩日av一区二区| 中文字幕乱码一区二区免费| 97se亚洲国产综合自在线| 亚洲一区二区三区四区在线免费观看 | 日韩福利电影在线观看| 精品国产乱码久久| 北条麻妃国产九九精品视频| 亚洲精品中文在线| 91精品国产综合久久精品性色| 男人的天堂久久精品| 久久精品日产第一区二区三区高清版| 丁香一区二区三区| 亚洲一区在线观看免费观看电影高清| 欧美日韩黄色一区二区| 久久精工是国产品牌吗| 国产精品久久久久久久久动漫| 色94色欧美sute亚洲线路一久 | 日韩精品一区在线| 国产精一区二区三区| 亚洲日穴在线视频| 欧美精品在线观看一区二区| 国产在线视频一区二区三区| 综合激情成人伊人| 日韩欧美一区二区不卡| 成人美女视频在线观看| 日韩中文字幕一区二区三区| 国产亚洲综合在线| 7777精品久久久大香线蕉| 国产精品88av| 石原莉奈在线亚洲二区| 国产精品久久久久久久岛一牛影视| 欧美在线免费观看视频| 成人小视频免费观看| 日韩电影在线一区二区| 国产精品成人免费精品自在线观看| 欧美日产在线观看| 97se亚洲国产综合自在线观| 国产一区二区三区观看| 亚洲制服丝袜在线| 欧美性做爰猛烈叫床潮| 国产·精品毛片| 美女www一区二区| 一区二区三区中文免费| 国产日产精品1区| 日韩女优av电影| 欧美三区免费完整视频在线观看| 国产精品综合二区| 看片网站欧美日韩| 无吗不卡中文字幕| 亚洲精品va在线观看| 国产精品电影院| 国产欧美va欧美不卡在线| 欧美一区二区三区视频在线 | 亚洲电影中文字幕在线观看| 国产精品伦理一区二区| 久久综合国产精品| 日韩欧美另类在线| 欧美一级免费观看| 在线观看91av| 欧美丰满美乳xxx高潮www| 色香蕉成人二区免费| www.亚洲免费av| 成人综合在线观看| 国产一区二区导航在线播放| 伦理电影国产精品| 久久国产三级精品| 久久99精品久久久久久久久久久久 | 国产偷国产偷精品高清尤物| 26uuu另类欧美| 久久久久久97三级| 国产欧美视频一区二区| 欧美韩国日本一区| 国产精品护士白丝一区av| 国产精品久久久久四虎| 国产精品国产三级国产aⅴ原创| 中文字幕国产一区二区| 中文一区二区完整视频在线观看| 久久久亚洲综合| 国产精品的网站| 一区二区三区蜜桃| 日本中文字幕一区二区有限公司| 日韩一区欧美二区| 久久精工是国产品牌吗| 国产成人av一区| 99久久免费视频.com| 欧美亚洲一区二区在线观看| 欧美日韩国产中文| 欧美成人一区二区三区在线观看| 2023国产一二三区日本精品2022| 国产欧美一区二区精品性| 中文字幕一区三区| 亚洲高清视频的网址| 美女脱光内衣内裤视频久久网站| 麻豆成人免费电影| 99久久免费精品| 欧美一区二区三区在线观看| 国产欧美日韩亚州综合| 夜夜嗨av一区二区三区网页| 久久国产精品色| 99九九99九九九视频精品| 这里只有精品免费| 中文字幕一区三区| 美女在线一区二区| 色综合中文字幕国产| 欧洲精品在线观看| 久久亚洲综合av| 一区二区三区资源| 国产在线不卡视频| 欧美亚洲国产怡红院影院| 精品福利av导航| 亚洲电影欧美电影有声小说| 国产精品自拍毛片| 欧美日韩成人高清| 国产精品久久久久久久久免费桃花 | 91一区二区在线| 精品国产一区二区三区久久久蜜月| 国产精品国产精品国产专区不蜜| 亚洲成人综合视频| 成人av影视在线观看| 91精品国产91热久久久做人人| 国产欧美一区二区三区在线看蜜臀| 性感美女久久精品| 91免费看视频| 国产视频一区在线观看| 日韩成人精品视频| 在线精品观看国产| 国产精品毛片高清在线完整版| 麻豆专区一区二区三区四区五区| 在线欧美日韩国产| 国产精品色在线观看| 精品一区二区三区欧美| 777午夜精品免费视频| 亚洲一区二区视频在线观看| 成人国产在线观看| 国产喂奶挤奶一区二区三区| 欧美aaaaaa午夜精品| 欧美精品在欧美一区二区少妇| 亚洲欧洲综合另类在线| 成人av电影观看| 欧美激情资源网| 国产精品99久| 国产色产综合产在线视频| 九色综合狠狠综合久久| 337p亚洲精品色噜噜| 亚洲国产欧美一区二区三区丁香婷 | 91麻豆精品国产91久久久使用方法| 亚洲猫色日本管| 91在线你懂得| 综合精品久久久| 色婷婷综合在线| 亚洲精品视频免费观看| 日本高清成人免费播放| 亚洲伦理在线精品| 色诱亚洲精品久久久久久| 亚洲精品水蜜桃| 色八戒一区二区三区|