Commit:    a2e4404bc8155e6b6d9deefa22a172857d4b5e08
Author:    Anatoliy Belsky <a...@php.net>         Wed, 31 Oct 2012 22:41:03 
+0100
Parents:   a17559d4224eea0148ad67de9bb1cca22cbef7f6
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=a2e4404bc8155e6b6d9deefa22a172857d4b5e08

Log:
Fixed bug #63241 PHP fails to open Windows deduplicated files.

Fix by (daniel dot stelter-gliese at innogames dot de).
No test is supplied because the issue addresses
the new feature of the Windows Server 2012 and
would need a very specific filesystem setup.

Bugs:
https://bugs.php.net/63241

Changed paths:
  M  NEWS
  M  TSRM/tsrm_virtual_cwd.c


Diff:
diff --git a/NEWS b/NEWS
index 89921e8..9b87011 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ PHP                                                            
            NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2012, PHP 5.3.19
 
+- Core
+  . Fixed bug #63241 PHP fails to open Windows deduplicated files.
+    (daniel dot stelter-gliese at innogames dot de)
+
 - Libxml
   . Fixed bug #63389 (Missing context check on libxml_set_streams_context()
     causes memleak). (Laruence)
diff --git a/TSRM/tsrm_virtual_cwd.c b/TSRM/tsrm_virtual_cwd.c
index e734406..d4ee223 100644
--- a/TSRM/tsrm_virtual_cwd.c
+++ b/TSRM/tsrm_virtual_cwd.c
@@ -40,6 +40,10 @@
 #  define IO_REPARSE_TAG_SYMLINK 0xA000000C
 # endif
 
+# ifndef IO_REPARSE_TAG_DEDUP
+#  define IO_REPARSE_TAG_DEDUP   0x80000013
+# endif
+
 # ifndef VOLUME_NAME_NT
 #  define VOLUME_NAME_NT 0x2
 # endif
@@ -958,6 +962,11 @@ static int tsrm_realpath_r(char *path, int start, int len, 
int *ll, time_t *t, i
                                        return -1;
                                };
                                substitutename[substitutename_len] = 0;
+                       }
+                       else if (pbuffer->ReparseTag == IO_REPARSE_TAG_DEDUP) {
+                               isabsolute = 1;
+                               memcpy(substitutename, path, len + 1);
+                               substitutename_len = len;
                        } else {
                                tsrm_free_alloca(pbuffer, use_heap_large);
                                return -1;


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to