⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlj_io.c

📁 gcc的组建
💻 C
📖 第 1 页 / 共 2 页
字号:
                }              if (xmlCtxtUseOptions (ctx, options))                {                  xmljThrowException (env,                                      "java/lang/RuntimeException",                                      "Unable to set xmlParserCtxtPtr options");                }              if (base != NULL)                {                  ctx->input->directory =                    (*env)->GetStringUTFChars (env, base, 0);                }              return ctx;            }          xmljFreeInputStreamContext (inputContext);        }    }  return NULL;}voidxmljFreeParserContext (xmlParserCtxtPtr ctx){  InputStreamContext *inputStreamContext = NULL;  if (ctx->input != NULL && ctx->input->buf != NULL)    {      inputStreamContext        = (InputStreamContext *) ctx->input->buf->context;          }  xmlFreeParserCtxt (ctx);  if (inputStreamContext != NULL)    {      xmljFreeInputStreamContext (inputStreamContext);    }}xmlDocPtrxmljParseDocument (JNIEnv * env,                   jobject self,                   jobject in,                   jbyteArray detectBuffer,                   jstring publicId,                   jstring systemId,                   jstring base,                   jboolean validate,                   jboolean coalesce,                   jboolean expandEntities,                   jboolean contentHandler,                   jboolean dtdHandler,                   jboolean entityResolver,                   jboolean errorHandler,                   jboolean declarationHandler,                   jboolean lexicalHandler,                   int mode){  xmlParserCtxtPtr ctx;  SAXParseContext *saxCtx;  xmlSAXHandlerPtr sax;  ctx = xmljNewParserContext (env, in, detectBuffer, publicId, systemId, base,                              validate, coalesce, expandEntities,                              entityResolver);  if (ctx != NULL)    {      saxCtx = xmljNewSAXParseContext (env, self, ctx, publicId, systemId);      if (saxCtx != NULL)        {          sax = xmljNewSAXHandler (contentHandler,                                   dtdHandler,                                   entityResolver,                                   errorHandler,                                   declarationHandler,                                   lexicalHandler);          if (sax != NULL)            {              return xmljParseDocument2 (env,                                         ctx,                                         saxCtx,                                         sax,                                         mode);            }          xmljFreeSAXParseContext (saxCtx);        }      xmljFreeParserContext (ctx);    }  if (!(*env)->ExceptionOccurred (env))    {      xmljThrowException (env, "java/io/IOException",                          "Unable to create parser context");    }  return NULL;}xmlDocPtrxmljParseDocument2 (JNIEnv * env,                    xmlParserCtxtPtr ctx,                    SAXParseContext *saxCtx,                    xmlSAXHandlerPtr sax,                    int mode){  xmlSAXHandlerPtr orig;  xmlDocPtr doc;  int ret;    ctx->_private = saxCtx;  ctx->userData = ctx;  orig = ctx->sax;  ctx->sax = sax;    xmljSetThreadContext (saxCtx);  ret = xmlParseDocument (ctx);  doc = ctx->myDoc;  if (ret || !doc)    {      const char *msg = ctx->lastError.message;      switch (mode)        {        case 0:          xmljSAXFatalError (ctx, msg);          break;        case 1:          xmljThrowDOMException (env, ret, msg);          break;        case 2:          xmljThrowException (env,                              "javax/xml/transform/TransformerException",                              msg);        }    }    xmljClearThreadContext ();                ctx->sax = orig;  free(sax);  xmljFreeSAXParseContext (saxCtx);  xmljFreeParserContext (ctx);  xmljClearStringCache ();  return doc;}xmlParserInputPtrxmljNewParserInput (JNIEnv * env,                    jobject inputStream,                    jbyteArray detectBuffer,                    xmlParserCtxtPtr parserContext){  xmlParserInputPtr ret;  xmlParserInputBufferPtr input;  xmlCharEncoding encoding;  encoding = xmljDetectCharEncoding (env, detectBuffer);  if (encoding != XML_CHAR_ENCODING_ERROR)    {      input = xmljNewParserInputBuffer (env, inputStream, encoding);      if (input != NULL)        {          ret = xmlNewIOInputStream (parserContext, input, encoding);          return ret;        }      xmlFreeParserInputBuffer (input);    }  return NULL;}xmlParserInputBufferPtrxmljNewParserInputBuffer (JNIEnv * env,                          jobject inputStream, xmlCharEncoding encoding){  xmlParserInputBufferPtr ret;  InputStreamContext *inputContext;  inputContext = xmljNewInputStreamContext (env, inputStream);  if (NULL != inputContext)    {      ret = xmlParserInputBufferCreateIO (&xmljInputReadCallback,                                          &xmljInputCloseCallback,                                          inputContext, encoding);      if (ret != NULL)        return ret;      xmljFreeInputStreamContext (inputContext);    }  return NULL;}voidxmljSaveFileToJavaOutputStream (JNIEnv * env, jobject outputStream,                                xmlDocPtr tree,                                const char *outputEncodingName){  OutputStreamContext *outputContext =    xmljNewOutputStreamContext (env, outputStream);  xmlCharEncoding outputEncoding = xmlParseCharEncoding (outputEncodingName);  xmlOutputBufferPtr outputBuffer =    xmlOutputBufferCreateIO (xmljOutputWriteCallback,                             xmljOutputCloseCallback,                             outputContext,                             xmlGetCharEncodingHandler (outputEncoding));  /* Write result to output stream */  xmlSaveFileTo (outputBuffer, tree, outputEncodingName);  xmljFreeOutputStreamContext (outputContext);}/*jobjectxmljResolveURI (SaxErrorContext * saxErrorContext,                const char *URL, const char *ID){  JNIEnv *env = saxErrorContext->env;  jstring hrefString = (*env)->NewStringUTF (env, URL);  jstring baseString = saxErrorContext->systemId;  jobject sourceWrapper = (*env)->CallObjectMethod (env,                                                    saxErrorContext->                                                    saxErrorAdapter,                                                    saxErrorContext->                                                    resolveURIMethodID,                                                    hrefString,                                                    baseString);  (*env)->DeleteLocalRef (env, hrefString);  if (NULL == sourceWrapper)    {      return NULL;    }  else    {      jobject sourceInputStream = (*env)->CallObjectMethod (env,                                                            sourceWrapper,                                                            saxErrorContext->                                                            getInputStreamMethodID);      (*env)->DeleteLocalRef (env, sourceWrapper);      if ((*env)->ExceptionOccurred (env))        {          -* Report to ErrorAdapter here? *-          return NULL;        }      return sourceInputStream;    }}*/xmlDocPtrxmljResolveURIAndOpen (SAXParseContext *saxContext,                       const char *URL,                       const char *ID){  jobject libxmlDocument;  xmlDocPtr doc;  JNIEnv *env = saxContext->env;  jstring hrefString = (*env)->NewStringUTF (env, URL);  jstring baseString = saxContext->systemId;  if (saxContext->resolveURIAndOpen == NULL)    {      jclass cls = (*env)->GetObjectClass (env, saxContext->obj);      saxContext->resolveURIAndOpen =        (*env)->GetMethodID (env, cls, "resolveURIAndOpen",                             "Ljava/lang/String;Ljava/lang/String)Lgnu/xml/libxmlj/transform/LibxmlDocument;");    }  libxmlDocument =    (*env)->CallObjectMethod (env,                              saxContext->obj,                              saxContext->resolveURIAndOpen,                              hrefString,                              baseString);  doc = (xmlDocPtr) xmljGetNodeID (env, libxmlDocument);  (*env)->DeleteLocalRef (env, libxmlDocument);  if ((*env)->ExceptionOccurred (env))    {      /* Report to ErrorAdapter here? */      return NULL;    }  else    {      return doc;    }}/*xmlParserInputPtrxmljLoadExternalEntity (const char *URL, const char *ID,                        xmlParserCtxtPtr ctxt){  SaxErrorContext *saxErrorContext = xmljGetThreadContext ();  JNIEnv *env = saxErrorContext->env;  jstring hrefString = (*env)->NewStringUTF (env, URL);  jstring baseString = saxErrorContext->systemId;  jobject sourceWrapper = (*env)->CallObjectMethod (env,                                                    saxErrorContext->                                                    saxErrorAdapter,                                                    saxErrorContext->                                                    resolveURIMethodID,                                                    hrefString,                                                    baseString);  (*env)->DeleteLocalRef (env, hrefString);  if (NULL == sourceWrapper)    {      return NULL;    }  else    {      InputStreamContext *inputContext;      xmlParserInputBufferPtr inputBuffer;      xmlParserInputPtr inputStream;      jobject sourceInputStream = (*env)->CallObjectMethod (env,                                                            sourceWrapper,                                                            saxErrorContext->                                                            getInputStreamMethodID);      (*env)->DeleteLocalRef (env, sourceWrapper);      if ((*env)->ExceptionOccurred (env))        {          -* Report to ErrorAdapter *-          return NULL;        }      inputContext = xmljNewInputStreamContext (env, sourceInputStream);      inputBuffer        = xmlParserInputBufferCreateIO (xmljInputReadCallback,                                        xmljInputCloseCallback,                                        inputContext, XML_CHAR_ENCODING_NONE);      inputStream = xmlNewInputStream (ctxt);      if (inputStream == NULL)        {          return (NULL);        }      inputStream->filename = NULL;      inputStream->directory = NULL;      inputStream->buf = inputBuffer;      inputStream->base = inputStream->buf->buffer->content;      inputStream->cur = inputStream->buf->buffer->content;      inputStream->end = &inputStream->base[inputStream->buf->buffer->use];      if ((ctxt->directory == NULL) && (inputStream->directory != NULL))        ctxt->directory =          (char *) xmlStrdup ((const xmlChar *) inputStream->directory);      return (inputStream);    }}*//* Key for the thread-specific buffer */static pthread_key_t thread_context_key;/* Once-only initialisation of the key */static pthread_once_t thread_context_once = PTHREAD_ONCE_INIT;static voidthread_context_key_alloc (void);/* Allocate the key */static voidthread_context_key_alloc (){  pthread_key_create (&thread_context_key, NULL);}voidxmljSetThreadContext (SAXParseContext * context){  pthread_once (&thread_context_once, thread_context_key_alloc);  pthread_setspecific (thread_context_key, context);}voidxmljClearThreadContext (void){  pthread_setspecific (thread_context_key, NULL);}/* Return the thread-specific buffer */SAXParseContext *xmljGetThreadContext (void){  return (SAXParseContext *) pthread_getspecific (thread_context_key);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -