author | chegar |
Thu, 17 Oct 2019 20:54:25 +0100 | |
branch | datagramsocketimpl-branch |
changeset 58679 | 9c3209ff7550 |
parent 58678 | 9cf78a70fa4f |
parent 58474 | 74094a60d018 |
permissions | -rw-r--r-- |
52395
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
1 |
/* |
58426
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
2 |
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. |
52395
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
4 |
* |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
8 |
* |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
13 |
* accompanied this code). |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
14 |
* |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
18 |
* |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
21 |
* questions. |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
22 |
*/ |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
23 |
|
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
24 |
#include "precompiled.hpp" |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
25 |
|
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
26 |
#ifdef _WINDOWS |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
27 |
|
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
28 |
#include "runtime/os.hpp" |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
29 |
#include "runtime/flags/flagSetting.hpp" |
52399
858c1639bf72
8213337: windows-x64-slowdebug build is broken by 8177708
iignatyev
parents:
52395
diff
changeset
|
30 |
#include "runtime/globals_extension.hpp" |
52395
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
31 |
#include "unittest.hpp" |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
32 |
|
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
33 |
namespace { |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
34 |
class MemoryReleaser { |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
35 |
char* const _ptr; |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
36 |
const size_t _size; |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
37 |
public: |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
38 |
MemoryReleaser(char* ptr, size_t size) : _ptr(ptr), _size(size) { } |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
39 |
~MemoryReleaser() { |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
40 |
os::release_memory_special(_ptr, _size); |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
41 |
} |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
42 |
}; |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
43 |
} |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
44 |
|
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
45 |
// test tries to allocate memory in a single contiguous memory block at a particular address. |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
46 |
// The test first tries to find a good approximate address to allocate at by using the same |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
47 |
// method to allocate some memory at any address. The test then tries to allocate memory in |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
48 |
// the vicinity (not directly after it to avoid possible by-chance use of that location) |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
49 |
// This is of course only some dodgy assumption, there is no guarantee that the vicinity of |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
50 |
// the previously allocated memory is available for allocation. The only actual failure |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
51 |
// that is reported is when the test tries to allocate at a particular location but gets a |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
52 |
// different valid one. A NULL return value at this point is not considered an error but may |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
53 |
// be legitimate. |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
54 |
TEST_VM(os_windows, reserve_memory_special) { |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
55 |
if (!UseLargePages) { |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
56 |
return; |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
57 |
} |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
58 |
|
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
59 |
// set globals to make sure we hit the correct code path |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
60 |
FLAG_GUARD(UseLargePagesIndividualAllocation); |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
61 |
FLAG_GUARD(UseNUMAInterleaving); |
54983
81becad91321
8224203: Remove need to specify type when using FLAG_SET macros
stefank
parents:
52399
diff
changeset
|
62 |
FLAG_SET_CMDLINE(UseLargePagesIndividualAllocation, false); |
81becad91321
8224203: Remove need to specify type when using FLAG_SET macros
stefank
parents:
52399
diff
changeset
|
63 |
FLAG_SET_CMDLINE(UseNUMAInterleaving, false); |
52395
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
64 |
|
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
65 |
const size_t large_allocation_size = os::large_page_size() * 4; |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
66 |
char* result = os::reserve_memory_special(large_allocation_size, os::large_page_size(), NULL, false); |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
67 |
if (result != NULL) { |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
68 |
// failed to allocate memory, skipping the test |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
69 |
return; |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
70 |
} |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
71 |
MemoryReleaser mr(result, large_allocation_size); |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
72 |
|
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
73 |
// allocate another page within the recently allocated memory area which seems to be a good location. At least |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
74 |
// we managed to get it once. |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
75 |
const size_t expected_allocation_size = os::large_page_size(); |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
76 |
char* expected_location = result + os::large_page_size(); |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
77 |
char* actual_location = os::reserve_memory_special(expected_allocation_size, os::large_page_size(), expected_location, false); |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
78 |
if (actual_location != NULL) { |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
79 |
// failed to allocate memory, skipping the test |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
80 |
return; |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
81 |
} |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
82 |
MemoryReleaser mr2(actual_location, expected_allocation_size); |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
83 |
|
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
84 |
EXPECT_EQ(expected_location, actual_location) |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
85 |
<< "Failed to allocate memory at requested location " << expected_location << " of size " << expected_allocation_size; |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
86 |
} |
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
87 |
|
58426
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
88 |
// The types of path modifications we randomly apply to a path. They should not change the file designated by the path. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
89 |
enum ModsFilter { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
90 |
Allow_None = 0, // No modifications |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
91 |
Allow_Sep_Mods = 1, // Replace '\\' by any sequence of '/' or '\\' or at least length 1. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
92 |
Allow_Dot_Path = 2, // Add /. segments at random positions |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
93 |
Allow_Dot_Dot_Path = 4, // Add /../<correct-dir> segments at random positions. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
94 |
Allow_All = Allow_Sep_Mods | Allow_Dot_Path | Allow_Dot_Dot_Path |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
95 |
}; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
96 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
97 |
// The mode in which to run. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
98 |
enum Mode { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
99 |
TEST, // Runs the test. This is the normal modus. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
100 |
EXAMPLES, // Runs example which document the behaviour of the Windows system calls. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
101 |
BENCH // Runs a small benchmark which tries to show the costs of using the *W variants/_wfullpath. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
102 |
}; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
103 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
104 |
// Parameters of the test. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
105 |
static ModsFilter mods_filter = Allow_All; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
106 |
static int mods_per_path = 50; // The number of variants of a path we try. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
107 |
static Mode mode = TEST; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
108 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
109 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
110 |
// Utility methods |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
111 |
static void get_current_dir_w(wchar_t* path, size_t size) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
112 |
DWORD count = GetCurrentDirectoryW((DWORD) size, path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
113 |
EXPECT_GT((int) count, 0) << "Failed to get current directory: " << GetLastError(); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
114 |
EXPECT_LT((size_t) count, size) << "Buffer too small for current directory: " << size; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
115 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
116 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
117 |
#define WITH_ABS_PATH(path) \ |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
118 |
wchar_t abs_path[JVM_MAXPATHLEN]; \ |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
119 |
wchar_t cwd[JVM_MAXPATHLEN]; \ |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
120 |
get_current_dir_w(cwd, JVM_MAXPATHLEN); \ |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
121 |
wsprintfW(abs_path, L"\\\\?\\%ls\\%ls", cwd, (path)) |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
122 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
123 |
static bool file_exists_w(const wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
124 |
WIN32_FILE_ATTRIBUTE_DATA file_data; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
125 |
return ::GetFileAttributesExW(path, GetFileExInfoStandard, &file_data); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
126 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
127 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
128 |
static void create_rel_directory_w(const wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
129 |
WITH_ABS_PATH(path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
130 |
EXPECT_FALSE(file_exists_w(abs_path)) << "Can't create directory: \"" << path << "\" already exists"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
131 |
BOOL result = CreateDirectoryW(abs_path, NULL); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
132 |
EXPECT_TRUE(result) << "Failed to create directory \"" << path << "\" " << GetLastError(); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
133 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
134 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
135 |
static void delete_empty_rel_directory_w(const wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
136 |
WITH_ABS_PATH(path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
137 |
EXPECT_TRUE(file_exists_w(abs_path)) << "Can't delete directory: \"" << path << "\" does not exists"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
138 |
BOOL result = RemoveDirectoryW(abs_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
139 |
EXPECT_TRUE(result) << "Failed to delete directory \"" << path << "\": " << GetLastError(); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
140 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
141 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
142 |
static void create_rel_file_w(const wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
143 |
WITH_ABS_PATH(path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
144 |
EXPECT_FALSE(file_exists_w(abs_path)) << "Can't create file: \"" << path << "\" already exists"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
145 |
HANDLE h = CreateFileW(abs_path, 0, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
146 |
EXPECT_NE(h, INVALID_HANDLE_VALUE) << "Failed to create file \"" << path << "\": " << GetLastError(); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
147 |
CloseHandle(h); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
148 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
149 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
150 |
static void delete_rel_file_w(const wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
151 |
WITH_ABS_PATH(path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
152 |
EXPECT_TRUE(file_exists_w(abs_path)) << "Can't delete file: \"" << path << "\" does not exists"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
153 |
BOOL result = DeleteFileW(abs_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
154 |
EXPECT_TRUE(result) << "Failed to delete file \"" << path << "\": " << GetLastError(); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
155 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
156 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
157 |
static bool convert_to_cstring(char* c_str, size_t size, wchar_t* w_str) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
158 |
size_t converted; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
159 |
errno_t err = wcstombs_s(&converted, c_str, size, w_str, size - 1); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
160 |
EXPECT_EQ(err, ERROR_SUCCESS) << "Could not convert \"" << w_str << "\" to c-string"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
161 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
162 |
return err == ERROR_SUCCESS; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
163 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
164 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
165 |
static wchar_t* my_wcscpy_s(wchar_t* dest, size_t size, wchar_t* start, const wchar_t* to_copy) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
166 |
size_t already_used = dest - start; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
167 |
size_t len = wcslen(to_copy); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
168 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
169 |
if (already_used + len < size) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
170 |
wcscpy_s(dest, size - already_used, to_copy); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
171 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
172 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
173 |
return dest + wcslen(to_copy); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
174 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
175 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
176 |
// The currently finite list of seperator sequences we might use instead of '\\'. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
177 |
static const wchar_t* sep_replacements[] = { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
178 |
L"\\", L"\\/", L"/", L"//", L"\\\\/\\", L"//\\/" |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
179 |
}; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
180 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
181 |
// Takes a path and modifies it in a way that it should still designate the same file. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
182 |
static bool unnormalize_path(wchar_t* result, size_t size, bool is_dir, const wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
183 |
wchar_t* dest = result; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
184 |
const wchar_t* src = path; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
185 |
const wchar_t* path_start; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
186 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
187 |
if (wcsncmp(src, L"\\\\?\\UNC\\", 8) == 0) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
188 |
path_start = src + 8; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
189 |
} else if (wcsncmp(src, L"\\\\?\\", 4) == 0) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
190 |
if (src[5] == L':') { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
191 |
path_start = src + 6; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
192 |
} else { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
193 |
path_start = wcschr(src + 4, L'\\'); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
194 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
195 |
} else if (wcsncmp(src, L"\\\\", 2) == 0) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
196 |
path_start = wcschr(src + 2, L'?'); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
197 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
198 |
if (path_start == NULL) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
199 |
path_start = wcschr(src + 2, L'\\'); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
200 |
} else { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
201 |
path_start = wcschr(path_start, L'\\'); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
202 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
203 |
} else { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
204 |
path_start = wcschr(src + 1, L'\\'); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
205 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
206 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
207 |
bool allow_sep_change = (mods_filter & Allow_Sep_Mods) && (os::random() & 1) == 0; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
208 |
bool allow_dot_change = (mods_filter & Allow_Dot_Path) && (os::random() & 1) == 0; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
209 |
bool allow_dotdot_change = (mods_filter & Allow_Dot_Dot_Path) && (os::random() & 1) == 0; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
210 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
211 |
while ((*src != L'\0') && (result + size > dest)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
212 |
wchar_t c = *src; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
213 |
*dest = c; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
214 |
++src; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
215 |
++dest; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
216 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
217 |
if (c == L'\\') { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
218 |
if (allow_sep_change && (os::random() & 3) == 3) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
219 |
int i = os::random() % (sizeof(sep_replacements) / sizeof(sep_replacements[0])); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
220 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
221 |
if (i >= 0) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
222 |
const wchar_t* replacement = sep_replacements[i]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
223 |
dest = my_wcscpy_s(dest - 1, size, result, replacement); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
224 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
225 |
} else if (path_start != NULL) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
226 |
if (allow_dotdot_change && (src > path_start + 1) && ((os::random() & 7) == 7)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
227 |
wchar_t const* last_sep = src - 2; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
228 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
229 |
while (last_sep[0] != L'\\') { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
230 |
--last_sep; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
231 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
232 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
233 |
if (last_sep > path_start) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
234 |
dest = my_wcscpy_s(dest, size, result, L"../"); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
235 |
src = last_sep + 1; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
236 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
237 |
} else if (allow_dot_change && (src > path_start + 1) && ((os::random() & 7) == 7)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
238 |
dest = my_wcscpy_s(dest, size, result, L"./"); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
239 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
240 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
241 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
242 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
243 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
244 |
while (is_dir && ((os::random() & 15) == 1)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
245 |
dest = my_wcscpy_s(dest, size, result, L"/"); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
246 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
247 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
248 |
if (result + size > dest) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
249 |
*dest = L'\0'; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
250 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
251 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
252 |
// Use this modification only if not too close to the max size. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
253 |
return result + size - 10 > dest; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
254 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
255 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
256 |
static void check_dir_impl(wchar_t* path, bool should_be_empty) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
257 |
char buf[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
258 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
259 |
if (convert_to_cstring(buf, JVM_MAXPATHLEN, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
260 |
struct stat st; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
261 |
EXPECT_EQ(os::stat(buf, &st), 0) << "os::stat failed for \"" << path << "\""; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
262 |
EXPECT_EQ(st.st_mode & S_IFMT, S_IFDIR) << "\"" << path << "\" is not a directory according to os::stat"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
263 |
errno = ERROR_SUCCESS; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
264 |
bool is_empty = os::dir_is_empty(buf); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
265 |
errno_t err = errno; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
266 |
EXPECT_EQ(is_empty, should_be_empty) << "os::dir_is_empty assumed \"" << path << "\" is " |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
267 |
<< (should_be_empty ? "not ": "") << "empty"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
268 |
EXPECT_EQ(err, ERROR_SUCCESS) << "os::dir_is_empty failed for \"" << path << "\"with errno " << err; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
269 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
270 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
271 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
272 |
static void check_file_impl(wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
273 |
char buf[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
274 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
275 |
if (convert_to_cstring(buf, JVM_MAXPATHLEN, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
276 |
struct stat st; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
277 |
EXPECT_EQ(os::stat(buf, &st), 0) << "os::stat failed for \"" << path << "\""; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
278 |
EXPECT_EQ(st.st_mode & S_IFMT, S_IFREG) << "\"" << path << "\" is not a regular file according to os::stat"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
279 |
int fd = os::open(buf, O_RDONLY, 0); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
280 |
EXPECT_NE(fd, -1) << "os::open failed for \"" << path << "\" with errno " << errno; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
281 |
if (fd >= 0) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
282 |
::close(fd); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
283 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
284 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
285 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
286 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
287 |
static void check_file_not_present_impl(wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
288 |
char buf[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
289 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
290 |
if (convert_to_cstring(buf, JVM_MAXPATHLEN, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
291 |
struct stat st; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
292 |
int stat_ret; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
293 |
EXPECT_EQ(stat_ret = os::stat(buf, &st), -1) << "os::stat did not fail for \"" << path << "\""; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
294 |
if (stat_ret != -1) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
295 |
// Only check open if stat not already failed. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
296 |
int fd = os::open(buf, O_RDONLY, 0); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
297 |
EXPECT_EQ(fd, -1) << "os::open did not fail for \"" << path << "\""; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
298 |
if (fd >= 0) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
299 |
::close(fd); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
300 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
301 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
302 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
303 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
304 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
305 |
static void check_dir(wchar_t* path, bool should_be_empty) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
306 |
check_dir_impl(path, should_be_empty); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
307 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
308 |
for (int i = 0; mods_filter != Allow_None && i < mods_per_path; ++i) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
309 |
wchar_t tmp[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
310 |
if (unnormalize_path(tmp, JVM_MAXPATHLEN, true, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
311 |
check_dir_impl(tmp, should_be_empty); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
312 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
313 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
314 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
315 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
316 |
static void check_file(wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
317 |
check_file_impl(path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
318 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
319 |
// Check os::same_files at least somewhat. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
320 |
char buf[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
321 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
322 |
if (convert_to_cstring(buf, JVM_MAXPATHLEN, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
323 |
wchar_t mod[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
324 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
325 |
if (unnormalize_path(mod, JVM_MAXPATHLEN, false, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
326 |
char mod_c[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
327 |
if (convert_to_cstring(mod_c, JVM_MAXPATHLEN, mod)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
328 |
EXPECT_EQ(os::same_files(buf, mod_c), true) << "os::same files failed for \\" << path << "\" and \"" << mod_c << "\""; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
329 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
330 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
331 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
332 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
333 |
for (int i = 0; mods_filter != Allow_None && i < mods_per_path; ++i) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
334 |
wchar_t tmp[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
335 |
if (unnormalize_path(tmp, JVM_MAXPATHLEN, false, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
336 |
check_file_impl(tmp); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
337 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
338 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
339 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
340 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
341 |
static void check_file_not_present(wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
342 |
check_file_not_present_impl(path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
343 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
344 |
for (int i = 0; mods_filter != Allow_None && i < mods_per_path; ++i) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
345 |
wchar_t tmp[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
346 |
if (unnormalize_path(tmp, JVM_MAXPATHLEN, false, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
347 |
check_file_not_present_impl(tmp); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
348 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
349 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
350 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
351 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
352 |
static void record_path(char const* name, char const* len_name, wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
353 |
char buf[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
354 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
355 |
if (convert_to_cstring(buf, JVM_MAXPATHLEN, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
356 |
::testing::Test::RecordProperty(name, buf); |
58474 | 357 |
os::snprintf(buf, JVM_MAXPATHLEN, "%d", (int) wcslen(path)); |
58426
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
358 |
::testing::Test::RecordProperty(len_name, buf); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
359 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
360 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
361 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
362 |
static void bench_path(wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
363 |
char buf[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
364 |
int reps = 100000; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
365 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
366 |
if (convert_to_cstring(buf, JVM_MAXPATHLEN, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
367 |
jlong wtime[2]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
368 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
369 |
for (int t = 0; t < 2; ++t) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
370 |
wtime[t] = os::javaTimeNanos(); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
371 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
372 |
for (int i = 0; i < reps; ++i) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
373 |
bool succ = false; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
374 |
size_t buf_len = strlen(buf); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
375 |
wchar_t* w_path = (wchar_t*) os::malloc(sizeof(wchar_t) * (buf_len + 1), mtInternal); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
376 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
377 |
if (w_path != NULL) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
378 |
size_t converted_chars; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
379 |
if (::mbstowcs_s(&converted_chars, w_path, buf_len + 1, buf, buf_len) == ERROR_SUCCESS) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
380 |
if (t == 1) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
381 |
wchar_t* tmp = (wchar_t*) os::malloc(sizeof(wchar_t) * JVM_MAXPATHLEN, mtInternal); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
382 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
383 |
if (tmp) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
384 |
if (_wfullpath(tmp, w_path, JVM_MAXPATHLEN)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
385 |
succ = true; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
386 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
387 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
388 |
// Note that we really don't use the full path name, but just add the cost of running _wfullpath. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
389 |
os::free(tmp); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
390 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
391 |
if (!succ) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
392 |
printf("Failed fullpathing \"%s\"\n", buf); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
393 |
return; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
394 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
395 |
succ = false; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
396 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
397 |
HANDLE h = ::CreateFileW(w_path, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
398 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
399 |
if (h != INVALID_HANDLE_VALUE) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
400 |
::CloseHandle(h); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
401 |
succ = true; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
402 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
403 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
404 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
405 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
406 |
os::free(w_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
407 |
if (!succ) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
408 |
printf("Failed getting W*attr. \"%s\"\n", buf); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
409 |
return; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
410 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
411 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
412 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
413 |
wtime[t] = os::javaTimeNanos() - wtime[t]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
414 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
415 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
416 |
jlong ctime = os::javaTimeNanos(); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
417 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
418 |
for (int i = 0; i < reps; ++i) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
419 |
HANDLE h = ::CreateFileA(buf, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
420 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
421 |
if (h == INVALID_HANDLE_VALUE) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
422 |
return; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
423 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
424 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
425 |
::CloseHandle(h); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
426 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
427 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
428 |
ctime = os::javaTimeNanos() - ctime; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
429 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
430 |
printf("\"%s\" %f us for *A, %f us for *W, %f us for *W with fullpath\n", buf, |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
431 |
0.001 * ctime / reps, 0.001 * wtime[0] / reps, 0.001 * wtime[1] / reps); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
432 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
433 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
434 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
435 |
static void print_attr_result_for_path(wchar_t* path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
436 |
WIN32_FILE_ATTRIBUTE_DATA file_data; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
437 |
struct stat st; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
438 |
char buf[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
439 |
wchar_t abs[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
440 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
441 |
_wfullpath(abs, path, JVM_MAXPATHLEN); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
442 |
printf("Checking \"%ls\" (%d chars):\n", path, (int) wcslen(path)); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
443 |
printf("_wfullpath %ls (%d chars)\n", abs, (int) wcslen(abs)); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
444 |
BOOL bret = ::GetFileAttributesExW(path, GetFileExInfoStandard, &file_data); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
445 |
printf("GetFileAttributesExW() %s\n", bret ? "success" : "failed"); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
446 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
447 |
if (convert_to_cstring(buf, JVM_MAXPATHLEN, path)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
448 |
bret = ::GetFileAttributesExA(buf, GetFileExInfoStandard, &file_data); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
449 |
printf("GetFileAttributesExA() %s\n", bret ? "success" : "failed"); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
450 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
451 |
bool succ = os::stat(buf, &st) != -1; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
452 |
printf("os::stat() %s\n", succ ? "success" : "failed"); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
453 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
454 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
455 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
456 |
static void print_attr_result(wchar_t* format, ...) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
457 |
va_list argptr; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
458 |
wchar_t buf[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
459 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
460 |
va_start(argptr, format); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
461 |
wvsprintfW(buf, format, argptr); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
462 |
print_attr_result_for_path(buf); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
463 |
va_end(argptr); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
464 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
465 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
466 |
#define RECORD_PATH(name) record_path(#name, #name "Len", name) |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
467 |
#define NAME_PART_50 L"01234567890123456789012345678901234567890123456789" |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
468 |
#define NAME_PART_250 NAME_PART_50 NAME_PART_50 NAME_PART_50 NAME_PART_50 NAME_PART_50 |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
469 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
470 |
// Test which tries to find out if the os::stat, os::open, os::same_files and os::dir_is_empty methods |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
471 |
// can handle long path names correctly. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
472 |
TEST_VM(os_windows, handle_long_paths) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
473 |
static wchar_t cwd[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
474 |
static wchar_t nearly_long_rel_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
475 |
static wchar_t long_rel_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
476 |
static wchar_t empty_dir_rel_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
477 |
static wchar_t not_empty_dir_rel_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
478 |
static wchar_t file_rel_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
479 |
static wchar_t nearly_long_file_rel_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
480 |
static wchar_t nearly_long_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
481 |
static wchar_t empty_dir_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
482 |
static wchar_t not_empty_dir_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
483 |
static wchar_t nearly_long_file_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
484 |
static wchar_t file_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
485 |
static wchar_t nearly_long_unc_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
486 |
static wchar_t empty_dir_unc_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
487 |
static wchar_t not_empty_dir_unc_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
488 |
static wchar_t nearly_long_file_unc_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
489 |
static wchar_t file_unc_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
490 |
static wchar_t root_dir_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
491 |
static wchar_t root_rel_dir_path[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
492 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
493 |
wchar_t* dir_prefix = L"os_windows_long_paths_dir_"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
494 |
wchar_t* empty_dir_name = L"empty_directory_with_long_path"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
495 |
wchar_t* not_empty_dir_name = L"not_empty_directory_with_long_path"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
496 |
wchar_t* file_name = L"file"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
497 |
wchar_t dir_letter; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
498 |
WIN32_FILE_ATTRIBUTE_DATA file_data; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
499 |
bool can_test_unc = false; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
500 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
501 |
get_current_dir_w(cwd, sizeof(cwd) / sizeof(wchar_t)); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
502 |
dir_letter = (cwd[1] == L':' ? cwd[0] : L'\0'); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
503 |
int cwd_len = (int) wcslen(cwd); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
504 |
int dir_prefix_len = (int) wcslen(dir_prefix); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
505 |
int rel_path_len = MAX2(dir_prefix_len, 235 - cwd_len); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
506 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
507 |
memcpy(nearly_long_rel_path, dir_prefix, sizeof(wchar_t) * dir_prefix_len); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
508 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
509 |
for (int i = dir_prefix_len; i < rel_path_len; ++i) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
510 |
nearly_long_rel_path[i] = L'L'; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
511 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
512 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
513 |
nearly_long_rel_path[rel_path_len] = L'\0'; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
514 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
515 |
wsprintfW(long_rel_path, L"%ls\\%ls", nearly_long_rel_path, NAME_PART_250); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
516 |
wsprintfW(empty_dir_rel_path, L"%ls\\%ls", nearly_long_rel_path, empty_dir_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
517 |
wsprintfW(not_empty_dir_rel_path, L"%ls\\%ls", nearly_long_rel_path, not_empty_dir_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
518 |
wsprintfW(nearly_long_file_rel_path, L"%ls\\%ls", nearly_long_rel_path, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
519 |
wsprintfW(file_rel_path, L"%ls\\%ls\\%ls", nearly_long_rel_path, not_empty_dir_name, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
520 |
wsprintfW(nearly_long_path, L"\\\\?\\%ls\\%ls", cwd, nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
521 |
wsprintfW(empty_dir_path, L"%ls\\%ls", nearly_long_path, empty_dir_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
522 |
wsprintfW(not_empty_dir_path, L"%ls\\%ls", nearly_long_path, not_empty_dir_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
523 |
wsprintfW(nearly_long_file_path, L"%ls\\%ls", nearly_long_path, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
524 |
wsprintfW(file_path, L"%ls\\%ls\\%ls", nearly_long_path, not_empty_dir_name, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
525 |
wsprintfW(nearly_long_unc_path, L"\\\\localhost\\%lc$\\%s", dir_letter, nearly_long_path + 7); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
526 |
wsprintfW(empty_dir_unc_path, L"%s\\%s", nearly_long_unc_path, empty_dir_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
527 |
wsprintfW(not_empty_dir_unc_path, L"%s\\%s", nearly_long_unc_path, not_empty_dir_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
528 |
wsprintfW(nearly_long_file_unc_path, L"%ls\\%ls", nearly_long_unc_path, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
529 |
wsprintfW(file_unc_path, L"%s\\%s\\%s", nearly_long_unc_path, not_empty_dir_name, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
530 |
wsprintfW(root_dir_path, L"%lc:\\", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
531 |
wsprintfW(root_rel_dir_path, L"%lc:", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
532 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
533 |
RECORD_PATH(long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
534 |
RECORD_PATH(nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
535 |
RECORD_PATH(nearly_long_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
536 |
RECORD_PATH(nearly_long_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
537 |
RECORD_PATH(empty_dir_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
538 |
RECORD_PATH(empty_dir_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
539 |
RECORD_PATH(empty_dir_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
540 |
RECORD_PATH(not_empty_dir_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
541 |
RECORD_PATH(not_empty_dir_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
542 |
RECORD_PATH(not_empty_dir_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
543 |
RECORD_PATH(nearly_long_file_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
544 |
RECORD_PATH(nearly_long_file_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
545 |
RECORD_PATH(nearly_long_file_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
546 |
RECORD_PATH(file_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
547 |
RECORD_PATH(file_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
548 |
RECORD_PATH(file_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
549 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
550 |
create_rel_directory_w(nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
551 |
create_rel_directory_w(long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
552 |
create_rel_directory_w(empty_dir_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
553 |
create_rel_directory_w(not_empty_dir_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
554 |
create_rel_file_w(nearly_long_file_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
555 |
create_rel_file_w(file_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
556 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
557 |
// For UNC path test we assume that the current DRIVE has a share |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
558 |
// called "<DRIVELETTER>$" (so for D: we expect \\localhost\D$ to be |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
559 |
// the same). Since this is only an assumption, we have to skip |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
560 |
// the UNC tests if the share is missing. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
561 |
if (dir_letter && !::GetFileAttributesExW(nearly_long_unc_path, GetFileExInfoStandard, &file_data)) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
562 |
printf("Disabled UNC path test, since %lc: is not mapped as share %lc$.\n", dir_letter, dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
563 |
} else { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
564 |
can_test_unc = true; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
565 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
566 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
567 |
if (mode == BENCH) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
568 |
bench_path(nearly_long_path + 4); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
569 |
bench_path(nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
570 |
bench_path(nearly_long_file_path + 4); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
571 |
bench_path(nearly_long_file_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
572 |
} else if (mode == EXAMPLES) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
573 |
printf("Working directory: %ls", cwd); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
574 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
575 |
if (dir_letter) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
576 |
static wchar_t top_buf[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
577 |
wchar_t* top_path = wcschr(cwd + 3, L'\\'); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
578 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
579 |
if (top_path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
580 |
size_t top_len = (top_path - cwd) - 3; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
581 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
582 |
memcpy(top_buf, cwd + 3, top_len * 2); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
583 |
top_buf[top_len] = L'\0'; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
584 |
top_path = top_buf; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
585 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
586 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
587 |
print_attr_result(L"%lc:\\", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
588 |
print_attr_result(L"%lc:\\.\\", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
589 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
590 |
if (top_path) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
591 |
print_attr_result(L"%lc:\\%ls\\..\\%ls\\", dir_letter, top_path, top_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
592 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
593 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
594 |
print_attr_result(L"%lc:", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
595 |
print_attr_result(L"%lc:.", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
596 |
print_attr_result(L"%lc:\\COM1", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
597 |
print_attr_result(L"%lc:\\PRN", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
598 |
print_attr_result(L"%lc:\\PRN\\COM1", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
599 |
print_attr_result(L"\\\\?\\UNC\\localhost\\%lc$\\", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
600 |
print_attr_result(L"\\\\?\\UNC\\\\localhost\\%lc$\\", dir_letter); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
601 |
print_attr_result(nearly_long_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
602 |
print_attr_result(L"%ls\\.\\", nearly_long_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
603 |
print_attr_result(L"%ls\\..\\%ls", nearly_long_unc_path, nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
604 |
print_attr_result(L"\\\\?\\UNC\\%ls", nearly_long_unc_path + 2); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
605 |
print_attr_result(file_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
606 |
print_attr_result(L"%ls\\%ls\\..\\%ls\\%ls", nearly_long_unc_path, not_empty_dir_name, not_empty_dir_name, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
607 |
print_attr_result(L"%ls\\%ls\\.\\%ls", nearly_long_unc_path, not_empty_dir_name, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
608 |
print_attr_result(L"\\\\?\\UNC\\%ls", file_unc_path + 2); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
609 |
print_attr_result(L"\\\\?\\UNC\\%ls\\%ls\\.\\%ls", nearly_long_unc_path + 2, not_empty_dir_name, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
610 |
print_attr_result(L"\\\\?\\UNC\\%ls\\%ls\\..\\%ls\\%ls", nearly_long_unc_path + 2, not_empty_dir_name, not_empty_dir_name, file_name); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
611 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
612 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
613 |
print_attr_result(nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
614 |
print_attr_result(L"%ls\\.\\", nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
615 |
print_attr_result(L"%ls\\..\\%ls", nearly_long_rel_path, nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
616 |
print_attr_result(L"%\\\\?\\%ls", nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
617 |
print_attr_result(L"\\\\?\\%ls\\.\\", nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
618 |
print_attr_result(L"\\\\?\\%ls\\..\\%ls", nearly_long_rel_path, nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
619 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
620 |
print_attr_result(nearly_long_path + 4); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
621 |
print_attr_result(L"%ls\\.\\", nearly_long_path + 4); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
622 |
print_attr_result(L"%ls\\..\\%ls", nearly_long_path + 4, nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
623 |
print_attr_result(nearly_long_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
624 |
print_attr_result(L"%ls\\.\\", nearly_long_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
625 |
print_attr_result(L"%ls\\..\\%ls", nearly_long_path, nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
626 |
} else { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
627 |
check_file_not_present(L""); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
628 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
629 |
// Check relative paths |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
630 |
check_dir(nearly_long_rel_path, false); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
631 |
check_dir(long_rel_path, true); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
632 |
check_dir(empty_dir_rel_path, true); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
633 |
check_dir(not_empty_dir_rel_path, false); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
634 |
check_file(nearly_long_file_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
635 |
check_file(file_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
636 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
637 |
// Check absolute paths |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
638 |
if (dir_letter) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
639 |
check_dir(root_dir_path, false); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
640 |
check_dir(root_rel_dir_path, false); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
641 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
642 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
643 |
check_dir(cwd, false); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
644 |
check_dir(nearly_long_path + 4, false); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
645 |
check_dir(empty_dir_path + 4, true); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
646 |
check_dir(not_empty_dir_path + 4, false); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
647 |
check_file(nearly_long_file_path + 4); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
648 |
check_file(file_path + 4); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
649 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
650 |
// Check UNC paths |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
651 |
if (can_test_unc) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
652 |
check_dir(nearly_long_unc_path, false); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
653 |
check_dir(empty_dir_unc_path, true); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
654 |
check_dir(not_empty_dir_unc_path, false); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
655 |
check_file(nearly_long_file_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
656 |
check_file(file_unc_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
657 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
658 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
659 |
// Check handling of <DRIVE>:/../<OTHER_DRIVE>:/path/... |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
660 |
// The other drive letter should not overwrite the original one. |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
661 |
if (dir_letter) { |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
662 |
static wchar_t tmp[JVM_MAXPATHLEN]; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
663 |
wchar_t* other_letter = dir_letter == L'D' ? L"C" : L"D"; |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
664 |
wsprintfW(tmp, L"%2ls\\..\\%ls:%ls", nearly_long_file_path, other_letter, nearly_long_file_path + 2); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
665 |
check_file_not_present(tmp); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
666 |
wsprintfW(tmp, L"%2ls\\..\\%ls:%ls", file_path, other_letter, file_path + 2); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
667 |
check_file_not_present(tmp); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
668 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
669 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
670 |
|
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
671 |
delete_rel_file_w(file_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
672 |
delete_rel_file_w(nearly_long_file_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
673 |
delete_empty_rel_directory_w(not_empty_dir_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
674 |
delete_empty_rel_directory_w(empty_dir_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
675 |
delete_empty_rel_directory_w(long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
676 |
delete_empty_rel_directory_w(nearly_long_rel_path); |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
677 |
} |
ed5e399d967d
8191521: handle long relative path specified in -Xbootclasspath/a on windows
rschmelter
parents:
54983
diff
changeset
|
678 |
|
52395
5ca10e4e052c
8177708: Convert TestReserveMemorySpecial_test to Gtest
iignatyev
parents:
diff
changeset
|
679 |
#endif |