summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2013-02-11 16:11:33 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2013-02-11 16:11:33 (GMT)
commit492b608293cd42e24cfcf4200355b723bb0c2833 (patch)
tree5435e44ce598e2f822b4a69a820d4c52f919f211
parent034055be09a66ca16385cc4b9e243179d66f075a (diff)
parent7d50b7b1515618501f8eaf3d76ea80c6c796a87d (diff)
downloadtcl-492b608293cd42e24cfcf4200355b723bb0c2833.zip
tcl-492b608293cd42e24cfcf4200355b723bb0c2833.tar.gz
tcl-492b608293cd42e24cfcf4200355b723bb0c2833.tar.bz2
Merge core-8-4-branch
-rw-r--r--ChangeLog19
-rw-r--r--library/platform/pkgIndex.tcl2
-rw-r--r--library/platform/platform.tcl4
-rw-r--r--unix/tclUnixCompat.c8
-rw-r--r--win/tclWinFile.c12
5 files changed, 42 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 2ee5bbe..27c09e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2013-02-05 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinFile.c: [Bug 3603434] Make sure TclpObjNormalizePath()
+ properly declares "a:/" to be normalized, even when no "A:" drive is
+ present on the system.
+
+2013-01-30 Andreas Kupries <andreask@activestate.com>
+
+ * library/platform/platform.tcl (::platform::LibcVersion): See
+ * library/platform/pkgIndex.tcl: [Bug 3599098]: Fixed the RE
+ extracting the version to avoid issues with recent changes to
+ the glibc banner. Now targeting a less variable part of the
+ string. Bumped package to version 1.0.11.
+
+2013-01-26 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tclUnixCompat.c: [Bug 3601804]: platformCPUID segmentation
+ fault on Darwin.
+
2013-01-16 Jan Nijtmans <nijtmans@users.sf.net>
* Makefile.in: Enable win32 build with -DTCL_NO_DEPRECATED, just
diff --git a/library/platform/pkgIndex.tcl b/library/platform/pkgIndex.tcl
index 220a67b..b882e4f 100644
--- a/library/platform/pkgIndex.tcl
+++ b/library/platform/pkgIndex.tcl
@@ -1,3 +1,3 @@
-package ifneeded platform 1.0.10 [list source [file join $dir platform.tcl]]
+package ifneeded platform 1.0.11 [list source [file join $dir platform.tcl]]
package ifneeded platform::shell 1.1.4 [list source [file join $dir shell.tcl]]
diff --git a/library/platform/platform.tcl b/library/platform/platform.tcl
index dd2e66b..a1a728b 100644
--- a/library/platform/platform.tcl
+++ b/library/platform/platform.tcl
@@ -256,7 +256,7 @@ proc ::platform::LibcVersion {base _->_ vv} {
if {![catch {
set vdata [lindex [split [exec $libc] \n] 0]
}]} {
- regexp {([0-9]+(\.[0-9]+)*)} $vdata -> v
+ regexp {version ([0-9]+(\.[0-9]+)*), by} $vdata -> v
foreach {major minor} [split $v .] break
set v glibc${major}.${minor}
return 1
@@ -368,7 +368,7 @@ proc ::platform::patterns {id} {
# ### ### ### ######### ######### #########
## Ready
-package provide platform 1.0.10
+package provide platform 1.0.11
# ### ### ### ######### ######### #########
## Demo application
diff --git a/unix/tclUnixCompat.c b/unix/tclUnixCompat.c
index 5a3ccd4..4ca7da9 100644
--- a/unix/tclUnixCompat.c
+++ b/unix/tclUnixCompat.c
@@ -693,11 +693,19 @@ TclWinCPUID(
/* See: <http://en.wikipedia.org/wiki/CPUID> */
#if defined(HAVE_CPUID)
+#if defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64)
+ __asm__ __volatile__("movq %%rbx, %%rsi \n\t" /* save %rbx */
+ "cpuid \n\t"
+ "xchgq %%rsi, %%rbx \n\t" /* restore the old %rbx */
+ : "=a"(regsPtr[0]), "=S"(regsPtr[1]), "=c"(regsPtr[2]), "=d"(regsPtr[3])
+ : "a"(index));
+#else
__asm__ __volatile__("mov %%ebx, %%esi \n\t" /* save %ebx */
"cpuid \n\t"
"xchg %%esi, %%ebx \n\t" /* restore the old %ebx */
: "=a"(regsPtr[0]), "=S"(regsPtr[1]), "=c"(regsPtr[2]), "=d"(regsPtr[3])
: "a"(index));
+#endif
status = TCL_OK;
#endif
return status;
diff --git a/win/tclWinFile.c b/win/tclWinFile.c
index d1078f5..8ea6548 100644
--- a/win/tclWinFile.c
+++ b/win/tclWinFile.c
@@ -2335,6 +2335,12 @@ TclpObjNormalizePath(interp, pathPtr, nextCheckpoint)
}
Tcl_DStringAppend(&dsNorm, nativePath, len);
lastValidPathEnd = currentPathEndPosition;
+ } else if (nextCheckpoint == 0) {
+ /* Path starts with a drive designation
+ * that's not actually on the system.
+ * We still must normalize up past the
+ * first separator. [Bug 3603434] */
+ currentPathEndPosition++;
}
}
Tcl_DStringFree(&ds);
@@ -2417,6 +2423,12 @@ TclpObjNormalizePath(interp, pathPtr, nextCheckpoint)
Tcl_DStringAppend(&dsNorm, nativePath,
sizeof(WCHAR)*len);
lastValidPathEnd = currentPathEndPosition;
+ } else if (nextCheckpoint == 0) {
+ /* Path starts with a drive designation
+ * that's not actually on the system.
+ * We still must normalize up past the
+ * first separator. [Bug 3603434] */
+ currentPathEndPosition++;
}
}
Tcl_DStringFree(&ds);