mirror of
https://gitlab.gnome.org/GNOME/libxml2
synced 2025-03-28 21:33:13 +00:00
Support long path names on WNT
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.
This commit is contained in:
parent
1bd45d1309
commit
55b899a23a
15
uri.c
15
uri.c
@ -2397,7 +2397,20 @@ xmlCanonicPath(const xmlChar *path)
|
||||
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.
|
||||
* Was added specifically for OpenOffice, those paths can't be converted
|
||||
* to URIs anyway.
|
||||
*/
|
||||
if ((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++;
|
||||
|
||||
|
14
xmlIO.c
14
xmlIO.c
@ -771,13 +771,21 @@ int
|
||||
xmlCheckFilename (const char *path)
|
||||
{
|
||||
#ifdef HAVE_STAT
|
||||
struct stat stat_buffer;
|
||||
struct stat stat_buffer;
|
||||
#endif
|
||||
if (path == NULL)
|
||||
return(0);
|
||||
if (path == NULL)
|
||||
return(0);
|
||||
|
||||
#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 ((path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') &&
|
||||
(path[3] == '\\') )
|
||||
return 1;
|
||||
|
||||
if (xmlWrapStat(path, &stat_buffer) == -1)
|
||||
return 0;
|
||||
#else
|
||||
|
Loading…
x
Reference in New Issue
Block a user