obsoleted xmlNormalizeWindowsPath
diff --git a/DOCBparser.c b/DOCBparser.c
index f84a0be..4673a6c 100644
--- a/DOCBparser.c
+++ b/DOCBparser.c
@@ -6031,7 +6031,7 @@
memset(inputStream, 0, sizeof(docbParserInput));
inputStream->filename = (char *)
- xmlNormalizeWindowsPath((const xmlChar *)filename);
+ xmlCanonicPath((const xmlChar *)filename);
inputStream->line = 1;
inputStream->col = 1;
inputStream->buf = buf;
diff --git a/HTMLparser.c b/HTMLparser.c
index 7f7bfdf..75e9229 100644
--- a/HTMLparser.c
+++ b/HTMLparser.c
@@ -42,6 +42,7 @@
#include <libxml/valid.h>
#include <libxml/xmlIO.h>
#include <libxml/globals.h>
+#include <libxml/uri.h>
#define HTML_MAX_NAMELEN 1000
#define HTML_PARSER_BIG_BUFFER_SIZE 1000
@@ -5346,7 +5347,7 @@
memset(inputStream, 0, sizeof(htmlParserInput));
inputStream->filename = (char *)
- xmlNormalizeWindowsPath((xmlChar *)filename);
+ xmlCanonicPath((xmlChar *)filename);
inputStream->line = 1;
inputStream->col = 1;
inputStream->buf = buf;
diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h
index cd4058c..16cc8e5 100644
--- a/include/libxml/xmlIO.h
+++ b/include/libxml/xmlIO.h
@@ -239,7 +239,11 @@
const char *ID,
xmlParserCtxtPtr ctxt);
-xmlChar *xmlNormalizeWindowsPath (const xmlChar *path);
+/*
+ * xmlNormalizeWindowsPath is obsolete, don't use it.
+ * Check xmlCanonicPath in uri.h for a better alternative.
+ */
+xmlChar * xmlNormalizeWindowsPath (const xmlChar *path);
int xmlCheckFilename (const char *path);
/**
diff --git a/parser.c b/parser.c
index 565265c..cf509fa 100644
--- a/parser.c
+++ b/parser.c
@@ -9154,7 +9154,7 @@
inputStream->filename = NULL;
else
inputStream->filename = (char *)
- xmlNormalizeWindowsPath((const xmlChar *) filename);
+ xmlCanonicPath((const xmlChar *) filename);
inputStream->buf = buf;
inputStream->base = inputStream->buf->buffer->content;
inputStream->cur = inputStream->buf->buffer->content;
@@ -10330,7 +10330,6 @@
xmlParserCtxtPtr ctxt;
xmlParserInputPtr inputStream;
char *directory = NULL;
- xmlChar *normalized;
ctxt = xmlNewParserCtxt();
if (ctxt == NULL) {
@@ -10340,26 +10339,18 @@
return(NULL);
}
- normalized = xmlNormalizeWindowsPath((const xmlChar *) filename);
- if (normalized == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
- inputStream = xmlLoadExternalEntity((char *) normalized, NULL, ctxt);
+ inputStream = xmlLoadExternalEntity(filename, NULL, ctxt);
if (inputStream == NULL) {
xmlFreeParserCtxt(ctxt);
- xmlFree(normalized);
return(NULL);
}
inputPush(ctxt, inputStream);
if ((ctxt->directory == NULL) && (directory == NULL))
- directory = xmlParserGetDirectory((char *) normalized);
+ directory = xmlParserGetDirectory(filename);
if ((ctxt->directory == NULL) && (directory != NULL))
ctxt->directory = directory;
- xmlFree(normalized);
-
return(ctxt);
}
diff --git a/xmlIO.c b/xmlIO.c
index 5f28849..82416f2 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -121,70 +121,17 @@
static int xmlOutputCallbackNr = 0;
static int xmlOutputCallbackInitialized = 0;
-/************************************************************************
- * *
- * Handling of Windows file paths *
- * *
- ************************************************************************/
-
-#define IS_WINDOWS_PATH(p) \
- ((p != NULL) && \
- (((p[0] >= 'a') && (p[0] <= 'z')) || \
- ((p[0] >= 'A') && (p[0] <= 'Z'))) && \
- (p[1] == ':') && ((p[2] == '/') || (p[2] == '\\')))
-
/**
* xmlNormalizeWindowsPath:
- * @path: a windows path like "C:/foo/bar"
*
- * Normalize a Windows path to make an URL from it
- *
- * Returns a new URI which must be freed by the caller or NULL
- * in case of error
+ * This function is obsolete. Please see xmlURIFromPath in uri.c for
+ * a better solution.
*/
xmlChar *
xmlNormalizeWindowsPath(const xmlChar *path)
{
- int len, i = 0, j;
- xmlChar *ret;
-
- if (path == NULL)
- return(NULL);
-
- len = xmlStrlen(path);
- if (!IS_WINDOWS_PATH(path)) {
- ret = xmlStrdup(path);
- if (ret == NULL)
- return(NULL);
- j = 0;
- } else {
- ret = xmlMalloc(len + 10);
- if (ret == NULL)
- return(NULL);
- ret[0] = 'f';
- ret[1] = 'i';
- ret[2] = 'l';
- ret[3] = 'e';
- ret[4] = ':';
- ret[5] = '/';
- ret[6] = '/';
- ret[7] = '/';
- j = 8;
- }
-
- while (i < len) {
- /* TODO: UTF8 conversion + URI escaping ??? */
- if (path[i] == '\\')
- ret[j] = '/';
- else
- ret[j] = path[i];
- i++;
- j++;
- }
- ret[j] = 0;
-
- return(ret);
+ return xmlCanonicPath(path);
}
/**
@@ -1768,14 +1715,11 @@
xmlParserInputBufferPtr ret;
int i = 0;
void *context = NULL;
- char *normalized;
if (xmlInputCallbackInitialized == 0)
xmlRegisterDefaultInputCallbacks();
if (URI == NULL) return(NULL);
- normalized = (char *) xmlNormalizeWindowsPath((const xmlChar *)URI);
- if (normalized == NULL) return(NULL);
#ifdef LIBXML_CATALOG_ENABLED
#endif
@@ -1788,13 +1732,12 @@
for (i = xmlInputCallbackNr - 1;i >= 0;i--) {
if ((xmlInputCallbackTable[i].matchcallback != NULL) &&
(xmlInputCallbackTable[i].matchcallback(URI) != 0)) {
- context = xmlInputCallbackTable[i].opencallback(normalized);
+ context = xmlInputCallbackTable[i].opencallback(URI);
if (context != NULL)
break;
}
}
}
- xmlFree(normalized);
if (context == NULL) {
return(NULL);
}
@@ -1834,7 +1777,6 @@
int i = 0;
void *context = NULL;
char *unescaped;
- char *normalized;
int is_http_uri = 0; /* Can't change if HTTP disabled */
@@ -1842,13 +1784,11 @@
xmlRegisterDefaultOutputCallbacks();
if (URI == NULL) return(NULL);
- normalized = (char *) xmlNormalizeWindowsPath((const xmlChar *)URI);
- if (normalized == NULL) return(NULL);
#ifdef LIBXML_HTTP_ENABLED
/* Need to prevent HTTP URI's from falling into zlib short circuit */
- is_http_uri = xmlIOHTTPMatch( normalized );
+ is_http_uri = xmlIOHTTPMatch( URI );
#endif
@@ -1857,7 +1797,7 @@
* Go in reverse to give precedence to user defined handlers.
* try with an unescaped version of the URI
*/
- unescaped = xmlURIUnescapeString(normalized, 0, NULL);
+ unescaped = xmlURIUnescapeString(URI, 0, NULL);
if (unescaped != NULL) {
#ifdef HAVE_ZLIB_H
if ((compression > 0) && (compression <= 9) && (is_http_uri == 0)) {
@@ -1870,7 +1810,6 @@
ret->closecallback = xmlGzfileClose;
}
xmlFree(unescaped);
- xmlFree(normalized);
return(ret);
}
}
@@ -1899,7 +1838,7 @@
if (context == NULL) {
#ifdef HAVE_ZLIB_H
if ((compression > 0) && (compression <= 9) && (is_http_uri == 0)) {
- context = xmlGzfileOpenW(normalized, compression);
+ context = xmlGzfileOpenW(URI, compression);
if (context != NULL) {
ret = xmlAllocOutputBuffer(encoder);
if (ret != NULL) {
@@ -1907,14 +1846,13 @@
ret->writecallback = xmlGzfileWrite;
ret->closecallback = xmlGzfileClose;
}
- xmlFree(normalized);
return(ret);
}
}
#endif
for (i = xmlOutputCallbackNr - 1;i >= 0;i--) {
if ((xmlOutputCallbackTable[i].matchcallback != NULL) &&
- (xmlOutputCallbackTable[i].matchcallback(normalized) != 0)) {
+ (xmlOutputCallbackTable[i].matchcallback(URI) != 0)) {
#if defined(LIBXML_HTTP_ENABLED) && defined(HAVE_ZLIB_H)
/* Need to pass compression parameter into HTTP open calls */
if (xmlOutputCallbackTable[i].matchcallback == xmlIOHTTPMatch)
@@ -1927,7 +1865,6 @@
}
}
}
- xmlFree(normalized);
if (context == NULL) {
return(NULL);