int *retPtr;
} PROCESS_ARGS;
-static
-void reportError(XML_Parser parser, const XML_Char *filename)
+static void
+reportError(XML_Parser parser, const XML_Char *filename)
{
int code = XML_GetErrorCode(parser);
const XML_Char *message = XML_ErrorString(code);
ftprintf(stderr, T("%s: (unknown message %d)\n"), filename, code);
}
-static
-void processFile(const void *data,
- size_t size,
- const XML_Char *filename,
- void *args)
+static void
+processFile(const void *data, size_t size,
+ const XML_Char *filename, void *args)
{
XML_Parser parser = ((PROCESS_ARGS *)args)->parser;
int *retPtr = ((PROCESS_ARGS *)args)->retPtr;
#ifdef WIN32
-static
-int isAsciiLetter(XML_Char c)
+static int
+isAsciiLetter(XML_Char c)
{
return (T('a') <= c && c <= T('z')) || (T('A') <= c && c <= T('Z'));
}
#endif /* WIN32 */
-static
-const XML_Char *resolveSystemId(const XML_Char *base, const XML_Char *systemId, XML_Char **toFree)
+static const XML_Char *
+resolveSystemId(const XML_Char *base, const XML_Char *systemId,
+ XML_Char **toFree)
{
XML_Char *s;
*toFree = 0;
#endif
)
return systemId;
- *toFree = (XML_Char *)malloc((tcslen(base) + tcslen(systemId) + 2)*sizeof(XML_Char));
+ *toFree = (XML_Char *)malloc((tcslen(base) + tcslen(systemId) + 2)
+ * sizeof(XML_Char));
if (!*toFree)
return systemId;
tcscpy(*toFree, base);
return *toFree;
}
-static
-int externalEntityRefFilemap(XML_Parser parser,
- const XML_Char *context,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId)
+static int
+externalEntityRefFilemap(XML_Parser parser,
+ const XML_Char *context,
+ const XML_Char *base,
+ const XML_Char *systemId,
+ const XML_Char *publicId)
{
int result;
XML_Char *s;
return result;
}
-static
-int processStream(const XML_Char *filename, XML_Parser parser)
+static int
+processStream(const XML_Char *filename, XML_Parser parser)
{
- int fd = topen(filename, O_BINARY|O_RDONLY);
- if (fd < 0) {
- tperror(filename);
- return 0;
+ /* passing NULL for filename means read intput from stdin */
+ int fd = 0; /* 0 is the fileno for stdin */
+
+ if (filename != NULL) {
+ fd = topen(filename, O_BINARY|O_RDONLY);
+ if (fd < 0) {
+ tperror(filename);
+ return 0;
+ }
}
for (;;) {
int nread;
char *buf = XML_GetBuffer(parser, READ_SIZE);
if (!buf) {
- close(fd);
- ftprintf(stderr, T("%s: out of memory\n"), filename);
+ if (filename != NULL)
+ close(fd);
+ ftprintf(stderr, T("%s: out of memory\n"),
+ filename != NULL ? filename : "xmlwf");
return 0;
}
nread = read(fd, buf, READ_SIZE);
if (nread < 0) {
- tperror(filename);
- close(fd);
+ tperror(filename != NULL ? filename : "STDIN");
+ if (filename != NULL)
+ close(fd);
return 0;
}
if (!XML_ParseBuffer(parser, nread, nread == 0)) {
- reportError(parser, filename);
- close(fd);
+ reportError(parser, filename != NULL ? filename : "STDIN");
+ if (filename != NULL)
+ close(fd);
return 0;
}
if (nread == 0) {
- close(fd);
+ if (filename != NULL)
+ close(fd);
break;;
}
}
return 1;
}
-static
-int externalEntityRefStream(XML_Parser parser,
- const XML_Char *context,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId)
+static int
+externalEntityRefStream(XML_Parser parser,
+ const XML_Char *context,
+ const XML_Char *base,
+ const XML_Char *systemId,
+ const XML_Char *publicId)
{
XML_Char *s;
const XML_Char *filename;
return ret;
}
-int XML_ProcessFile(XML_Parser parser,
- const XML_Char *filename,
- unsigned flags)
+int
+XML_ProcessFile(XML_Parser parser,
+ const XML_Char *filename,
+ unsigned flags)
{
int result;
#define NSSEP T('\001')
-static void characterData(void *userData, const XML_Char *s, int len)
+static void
+characterData(void *userData, const XML_Char *s, int len)
{
FILE *fp = userData;
for (; len > 0; --len, ++s) {
}
}
-static void attributeValue(FILE *fp, const XML_Char *s)
+static void
+attributeValue(FILE *fp, const XML_Char *s)
{
puttc(T('='), fp);
puttc(T('"'), fp);
/* Lexicographically comparing UTF-8 encoded attribute values,
is equivalent to lexicographically comparing based on the character number. */
-static int attcmp(const void *att1, const void *att2)
+static int
+attcmp(const void *att1, const void *att2)
{
return tcscmp(*(const XML_Char **)att1, *(const XML_Char **)att2);
}
-static void startElement(void *userData, const XML_Char *name,
- const XML_Char **atts)
+static void
+startElement(void *userData, const XML_Char *name, const XML_Char **atts)
{
int nAtts;
const XML_Char **p;
puttc(T('>'), fp);
}
-static void endElement(void *userData, const XML_Char *name)
+static void
+endElement(void *userData, const XML_Char *name)
{
FILE *fp = userData;
puttc(T('<'), fp);
puttc(T('>'), fp);
}
-static int nsattcmp(const void *p1, const void *p2)
+static int
+nsattcmp(const void *p1, const void *p2)
{
const XML_Char *att1 = *(const XML_Char **)p1;
const XML_Char *att2 = *(const XML_Char **)p2;
return tcscmp(att1, att2);
}
-static void startElementNS(void *userData, const XML_Char *name,
- const XML_Char **atts)
+static void
+startElementNS(void *userData, const XML_Char *name, const XML_Char **atts)
{
int nAtts;
int nsi;
puttc(T('>'), fp);
}
-static void endElementNS(void *userData, const XML_Char *name)
+static void
+endElementNS(void *userData, const XML_Char *name)
{
FILE *fp = userData;
const XML_Char *sep;
#ifndef W3C14N
-static void processingInstruction(void *userData, const XML_Char *target,
- const XML_Char *data)
+static void
+processingInstruction(void *userData, const XML_Char *target,
+ const XML_Char *data)
{
FILE *fp = userData;
puttc(T('<'), fp);
#endif /* not W3C14N */
-static void defaultCharacterData(XML_Parser parser, const XML_Char *s, int len)
+static void
+defaultCharacterData(XML_Parser parser, const XML_Char *s, int len)
{
XML_DefaultCurrent(parser);
}
-static void defaultStartElement(XML_Parser parser, const XML_Char *name,
- const XML_Char **atts)
+static void
+defaultStartElement(XML_Parser parser, const XML_Char *name,
+ const XML_Char **atts)
{
XML_DefaultCurrent(parser);
}
-static void defaultEndElement(XML_Parser parser, const XML_Char *name)
+static void
+defaultEndElement(XML_Parser parser, const XML_Char *name)
{
XML_DefaultCurrent(parser);
}
-static void defaultProcessingInstruction(XML_Parser parser,
- const XML_Char *target,
- const XML_Char *data)
+static void
+defaultProcessingInstruction(XML_Parser parser, const XML_Char *target,
+ const XML_Char *data)
{
XML_DefaultCurrent(parser);
}
-static void nopCharacterData(XML_Parser parser, const XML_Char *s, int len)
+static void
+nopCharacterData(XML_Parser parser, const XML_Char *s, int len)
{
}
-static void nopStartElement(XML_Parser parser, const XML_Char *name,
- const XML_Char **atts)
+static void
+nopStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts)
{
}
-static void nopEndElement(XML_Parser parser, const XML_Char *name)
+static void
+nopEndElement(XML_Parser parser, const XML_Char *name)
{
}
-static void nopProcessingInstruction(XML_Parser parser, const XML_Char *target,
- const XML_Char *data)
+static void
+nopProcessingInstruction(XML_Parser parser, const XML_Char *target,
+ const XML_Char *data)
{
}
-static void markup(XML_Parser parser, const XML_Char *s, int len)
+static void
+markup(XML_Parser parser, const XML_Char *s, int len)
{
FILE *fp = XML_GetUserData(parser);
for (; len > 0; --len, ++s)
puttc(*s, fp);
}
-static
-void metaLocation(XML_Parser parser)
+static void
+metaLocation(XML_Parser parser)
{
const XML_Char *uri = XML_GetBase(parser);
if (uri)
XML_GetCurrentColumnNumber(parser));
}
-static
-void metaStartDocument(XML_Parser parser)
+static void
+metaStartDocument(XML_Parser parser)
{
fputts(T("<document>\n"), XML_GetUserData(parser));
}
-static
-void metaEndDocument(XML_Parser parser)
+static void
+metaEndDocument(XML_Parser parser)
{
fputts(T("</document>\n"), XML_GetUserData(parser));
}
-static
-void metaStartElement(XML_Parser parser, const XML_Char *name,
- const XML_Char **atts)
+static void
+metaStartElement(XML_Parser parser, const XML_Char *name,
+ const XML_Char **atts)
{
FILE *fp = XML_GetUserData(parser);
const XML_Char **specifiedAttsEnd
fputts(T("/>\n"), fp);
}
-static
-void metaEndElement(XML_Parser parser, const XML_Char *name)
+static void
+metaEndElement(XML_Parser parser, const XML_Char *name)
{
FILE *fp = XML_GetUserData(parser);
ftprintf(fp, T("<endtag name=\"%s\""), name);
fputts(T("/>\n"), fp);
}
-static
-void metaProcessingInstruction(XML_Parser parser, const XML_Char *target,
- const XML_Char *data)
+static void
+metaProcessingInstruction(XML_Parser parser, const XML_Char *target,
+ const XML_Char *data)
{
FILE *fp = XML_GetUserData(parser);
ftprintf(fp, T("<pi target=\"%s\" data=\""), target);
fputts(T("/>\n"), fp);
}
-static
-void metaComment(XML_Parser parser, const XML_Char *data)
+static void
+metaComment(XML_Parser parser, const XML_Char *data)
{
FILE *fp = XML_GetUserData(parser);
fputts(T("<comment data=\""), fp);
fputts(T("/>\n"), fp);
}
-static
-void metaStartCdataSection(XML_Parser parser)
+static void
+metaStartCdataSection(XML_Parser parser)
{
FILE *fp = XML_GetUserData(parser);
fputts(T("<startcdata"), fp);
fputts(T("/>\n"), fp);
}
-static
-void metaEndCdataSection(XML_Parser parser)
+static void
+metaEndCdataSection(XML_Parser parser)
{
FILE *fp = XML_GetUserData(parser);
fputts(T("<endcdata"), fp);
fputts(T("/>\n"), fp);
}
-static
-void metaCharacterData(XML_Parser parser, const XML_Char *s, int len)
+static void
+metaCharacterData(XML_Parser parser, const XML_Char *s, int len)
{
FILE *fp = XML_GetUserData(parser);
fputts(T("<chars str=\""), fp);
fputts(T("/>\n"), fp);
}
-static
-void metaStartDoctypeDecl(XML_Parser parser,
- const XML_Char *doctypeName,
- const XML_Char *sysid,
- const XML_Char *pubid,
- int has_internal_subset)
+static void
+metaStartDoctypeDecl(XML_Parser parser,
+ const XML_Char *doctypeName,
+ const XML_Char *sysid,
+ const XML_Char *pubid,
+ int has_internal_subset)
{
FILE *fp = XML_GetUserData(parser);
ftprintf(fp, T("<startdoctype name=\"%s\""), doctypeName);
fputts(T("/>\n"), fp);
}
-static
-void metaEndDoctypeDecl(XML_Parser parser)
+static void
+metaEndDoctypeDecl(XML_Parser parser)
{
FILE *fp = XML_GetUserData(parser);
fputts(T("<enddoctype"), fp);
fputts(T("/>\n"), fp);
}
-static
-void metaNotationDecl(XML_Parser parser,
- const XML_Char *notationName,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId)
+static void
+metaNotationDecl(XML_Parser parser,
+ const XML_Char *notationName,
+ const XML_Char *base,
+ const XML_Char *systemId,
+ const XML_Char *publicId)
{
FILE *fp = XML_GetUserData(parser);
ftprintf(fp, T("<notation name=\"%s\""), notationName);
}
-static
-void metaEntityDecl(XML_Parser parser,
- const XML_Char *entityName,
- int is_param,
- const XML_Char *value,
- int value_length,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId,
- const XML_Char *notationName)
+static void
+metaEntityDecl(XML_Parser parser,
+ const XML_Char *entityName,
+ int is_param,
+ const XML_Char *value,
+ int value_length,
+ const XML_Char *base,
+ const XML_Char *systemId,
+ const XML_Char *publicId,
+ const XML_Char *notationName)
{
FILE *fp = XML_GetUserData(parser);
}
}
-static
-void metaStartNamespaceDecl(XML_Parser parser,
- const XML_Char *prefix,
- const XML_Char *uri)
+static void
+metaStartNamespaceDecl(XML_Parser parser,
+ const XML_Char *prefix,
+ const XML_Char *uri)
{
FILE *fp = XML_GetUserData(parser);
fputts(T("<startns"), fp);
fputts(T("/>\n"), fp);
}
-static
-void metaEndNamespaceDecl(XML_Parser parser, const XML_Char *prefix)
+static void
+metaEndNamespaceDecl(XML_Parser parser, const XML_Char *prefix)
{
FILE *fp = XML_GetUserData(parser);
if (!prefix)
ftprintf(fp, T("<endns prefix=\"%s\"/>\n"), prefix);
}
-static
-int unknownEncodingConvert(void *data, const char *p)
+static int
+unknownEncodingConvert(void *data, const char *p)
{
return codepageConvert(*(int *)data, p);
}
-static
-int unknownEncoding(void *userData,
- const XML_Char *name,
- XML_Encoding *info)
+static int
+unknownEncoding(void *userData, const XML_Char *name, XML_Encoding *info)
{
int cp;
static const XML_Char prefixL[] = T("windows-");
return 1;
}
-static
-int notStandalone(void *userData)
+static int
+notStandalone(void *userData)
{
return 0;
}
-static
-void showVersion(XML_Char *prog)
+static void
+showVersion(XML_Char *prog)
{
XML_Char *s = prog;
XML_Char ch;
ftprintf(stdout, T("%s using %s\n"), prog, XML_ExpatVersion());
}
-static
-void usage(const XML_Char *prog)
+static void
+usage(const XML_Char *prog, int rc)
{
ftprintf(stderr,
T("usage: %s [-n] [-p] [-r] [-s] [-w] [-x] [-d output-dir] "
"[-e encoding] file ...\n"), prog);
- exit(1);
+ exit(rc);
}
-int tmain(int argc, XML_Char **argv)
+int
+tmain(int argc, XML_Char **argv)
{
int i, j;
const XML_Char *outputDir = 0;
int useNamespaces = 0;
int requireStandalone = 0;
int paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
+ int useStdin = 0;
#ifdef _MSC_VER
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
case T('d'):
if (argv[i][j + 1] == T('\0')) {
if (++i == argc)
- usage(argv[0]);
+ usage(argv[0], 2);
outputDir = argv[i];
}
else
case T('e'):
if (argv[i][j + 1] == T('\0')) {
if (++i == argc)
- usage(argv[0]);
+ usage(argv[0], 2);
encoding = argv[i];
}
else
i++;
j = 0;
break;
+ case T('h'):
+ usage(argv[0], 0);
+ return 0;
case T('v'):
showVersion(argv[0]);
return 0;
}
/* fall through */
default:
- usage(argv[0]);
+ usage(argv[0], 2);
}
}
- if (i == argc)
- usage(argv[0]);
+ if (i == argc) {
+ useStdin = 1;
+ processFlags &= ~XML_MAP_FILE;
+ i--;
+ }
for (; i < argc; i++) {
FILE *fp = 0;
XML_Char *outName = 0;
XML_SetProcessingInstructionHandler(parser, nopProcessingInstruction);
}
else if (outputDir) {
- const XML_Char *file = argv[i];
+ const XML_Char *file = useStdin ? T("STDIN") : argv[i];
if (tcsrchr(file, T('/')))
file = tcsrchr(file, T('/')) + 1;
#ifdef WIN32
}
if (windowsCodePages)
XML_SetUnknownEncodingHandler(parser, unknownEncoding, 0);
- result = XML_ProcessFile(parser, argv[i], processFlags);
+ result = XML_ProcessFile(parser, useStdin ? NULL : argv[i], processFlags);
if (outputDir) {
if (outputType == 'm')
metaEndDocument(parser);