1ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 2ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlcatalog.c : a small utility program to handle XML catalogs 3ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * See Copyright for the status of this software. 5ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * daniel@veillard.com 7ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "libxml.h" 10ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <string.h> 12ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdio.h> 13ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdarg.h> 14ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 15ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STDLIB_H 16ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdlib.h> 17ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 18ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 19ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_LIBREADLINE 20ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <readline/readline.h> 21ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_LIBHISTORY 22ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <readline/history.h> 23ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 24ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 25ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 26ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlmemory.h> 27ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/uri.h> 28ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/catalog.h> 29ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parser.h> 30ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/globals.h> 31ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 32ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) 33ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int shell = 0; 34ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int sgml = 0; 35ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int noout = 0; 36ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int create = 0; 37ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int add = 0; 38ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int del = 0; 39ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int convert = 0; 40ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int no_super_update = 0; 41ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int verbose = 0; 42ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic char *filename = NULL; 43ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 44ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 45ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifndef XML_SGML_DEFAULT_CATALOG 46ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_SGML_DEFAULT_CATALOG "/etc/sgml/catalog" 47ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 48ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 49ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 50ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 51ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Shell Interface * 52ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 53ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 54ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 55ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellReadline: 56ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prompt: the prompt value 57ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 58ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Read a string 59ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 60ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a pointer to it or NULL on EOF the caller is expected to 61ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * free the returned string. 62ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 63ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic char * 64ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellReadline(const char *prompt) { 65ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_LIBREADLINE 66ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *line_read; 67ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 68ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Get a line from the user. */ 69ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project line_read = readline (prompt); 70ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 71ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* If the line has any text in it, save it on the history. */ 72ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (line_read && *line_read) 73ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project add_history (line_read); 74ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 75ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (line_read); 76ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 77ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char line_read[501]; 78ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *ret; 79ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len; 80ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 81ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prompt != NULL) 82ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stdout, "%s", prompt); 83ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!fgets(line_read, 500, stdin)) 84ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 85ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project line_read[500] = 0; 86ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = strlen(line_read); 87ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (char *) malloc(len + 1); 88ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 89ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy (ret, line_read, len + 1); 90ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 91ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 92ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 93ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 94ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 95ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void usershell(void) { 96ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *cmdline = NULL, *cur; 97ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbargs; 98ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char command[100]; 99ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char arg[400]; 100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *argv[20]; 101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i, ret; 102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ans; 103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (1) { 105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cmdline = xmlShellReadline("> "); 106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cmdline == NULL) 107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse the command itself 111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cmdline; 113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbargs = 0; 114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur == ' ') || (*cur == '\t')) cur++; 115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i = 0; 116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur != ' ') && (*cur != '\t') && 117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*cur != '\n') && (*cur != '\r')) { 118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == 0) 119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project command[i++] = *cur++; 121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project command[i] = 0; 123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i == 0) { 124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project free(cmdline); 125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse the argument string 130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(arg, 0, sizeof(arg)); 132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur == ' ') || (*cur == '\t')) cur++; 133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i = 0; 134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) { 135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == 0) 136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project arg[i++] = *cur++; 138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project arg[i] = 0; 140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse the arguments 143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i = 0; 145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbargs = 0; 146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = arg; 147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(argv, 0, sizeof(argv)); 148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) { 149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur == ' ') || (*cur == '\t')) cur++; 150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '\'') { 151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project argv[i] = cur; 153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur != 0) && (*cur != '\'')) cur++; 154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '\'') { 155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *cur = 0; 156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbargs++; 157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i++; 158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*cur == '"') { 161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project argv[i] = cur; 163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur != 0) && (*cur != '"')) cur++; 164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '"') { 165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *cur = 0; 166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbargs++; 167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i++; 168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project argv[i] = cur; 172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur != 0) && (*cur != ' ') && (*cur != '\t')) 173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *cur = 0; 175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbargs++; 176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i++; 177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * start interpreting the command 183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(command, "exit")) 185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(command, "quit")) 187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(command, "bye")) 189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(command, "public")) { 191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbargs != 1) { 192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("public requires 1 arguments\n"); 193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ans = xmlCatalogResolvePublic((const xmlChar *) argv[0]); 195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ans == NULL) { 196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("No entry for PUBLIC %s\n", argv[0]); 197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("%s\n", (char *) ans); 199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ans); 200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!strcmp(command, "system")) { 203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbargs != 1) { 204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("system requires 1 arguments\n"); 205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ans = xmlCatalogResolveSystem((const xmlChar *) argv[0]); 207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ans == NULL) { 208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("No entry for SYSTEM %s\n", argv[0]); 209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("%s\n", (char *) ans); 211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ans); 212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!strcmp(command, "add")) { 215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sgml) { 216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((nbargs != 3) && (nbargs != 2)) { 217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("add requires 2 or 3 arguments\n"); 218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (argv[2] == NULL) 220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogAdd(BAD_CAST argv[0], NULL, 221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[1]); 222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogAdd(BAD_CAST argv[0], BAD_CAST argv[1], 224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[2]); 225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("add command failed\n"); 227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((nbargs != 3) && (nbargs != 2)) { 230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("add requires 2 or 3 arguments\n"); 231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (argv[2] == NULL) 233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogAdd(BAD_CAST argv[0], NULL, 234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[1]); 235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogAdd(BAD_CAST argv[0], BAD_CAST argv[1], 237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[2]); 238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("add command failed\n"); 240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!strcmp(command, "del")) { 243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbargs != 1) { 244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("del requires 1\n"); 245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogRemove(BAD_CAST argv[0]); 247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret <= 0) 248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("del command failed\n"); 249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!strcmp(command, "resolve")) { 252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbargs != 2) { 253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("resolve requires 2 arguments\n"); 254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ans = xmlCatalogResolve(BAD_CAST argv[0], 256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[1]); 257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ans == NULL) { 258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("Resolver failed to find an answer\n"); 259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("%s\n", (char *) ans); 261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ans); 262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!strcmp(command, "dump")) { 265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbargs != 0) { 266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("dump has no arguments\n"); 267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDump(stdout); 269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!strcmp(command, "debug")) { 271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbargs != 0) { 272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("debug has no arguments\n"); 273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project verbose++; 275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogSetDebug(verbose); 276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!strcmp(command, "quiet")) { 278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbargs != 0) { 279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("quiet has no arguments\n"); 280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (verbose > 0) 282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project verbose--; 283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogSetDebug(verbose); 284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (strcmp(command, "help")) { 287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("Unrecognized command %s\n", command); 288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("Commands available:\n"); 290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\tpublic PublicID: make a PUBLIC identifier lookup\n"); 291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\tsystem SystemID: make a SYSTEM identifier lookup\n"); 292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\tresolve PublicID SystemID: do a full resolver lookup\n"); 293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\tadd 'type' 'orig' 'replace' : add an entry\n"); 294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\tdel 'values' : remove values\n"); 295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\tdump: print the current catalog state\n"); 296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\tdebug: increase the verbosity level\n"); 297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\tquiet: decrease the verbosity level\n"); 298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\texit: quit the shell\n"); 299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project free(cmdline); /* not xmlFree here ! */ 301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Main * 307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void usage(const char *name) { 310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* split into 2 printf's to avoid overly long string (gcc warning) */ 311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\ 312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectUsage : %s [options] catalogfile entities...\n\ 313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\tParse the catalog file and query it for the entities\n\ 314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t--sgml : handle SGML Super catalogs for --add and --del\n\ 315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t--shell : run a shell allowing interactive queries\n\ 316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t--create : create a new catalog\n\ 317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t--add 'type' 'orig' 'replace' : add an XML entry\n\ 318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t--add 'entry' : add an SGML entry\n", name); 319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("\ 320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t--del 'values' : remove values\n\ 321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t--noout: avoid dumping the result on stdout\n\ 322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t used with --add or --del, it saves the catalog changes\n\ 323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t and with --sgml it automatically updates the super catalog\n\ 324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t--no-super-update: do not update the SGML super catalog\n\ 325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project\t-v --verbose : provide debug informations\n"); 326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint main(int argc, char **argv) { 328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i; 329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int exit_value = 0; 331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (argc <= 1) { 334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project usage(argv[0]); 335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project LIBXML_TEST_VERSION 339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 1; i < argc ; i++) { 340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(argv[i], "-")) 341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (argv[i][0] != '-') 344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!strcmp(argv[i], "-verbose")) || 346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "-v")) || 347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--verbose"))) { 348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project verbose++; 349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogSetDebug(verbose); 350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-noout")) || 351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--noout"))) { 352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project noout = 1; 353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-shell")) || 354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--shell"))) { 355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project shell++; 356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project noout = 1; 357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-sgml")) || 358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--sgml"))) { 359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sgml++; 360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-create")) || 361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--create"))) { 362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project create++; 363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-convert")) || 364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--convert"))) { 365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project convert++; 366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-no-super-update")) || 367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--no-super-update"))) { 368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project no_super_update++; 369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-add")) || 370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--add"))) { 371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sgml) 372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i += 2; 373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i += 3; 375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project add++; 376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-del")) || 377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--del"))) { 378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i += 1; 379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project del++; 380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "Unknown option %s\n", argv[i]); 382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project usage(argv[0]); 383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 1; i < argc; i++) { 388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!strcmp(argv[i], "-add")) || 389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--add"))) { 390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sgml) 391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i += 2; 392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i += 3; 394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-del")) || 396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--del"))) { 397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i += 1; 398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* No catalog entry specified */ 400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i == argc || (sgml && i + 1 == argc)) { 401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "No catalog entry specified to remove from\n"); 402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project usage (argv[0]); 403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (argv[i][0] == '-') 408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project filename = argv[i]; 410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlLoadCatalog(argv[i]); 411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret < 0) && (create)) { 412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogAdd(BAD_CAST "catalog", BAD_CAST argv[i], NULL); 413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (convert) 418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogConvert(); 419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((add) || (del)) { 421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 1; i < argc ; i++) { 422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(argv[i], "-")) 423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (argv[i][0] != '-') 426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (strcmp(argv[i], "-add") && strcmp(argv[i], "--add") && 428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project strcmp(argv[i], "-del") && strcmp(argv[i], "--del")) 429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sgml) { 432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Maintenance of SGML catalogs. 434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPtr catal = NULL; 436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPtr super = NULL; 437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = xmlLoadSGMLSuperCatalog(argv[i + 1]); 439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!strcmp(argv[i], "-add")) || 441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--add"))) { 442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = xmlNewCatalog(1); 444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlACatalogAdd(catal, BAD_CAST "CATALOG", 445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[i + 2], NULL); 446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!no_super_update) { 448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project super = xmlLoadSGMLSuperCatalog(XML_SGML_DEFAULT_CATALOG); 449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (super == NULL) 450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project super = xmlNewCatalog(1); 451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlACatalogAdd(super, BAD_CAST "CATALOG", 453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[i + 1], NULL); 454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal != NULL) 457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlACatalogRemove(catal, BAD_CAST argv[i + 2]); 458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = -1; 460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) { 461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "Failed to remove entry from %s\n", 462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project argv[i + 1]); 463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project exit_value = 1; 464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!no_super_update) && (noout) && (catal != NULL) && 466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlCatalogIsEmpty(catal))) { 467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project super = xmlLoadSGMLSuperCatalog( 468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SGML_DEFAULT_CATALOG); 469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (super != NULL) { 470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlACatalogRemove(super, 471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[i + 1]); 472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) { 473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, 474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Failed to remove entry from %s\n", 475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SGML_DEFAULT_CATALOG); 476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project exit_value = 1; 477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (noout) { 482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FILE *out; 483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCatalogIsEmpty(catal)) { 485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project remove(argv[i + 1]); 486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out = fopen(argv[i + 1], "w"); 488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out == NULL) { 489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "could not open %s for saving\n", 490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project argv[i + 1]); 491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project exit_value = 2; 492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project noout = 0; 493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlACatalogDump(catal, out); 495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fclose(out); 496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!no_super_update && super != NULL) { 499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCatalogIsEmpty(super)) { 500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project remove(XML_SGML_DEFAULT_CATALOG); 501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out = fopen(XML_SGML_DEFAULT_CATALOG, "w"); 503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out == NULL) { 504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, 505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "could not open %s for saving\n", 506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SGML_DEFAULT_CATALOG); 507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project exit_value = 2; 508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project noout = 0; 509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlACatalogDump(super, out); 512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fclose(out); 513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlACatalogDump(catal, stdout); 518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i += 2; 520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!strcmp(argv[i], "-add")) || 522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--add"))) { 523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((argv[i + 3] == NULL) || (argv[i + 3][0] == 0)) 524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogAdd(BAD_CAST argv[i + 1], NULL, 525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[i + 2]); 526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogAdd(BAD_CAST argv[i + 1], 528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[i + 2], 529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST argv[i + 3]); 530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) { 531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("add command failed\n"); 532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project exit_value = 3; 533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i += 3; 535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((!strcmp(argv[i], "-del")) || 536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!strcmp(argv[i], "--del"))) { 537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogRemove(BAD_CAST argv[i + 1]); 538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) { 539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "Failed to remove entry %s\n", 540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project argv[i + 1]); 541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project exit_value = 1; 542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i += 1; 544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (shell) { 549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project usershell(); 550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i++; i < argc; i++) { 552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlURIPtr uri; 553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ans; 554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uri = xmlParseURI(argv[i]); 556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri == NULL) { 557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ans = xmlCatalogResolvePublic((const xmlChar *) argv[i]); 558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ans == NULL) { 559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("No entry for PUBLIC %s\n", argv[i]); 560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project exit_value = 4; 561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("%s\n", (char *) ans); 563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ans); 564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeURI(uri); 567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ans = xmlCatalogResolveSystem((const xmlChar *) argv[i]); 568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ans == NULL) { 569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("No entry for SYSTEM %s\n", argv[i]); 570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ans = xmlCatalogResolveURI ((const xmlChar *) argv[i]); 571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ans == NULL) { 572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf ("No entry for URI %s\n", argv[i]); 573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project exit_value = 4; 574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("%s\n", (char *) ans); 576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree (ans); 577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project printf("%s\n", (char *) ans); 580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ans); 581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!sgml) && ((add) || (del) || (create) || (convert))) { 586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (noout && filename && *filename) { 587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FILE *out; 588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out = fopen(filename, "w"); 590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out == NULL) { 591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "could not open %s for saving\n", filename); 592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project exit_value = 2; 593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project noout = 0; 594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDump(out); 596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDump(stdout); 599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cleanup and check for memory leaks 604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanupParser(); 606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlMemoryDump(); 607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(exit_value); 608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { 611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "libxml was not compiled with catalog and output support\n"); 612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 615