hi all,

so we've got this patch to libxml2 2.7.6 in the LibreOffice code base,
inherited from OOo.  it fixes a definite problem, which is that Windows
has a rather low maximum path length restriction, and there is a special
trick on NT whereby path names can be prefixed with "\\?\", in which
case the maximum length is 32k, which ought to be sufficient even for
bloated office suites :)

i'll attach the patch to the xmlCanonicPath function.  note that i
didn't write this and am by no means an expert on either Microsoftean
platforms or libxml so maybe it's not the best way to do it.  well, the
strlen call in there looks superfluous to me.

regards,
 michael
--- misc/libxml2-2.7.6/uri.c	2009-10-02 17:28:55.000000000 +0200
+++ misc/build/libxml2-2.7.6/uri.c	2011-02-24 13:47:19.349299000 +0100
@@ -2479,7 +2479,16 @@
     if (path == NULL)
 	return(NULL);
 
-    /* sanitize filename starting with // so it can be used as URI */
+#if defined(_WIN32) 	
+	//We must not change the backslashes to slashes if the the path starts with
+	// \\?\
+	//Those paths can be up to 32k characters long.
+	len = xmlStrlen(path);
+	if ((len > 3) && (path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') && (path[3] == '\\') )
+		return xmlStrdup((const xmlChar *) path);
+#endif
+
+	/* sanitize filename starting with // so it can be used as URI */
     if ((path[0] == '/') && (path[1] == '/') && (path[2] != '/'))
         path++;
 
--- misc/libxml2-2.7.6/xmlIO.c	2009-09-24 17:32:00.000000000 +0200
+++ misc/build/libxml2-2.7.6/xmlIO.c	2011-02-24 13:47:26.163762000 +0100
@@ -772,6 +772,11 @@
 
 #ifdef HAVE_STAT
 #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
+	//On Windows stat and wstat do not work with long pathname, 
+	//which start with '\\?\'
+	if ((xmlStrlen(path) > 3) && (path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') && (path[3] == '\\') )
+		return 1;
+
     if (xmlWrapStat(path, &stat_buffer) == -1)
         return 0;
 #else
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to