pocxxeci 0.30.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pocxxeci might be problematic. Click here for more details.

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