diff --git a/.gitignore b/.gitignore index 8028923871..201518bb12 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ build .project .settings bin +/lib +/distrib diff --git a/classpath/java-io.cpp b/classpath/java-io.cpp index 6a73080f37..5b723114ae 100644 --- a/classpath/java-io.cpp +++ b/classpath/java-io.cpp @@ -324,7 +324,19 @@ extern "C" JNIEXPORT jstring JNICALL Java_java_io_File_toAbsolutePath(JNIEnv* e UNUSED, jclass, jstring path) { #ifdef PLATFORM_WINDOWS - // todo + string_t chars = getChars(e, path); + if (chars) { + const unsigned BufferSize = MAX_PATH; + char_t buffer[BufferSize]; + DWORD success = GetFullPathNameW(chars, BufferSize, buffer, 0); + releaseChars(e, path, chars); + + if (success) { + return e->NewString + (reinterpret_cast(buffer), wcslen(buffer)); + } + } + return path; #else jstring result = path; diff --git a/classpath/java/net/URLStreamHandler.java b/classpath/java/net/URLStreamHandler.java index 7beacae25e..2505408921 100644 --- a/classpath/java/net/URLStreamHandler.java +++ b/classpath/java/net/URLStreamHandler.java @@ -40,7 +40,7 @@ public abstract class URLStreamHandler { host = s.substring(0, colon); port = Integer.parseInt(s.substring(colon + 1, slash)); } - s = s.substring(slash + 1); + s = s.substring(slash); } } diff --git a/makefile b/makefile index b83cfabad5..f72b091054 100755 --- a/makefile +++ b/makefile @@ -51,6 +51,8 @@ test-build = $(build)/test src = src classpath-src = classpath test = test +win32 ?= $(root)/win32 +win64 ?= $(root)/win64 classpath = avian @@ -361,8 +363,8 @@ endif ifeq ($(platform),windows) bootimage-cflags += -DTARGET_PLATFORM_WINDOWS - inc = "$(root)/win32/include" - lib = "$(root)/win32/lib" + inc = "$(win32)/include" + lib = "$(win32)/lib" embed-prefix = c:/avian-embedded @@ -411,8 +413,8 @@ ifeq ($(platform),windows) ar = x86_64-w64-mingw32-ar ranlib = x86_64-w64-mingw32-ranlib strip = x86_64-w64-mingw32-strip - inc = "$(root)/win64/include" - lib = "$(root)/win64/lib" + inc = "$(win64)/include" + lib = "$(win64)/lib" endif endif @@ -469,7 +471,7 @@ build-ld := $(build-cc) ifdef msvc windows-java-home := $(shell cygpath -m "$(JAVA_HOME)") - zlib := $(shell cygpath -m "$(root)/win32/msvc") + zlib := $(shell cygpath -m "$(win32)/msvc") cxx = "$(msvc)/BIN/cl.exe" cc = $(cxx) ld = "$(msvc)/BIN/link.exe" @@ -478,7 +480,8 @@ ifdef msvc -DUSE_ATOMIC_OPERATIONS -DAVIAN_JAVA_HOME=\"$(javahome)\" \ -DAVIAN_EMBED_PREFIX=\"$(embed-prefix)\" \ -Fd$(build)/$(name).pdb -I"$(zlib)/include" -I$(src) -I"$(build)" \ - -I"$(windows-java-home)/include" -I"$(windows-java-home)/include/win32" + -I"$(windows-java-home)/include" -I"$(windows-java-home)/include/win32" \ + -DTARGET_BYTES_PER_WORD=$(pointer-size) -DTARGET_PLATFORM_WINDOWS shared = -dll lflags = -nologo -LIBPATH:"$(zlib)/lib" -DEFAULTLIB:ws2_32 \ -DEFAULTLIB:zlib -MANIFEST -debug diff --git a/src/common.h b/src/common.h index 7c60041449..8c762f6c70 100644 --- a/src/common.h +++ b/src/common.h @@ -56,10 +56,12 @@ typedef unsigned __int64 uint64_t; # ifdef _M_IX86 typedef int32_t intptr_t; typedef uint32_t uintptr_t; +# define UINT64_C(x) x##LL # define ARCH_x86_32 # elif defined _M_X64 typedef int64_t intptr_t; typedef uint64_t uintptr_t; +# define UINT64_C(x) x##L # define ARCH_x86_64 # else # error "unsupported architecture" diff --git a/src/finder.h b/src/finder.h index 55aa9e85ee..e784fe6e9a 100644 --- a/src/finder.h +++ b/src/finder.h @@ -173,7 +173,7 @@ class Finder { virtual void dispose() = 0; }; -Finder* +JNIEXPORT Finder* makeFinder(System* s, Allocator* a, const char* path, const char* bootLibrary); Finder* diff --git a/src/machine.h b/src/machine.h index 12aca3bc45..96c853624f 100644 --- a/src/machine.h +++ b/src/machine.h @@ -3884,10 +3884,10 @@ errorLog(Thread* t) } // namespace vm -void +JNIEXPORT void vmPrintTrace(vm::Thread* t); -void* +JNIEXPORT void* vmAddressFromLine(vm::Thread* t, vm::object m, unsigned line); #endif//MACHINE_H diff --git a/src/system.h b/src/system.h index 0ec1b29eb5..897193d042 100644 --- a/src/system.h +++ b/src/system.h @@ -199,7 +199,7 @@ assert(System* s, bool v) #endif // not NDEBUG -System* +JNIEXPORT System* makeSystem(const char* crashDumpDirectory); } // namespace vm diff --git a/test/UrlTest.java b/test/UrlTest.java index 35281b367a..244d1ec45a 100644 --- a/test/UrlTest.java +++ b/test/UrlTest.java @@ -3,7 +3,7 @@ import java.net.URL; public class UrlTest { private static String query="var1=val1&var2=val2"; - private static String path="testpath"; + private static String path="/testpath"; private static String domain="file://www.readytalk.com"; private static String file=path + "?" + query; private static URL url; @@ -15,7 +15,6 @@ public class UrlTest { private static void setupURL() throws MalformedURLException { StringBuilder builder = new StringBuilder(); builder.append(domain); - builder.append("/"); builder.append(file); url = new URL(builder.toString()); }