Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | [Bug 3092089]: [file normalize] can remove path components. [Bug 3587096] win vista/7: "can't find init.tcl" when called via junction. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8a291bcb448fc2bde0b4a8ef2c7a28cc |
User & Date: | jan.nijtmans 2013-01-08 10:27:42 |
Context
2013-01-08
| ||
13:03 | $builddir is a local variable check-in: d433d96843 user: jan.nijtmans tags: trunk | |
10:27 | [Bug 3092089]: [file normalize] can remove path components. [Bug 3587096] win vista/7: "can't find i... check-in: 8a291bcb44 user: jan.nijtmans tags: trunk | |
10:17 | [Bug 3092089]: [file normalize] can remove path components. [Bug 3587096] win vista/7: "can't find i... check-in: 55b5e89e13 user: jan.nijtmans tags: core-8-5-branch | |
08:08 | mSys doesn't have $PWD. Reported by Rene Zaumseil on Tcl Core list check-in: 0d1bc53480 user: jan.nijtmans tags: trunk | |
Changes
Changes to ChangeLog.
1 2 3 4 5 6 7 | 2013-01-07 Jan Nijtmans <[email protected]> * generic/tclOOStubLib.c: Restrict the stub library to only use * generic/tclTomMathStubLib.c: Tcl_PkgRequireEx, Tcl_ResetResult and Tcl_AppendResult, not any other function. This puts least restrictions on eventual Tcl 9 stubs re-organization, and it works on the widest range of Tcl versions. | > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | 2013-01-08 Jan Nijtmans <[email protected]> * win/tclWinFile.c: [Bug 3092089]: [file normalize] can remove path components. [Bug 3587096] win vista/7: "can't find init.tcl" when called via junction. 2013-01-07 Jan Nijtmans <[email protected]> * generic/tclOOStubLib.c: Restrict the stub library to only use * generic/tclTomMathStubLib.c: Tcl_PkgRequireEx, Tcl_ResetResult and Tcl_AppendResult, not any other function. This puts least restrictions on eventual Tcl 9 stubs re-organization, and it works on the widest range of Tcl versions. |
︙ | ︙ |
Changes to win/tclWinFile.c.
︙ | ︙ | |||
156 157 158 159 160 161 162 | static int NativeDev(const TCHAR *path); static int NativeStat(const TCHAR *path, Tcl_StatBuf *statPtr, int checkLinks); static unsigned short NativeStatMode(DWORD attr, int checkLinks, int isExec); static int NativeIsExec(const TCHAR *path); static int NativeReadReparse(const TCHAR *LinkDirectory, | | | 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | static int NativeDev(const TCHAR *path); static int NativeStat(const TCHAR *path, Tcl_StatBuf *statPtr, int checkLinks); static unsigned short NativeStatMode(DWORD attr, int checkLinks, int isExec); static int NativeIsExec(const TCHAR *path); static int NativeReadReparse(const TCHAR *LinkDirectory, REPARSE_DATA_BUFFER *buffer, DWORD desiredAccess); static int NativeWriteReparse(const TCHAR *LinkDirectory, REPARSE_DATA_BUFFER *buffer); static int NativeMatchType(int isDrive, DWORD attr, const TCHAR *nativeName, Tcl_GlobTypeData *types); static int WinIsDrive(const char *name, int nameLen); static int WinIsReserved(const char *path); static Tcl_Obj * WinReadLink(const TCHAR *LinkSource); |
︙ | ︙ | |||
440 441 442 443 444 445 446 | TclWinSymLinkCopyDirectory( const TCHAR *linkOrigPath, /* Existing junction - reparse point */ const TCHAR *linkCopyPath) /* Will become a duplicate junction */ { DUMMY_REPARSE_BUFFER dummy; REPARSE_DATA_BUFFER *reparseBuffer = (REPARSE_DATA_BUFFER *) &dummy; | | | 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 | TclWinSymLinkCopyDirectory( const TCHAR *linkOrigPath, /* Existing junction - reparse point */ const TCHAR *linkCopyPath) /* Will become a duplicate junction */ { DUMMY_REPARSE_BUFFER dummy; REPARSE_DATA_BUFFER *reparseBuffer = (REPARSE_DATA_BUFFER *) &dummy; if (NativeReadReparse(linkOrigPath, reparseBuffer, GENERIC_READ)) { return -1; } return NativeWriteReparse(linkCopyPath, reparseBuffer); } /* *-------------------------------------------------------------------- |
︙ | ︙ | |||
538 539 540 541 542 543 544 | Tcl_DString ds; const char *copy; attr = GetFileAttributes(linkDirPath); if (!(attr & FILE_ATTRIBUTE_REPARSE_POINT)) { goto invalidError; } | | | 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 | Tcl_DString ds; const char *copy; attr = GetFileAttributes(linkDirPath); if (!(attr & FILE_ATTRIBUTE_REPARSE_POINT)) { goto invalidError; } if (NativeReadReparse(linkDirPath, reparseBuffer, 0)) { return NULL; } switch (reparseBuffer->ReparseTag) { case 0x80000000|IO_REPARSE_TAG_SYMBOLIC_LINK: case IO_REPARSE_TAG_SYMBOLIC_LINK: case IO_REPARSE_TAG_MOUNT_POINT: |
︙ | ︙ | |||
659 660 661 662 663 664 665 | * *-------------------------------------------------------------------- */ static int NativeReadReparse( const TCHAR *linkDirPath, /* The junction to read */ | | > | | 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 | * *-------------------------------------------------------------------- */ static int NativeReadReparse( const TCHAR *linkDirPath, /* The junction to read */ REPARSE_DATA_BUFFER *buffer,/* Pointer to buffer. Cannot be NULL */ DWORD desiredAccess) { HANDLE hFile; DWORD returnedLength; hFile = CreateFile(linkDirPath, desiredAccess, 0, NULL, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hFile == INVALID_HANDLE_VALUE) { /* * Error creating directory. */ |
︙ | ︙ |