testoom.c

来自「图片显示,电脑光于望技术湖连望键往,网络」· C语言 代码 · 共 184 行

C
184
字号
/* * testOOM.c: Test out-of-memory handling * * See Copyright for the status of this software. * * hp@redhat.com *//* FIXME this test would be much better if instead of just checking * for debug spew or crashes on OOM, it also validated the expected * results of parsing a particular file vs. the actual results */#include "libxml.h"#include <string.h>#include <stdarg.h>#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#ifdef HAVE_STDLIB_H#include <stdlib.h>#endif#ifdef HAVE_STRING_H#include <string.h>#endif#include <libxml/xmlreader.h>#include "testOOMlib.h"#ifndef TRUE#define TRUE (1)#endif#ifndef FALSE#define FALSE (0)#endifint debug = 0;int dump = 0;int noent = 0;int count = 0;int valid = 0;static void usage(const char *progname) {    printf("Usage : %s [options] XMLfiles ...\n", progname);    printf("\tParse the XML files using the xmlTextReader API\n");    printf("\t --count: count the number of attribute and elements\n");    printf("\t --valid: validate the document\n");    exit(1);}static int elem, attrs;static int processNode(xmlTextReaderPtr reader) {    int type;    type = xmlTextReaderNodeType(reader);    if (count) {	if (type == 1) {	    elem++;	    attrs += xmlTextReaderAttributeCount(reader);	}    }    return TRUE;}/* This always returns TRUE since we don't validate the results of * parsing a particular document vs. the expected results of parsing * that document. The idea is that such a failure would return FALSE. */static intcheck_load_file_memory_func (void *data){     const char *filename = data;     xmlTextReaderPtr reader;     int ret;     if (count) {          elem = 0;          attrs = 0;     }     reader = xmlNewTextReaderFilename(filename);          if (reader != NULL) {          if (valid) {               if (xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1) == -1) {                    xmlFreeTextReader (reader);                    return TRUE;               }          }                    /*           * Process all nodes in sequence           */          ret = xmlTextReaderRead (reader);                    while (TRUE) {               if (ret == -1) {                    xmlFreeTextReader (reader);                    return TRUE;               } else if (ret != 1)                    break;                              if (!processNode(reader)) {                    xmlFreeTextReader (reader);                    return FALSE;               }                              ret = xmlTextReaderRead(reader);          }          /*           * Done, cleanup and status           */          xmlFreeTextReader (reader);          return TRUE;     } else {          return TRUE;     }}int main(int argc, char **argv) {    int i;    int files = 0;    if (argc <= 1) {	usage(argv[0]);	return(1);    }    LIBXML_TEST_VERSION;          xmlMemSetup (test_free,                 test_malloc,                 test_realloc,                 test_strdup);        for (i = 1; i < argc ; i++) {	if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))	    debug++;	else if ((!strcmp(argv[i], "-dump")) || (!strcmp(argv[i], "--dump")))	    dump++;	else if ((!strcmp(argv[i], "-count")) || (!strcmp(argv[i], "--count")))	    count++;	else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))	    valid++;	else if ((!strcmp(argv[i], "-noent")) ||	         (!strcmp(argv[i], "--noent")))	    noent++;    }    if (noent != 0)      xmlSubstituteEntitiesDefault(1);    for (i = 1; i < argc ; i++) {	if (argv[i][0] != '-') {             if (!test_oom_handling (check_load_file_memory_func,                                     argv[i])) {                  fprintf (stderr, "Failed!\n");                  return (1);             }             xmlCleanupParser();             if (test_get_malloc_blocks_outstanding () > 0) {                  fprintf (stderr, "%d blocks leaked\n",                           test_get_malloc_blocks_outstanding ());		  xmlMemoryDump();                  return (1);             }             	    files ++;	}    }    xmlMemoryDump();    return(0);}

⌨️ 快捷键说明

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