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

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

?? icxmlparser.c

?? IBE是一種非對稱密碼技術
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright 2003-2006, Voltage Security, all rights reserved.
 */

#include "vibe.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "icStringBuffer.h"
#include "icInputStream.h"
#include "icTable.h"
#include "icStack.h"
#include "icXmlNode.h"
#include "icXmlParser.h"
#include "errorctx.h"

/* This function classifies a char as either whitespace, '<', '>', '/',
 * '=', '"', '&', ';', or other.
 * <p>The return value is one of the following.
 * <pre>
 * <code>
 *   0 (whitespace)
 *   VOLT_IC_CHAR_OPEN_ANGLE_BRACKET
 *   VOLT_IC_CHAR_CLOSE_ANGLE_BRACKET
 *   VOLT_IC_CHAR_SLASH
 *   VOLT_IC_CHAR_EQUAL
 *   VOLT_IC_CHAR_QUOTE
 *   VOLT_IC_CHAR_AMPERSAND
 *   VOLT_IC_CHAR_SEMICOLON
 *   VOLT_IC_CHAR_OTHER
 * </code>
 * </pre>
 * Note that 
 */
static int icClassifyChar (int theChar);

#define VOLT_IC_CHAR_OPEN_ANGLE_BRACKET   0x0001
#define VOLT_IC_CHAR_CLOSE_ANGLE_BRACKET  0x0002
#define VOLT_IC_CHAR_SLASH                0x0004
#define VOLT_IC_CHAR_EQUAL                0x0008
#define VOLT_IC_CHAR_QUOTE                0x0010
#define VOLT_IC_CHAR_AMPERSAND            0x0020
#define VOLT_IC_CHAR_SEMICOLON            0x0040
#define VOLT_IC_CHAR_OTHER                0x8000

/* The caller reads a char, then passes that char to this function.
 */
static int icXmlParserParseChar (
   icXmlParser *parser,
   int theChar,
   VoltLibCtx *libCtx
   );

static int icXmlHandleStartTag (
   icXmlParser *parser,
   char *tag_name,
   icTable *attributes,
   int is_empty,
   VoltLibCtx *libCtx
   );

static int icXmlHandleEndTag (
   icXmlParser *parser,
   char *tag_name,
   VoltLibCtx *libCtx
   );

static int icXmlHandleText (
   icXmlParser *parser,
   char *text,
   VoltLibCtx *libCtx
   );

static int translate_entity (
   char *entity_name,
   VoltLibCtx *libCtx
   );

int icXmlParserCreate (
   icXmlParser **parser,
   VoltLibCtx *libCtx
   )
{
  int status;
  icXmlParser *newParser = (icXmlParser *)0;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    newParser = (icXmlParser *)Z3Malloc (sizeof (icXmlParser));
    if (newParser == (icXmlParser *)0)
      break;
    Z2Memset (newParser, 0, sizeof (icXmlParser));

    newParser->handle_start_tag = icXmlHandleStartTag;
    newParser->handle_end_tag = icXmlHandleEndTag;
    newParser->handle_text = icXmlHandleText;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = icStackCreate (&(newParser->tag_stack), libCtx);
    if (status != 0)
      break;

    *parser = newParser;

  } while (0);

  if (status == 0)
    return (0);

  /* If there was an error, free memory we allocated.
   */
  icXmlParserFree (&newParser, libCtx);

  VOLT_LOG_ERROR (
    (VtLibCtx)libCtx, status, errorType, fnctLine,
    "icXmlParserCreate", (char *)0)

  return (status);
}

void icXmlParserFree (
   icXmlParser **parser,
   VoltLibCtx *libCtx
   )
{
  icXmlParser *theParser;

  /* Anything to free?
   */
  if (parser == (icXmlParser **)0)
    return;
  if (*parser == (icXmlParser *)0)
    return;

  theParser = *parser;

  icStringBufferFree (&(theParser->tag_name), libCtx);
  icStringBufferFree (&(theParser->attribute_name), libCtx);    
  icStringBufferFree (&(theParser->attribute_value), libCtx);
  icTableFree (&(theParser->attributes), libCtx);
  icStringBufferFree (&(theParser->text), libCtx);
  icStringBufferFree (&(theParser->entity_name), libCtx);
  icXmlNodeFree (&(theParser->main), libCtx);
  icStackFree (&(theParser->tag_stack), libCtx); 

  Z2Free (*parser);
  *parser = (icXmlParser *)0;
}

int icXmlParserParse (
   icXmlParser *parser,
   icInputStream *in,
   VoltLibCtx *libCtx
   )
{
  int status, bytesRead;
  char theChar;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  /* Skip the whitespace.
   */
  VOLT_SET_FNCT_LINE (fnctLine)
  status = icInputStreamSkipWhitespace (in, &bytesRead, libCtx);

  /* Now process the bytes.
   */
  while (status == 0)
  {
    /* Read a byte. If there are no more bytes, we're done.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = icInputStreamRead (in, &theChar, 1, &bytesRead, libCtx);
    if (status != 0)
      break;
    if (bytesRead == 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = icXmlParserParseChar (parser, (int)theChar, libCtx);
  }

  VOLT_LOG_ERROR_COMPARE (
    status, (VtLibCtx)libCtx, status, 0, fnctLine,
    "icXmlParserParse", (char *)0)

  return (status);
}

/* Ok ... arguably this is one of the most heinous looking pieces of code 
 * you've been forced to bear witness upon in your life but fret not ...
 * things are better than they seem.  While the design on this monster 
 * isn't clear from the code, if you draw the DFA all becomes lucid.
 * EOS is not an error and should be checked for outside this function.
 */
static int icXmlParserParseChar (
   icXmlParser *parser,
   int theChar,
   VoltLibCtx *libCtx
   )
{
  int status, charClass, entityChar;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  charClass = icClassifyChar (theChar);

  status = 0;
  switch (parser->state)
  {
    case 0:
      parser->state = 10;
      if (charClass == VOLT_IC_CHAR_OPEN_ANGLE_BRACKET)
        parser->state = 1;

      break;

    case 1:
      parser->is_empty_tag = 0;

      /* We're expecting the first character of a tag, so if it's close
       * angle bracket or whitespace, error.
       */
      parser->state = 10;
      if ( (charClass == 0) ||
           (charClass == VOLT_IC_CHAR_CLOSE_ANGLE_BRACKET) )
        break;

      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = icStringBufferCreate (&(parser->tag_name), libCtx);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = icTableCreate (&(parser->attributes), libCtx);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = icStringBufferAppend (parser->tag_name, theChar, libCtx);
      if (status != 0)
        break;

      parser->state = 2;

      break;

    case 2:
      parser->state = 7;
      if (charClass == VOLT_IC_CHAR_CLOSE_ANGLE_BRACKET)
        break;

      parser->state = 8;
      if (charClass == VOLT_IC_CHAR_SLASH)
        break;

      VOLT_SET_ERROR_TYPE (errorType, 0)
      if (charClass == 0)
      {
        parser->state = 3;
        icStringBufferFree (&(parser->attribute_name), libCtx);
        icStringBufferFree (&(parser->attribute_value), libCtx);

        VOLT_SET_FNCT_LINE (fnctLine)
        status = icStringBufferCreate (&(parser->attribute_name), libCtx);
        if (status != 0)
          break;

        VOLT_SET_FNCT_LINE (fnctLine)
        status = icStringBufferCreate (&(parser->attribute_value), libCtx);

        break;
      }

      parser->state = 2;
      VOLT_SET_FNCT_LINE (fnctLine)
      status = icStringBufferAppend (parser->tag_name, theChar, libCtx);

      break;

    case 3:
      if (charClass == 0)
        break;

      parser->state = 7;
      if (charClass == VOLT_IC_CHAR_CLOSE_ANGLE_BRACKET)
        break;

      parser->state = 8;
      if (charClass == VOLT_IC_CHAR_SLASH)
        break;

      parser->state = 4;
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = icStringBufferAppend (parser->attribute_name, theChar, libCtx);

      break;

    case 4:
      parser->state = 10;
      if ( (charClass == VOLT_IC_CHAR_CLOSE_ANGLE_BRACKET) ||
           (charClass == VOLT_IC_CHAR_SLASH) )
        break;

      parser->state = 5;
      if (charClass == VOLT_IC_CHAR_EQUAL)
        break;

      parser->state = 4;
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = icStringBufferAppend (parser->attribute_name, theChar, libCtx);

      break;

    case 5:
      parser->state = 10;
      if (charClass == VOLT_IC_CHAR_QUOTE)
        parser->state = 6;

      break;

    case 6:
      VOLT_SET_ERROR_TYPE (errorType, 0)
      if (charClass != VOLT_IC_CHAR_QUOTE)
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = icStringBufferAppend (
          parser->attribute_value, theChar, libCtx);
        break;
      }

      parser->state = 3;
      VOLT_SET_FNCT_LINE (fnctLine)
      status = icTablePut (
        parser->attributes, parser->attribute_name->str,
        parser->attribute_value->str, libCtx);
      if (status != 0)
        break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产一区在线| 欧美丰满嫩嫩电影| 日韩理论片中文av| 91黄色激情网站| 亚洲大片在线观看| 欧美一区永久视频免费观看| 久久99精品久久久久久动态图| 日韩欧美一区二区视频| 久久99国产精品免费| 国产亚洲福利社区一区| 成人av资源站| 亚洲一卡二卡三卡四卡五卡| 欧美精品vⅰdeose4hd| 久久不见久久见免费视频1| 久久久精品2019中文字幕之3| 国产成人综合亚洲网站| 一区二区三区在线免费视频| 欧美巨大另类极品videosbest | 欧美性生活影院| 婷婷激情综合网| 精品国产sm最大网站| 成人三级在线视频| 亚洲chinese男男1069| 精品1区2区在线观看| 99国产欧美久久久精品| 午夜欧美在线一二页| 国产调教视频一区| 欧美日韩你懂得| 国产精品一区二区久久精品爱涩| 一区二区三区欧美亚洲| 欧美va亚洲va在线观看蝴蝶网| 成人一区二区三区视频在线观看| 一区二区视频在线| 精品久久国产老人久久综合| 一本到一区二区三区| 秋霞影院一区二区| 亚洲天天做日日做天天谢日日欢| 欧美一区日韩一区| 一本色道**综合亚洲精品蜜桃冫| 美国欧美日韩国产在线播放| 亚洲天堂精品视频| 久久美女艺术照精彩视频福利播放 | 精品视频一区二区不卡| 国产1区2区3区精品美女| 舔着乳尖日韩一区| 椎名由奈av一区二区三区| 精品成人在线观看| 欧美日韩国产影片| 波波电影院一区二区三区| 麻豆91精品91久久久的内涵| 亚洲一区二区三区小说| 中文字幕欧美激情| 欧美精品一区二区三区在线播放| 91官网在线免费观看| 国产精品99精品久久免费| 日韩二区三区四区| 亚洲成人免费影院| 日韩毛片在线免费观看| 亚洲国产成人午夜在线一区| 精品国产成人系列| 51午夜精品国产| 在线精品视频小说1| a亚洲天堂av| 不卡影院免费观看| 国产成人一区二区精品非洲| 久久99久久99小草精品免视看| 亚洲一区二区在线观看视频| 亚洲欧洲日韩在线| 国产女人18毛片水真多成人如厕| 欧美r级在线观看| 欧美一区二区在线视频| 欧美日韩国产小视频| 欧美伊人久久久久久午夜久久久久| 波多野结衣中文字幕一区 | 青青草国产精品亚洲专区无| 天堂午夜影视日韩欧美一区二区| 亚洲一区精品在线| 亚洲第一激情av| 亚洲成av人在线观看| 亚洲国产另类精品专区| 亚洲一区二区中文在线| 视频一区二区中文字幕| 日韩二区在线观看| 韩国三级中文字幕hd久久精品| 久久国产精品72免费观看| 韩国成人精品a∨在线观看| 久久99国产精品久久99果冻传媒| 激情综合网激情| 国产风韵犹存在线视精品| 国产成人综合视频| 97久久人人超碰| 欧美综合一区二区三区| 欧美精品一二三| 欧美一级日韩免费不卡| 精品日韩在线一区| 国产日韩欧美精品综合| 亚洲天堂精品视频| 亚洲成人午夜影院| 久久97超碰国产精品超碰| 国产91丝袜在线18| 91美女在线观看| 欧美群妇大交群中文字幕| 久久亚洲欧美国产精品乐播 | 久久99久久99小草精品免视看| 国产麻豆日韩欧美久久| 91原创在线视频| 欧美日韩视频一区二区| 精品三级在线看| 亚洲欧美日韩中文播放 | 欧美精品一区二区三区视频| 国产日韩欧美电影| 一区二区激情小说| 久久国产麻豆精品| 91网址在线看| 欧美va亚洲va国产综合| 亚洲情趣在线观看| 理论电影国产精品| 91热门视频在线观看| 在线综合+亚洲+欧美中文字幕| 久久久综合九色合综国产精品| 成人免费一区二区三区在线观看| 亚洲成a人片在线不卡一二三区 | 成人激情开心网| 欧美久久久久免费| 欧美国产日本视频| 欧美aaaaa成人免费观看视频| 成人伦理片在线| 91精品国产一区二区| 国产精品福利一区| 丝袜a∨在线一区二区三区不卡| 激情丁香综合五月| 欧美色图激情小说| 中文字幕免费观看一区| 麻豆精品一区二区三区| 91福利国产成人精品照片| 久久久国际精品| 日本美女一区二区三区| 日本韩国欧美在线| 免费一级欧美片在线观看| 成人三级在线视频| 久久婷婷一区二区三区| 性感美女久久精品| 91国产成人在线| 欧美国产日本韩| 国产乱理伦片在线观看夜一区| 欧美日韩国产乱码电影| 亚洲你懂的在线视频| 成人av网址在线| 国产日韩一级二级三级| 国内精品在线播放| 欧美一区二区三区免费视频| 亚洲一区二区偷拍精品| 色综合久久综合网97色综合 | 美国三级日本三级久久99| 欧美三级韩国三级日本三斤| 亚洲激情综合网| 99精品欧美一区二区三区综合在线| 国产亚洲美州欧州综合国| 国产麻豆视频一区二区| 久久一区二区三区四区| 狠狠色2019综合网| 精品欧美黑人一区二区三区| 日韩精品亚洲一区| 欧美福利视频一区| 日韩高清一级片| 欧美一区二区在线播放| 日韩vs国产vs欧美| 欧美一区二区视频网站| 日本va欧美va瓶| 精品国产露脸精彩对白 | 婷婷久久综合九色综合伊人色| 91黄色免费网站| 亚洲成年人网站在线观看| 欧美日韩精品一区二区三区| 日韩av电影免费观看高清完整版在线观看| 精品视频一区三区九区| 日韩国产一二三区| 日韩美女在线视频| 激情综合色播五月| 久久精品欧美日韩精品 | 亚洲国产欧美一区二区三区丁香婷| 色呦呦一区二区三区| 亚洲mv在线观看| 欧美一区二区视频网站| 国产在线精品一区二区| 久久精品人人做| 色综合久久综合网97色综合 | 樱花草国产18久久久久| 欧美亚洲丝袜传媒另类| 日韩专区在线视频| 日韩美女一区二区三区| 成人精品国产福利| 一区二区三区日本| 欧美成人伊人久久综合网| 国产激情一区二区三区| 中文字幕亚洲一区二区av在线 | 99国产麻豆精品| 亚洲h在线观看| 久久久久久久免费视频了| 91首页免费视频|