aboutsummaryrefslogtreecommitdiff
path: root/find_java2/src/JavaPath.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'find_java2/src/JavaPath.cpp')
-rwxr-xr-xfind_java2/src/JavaPath.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/find_java2/src/JavaPath.cpp b/find_java2/src/JavaPath.cpp
new file mode 100755
index 000000000..ebe30c576
--- /dev/null
+++ b/find_java2/src/JavaPath.cpp
@@ -0,0 +1,97 @@
+/*
+* Copyright (C) 2014 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "stdafx.h"
+#include "JavaPath.h"
+#include "utils.h"
+
+#define _CRT_SECURE_NO_WARNINGS
+
+// --------------
+
+const CJavaPath CJavaPath::sEmpty = CJavaPath();
+
+CJavaPath::CJavaPath(int version, CPath path) : mVersion(version), mPath(path) {
+ mPath.Canonicalize();
+}
+
+bool CJavaPath::isEmpty() const {
+ return mVersion <= 0;
+}
+
+void CJavaPath::clear() {
+ mVersion = 0;
+ mPath = CPath();
+}
+
+void CJavaPath::set(int version, CPath path) {
+ mVersion = version;
+ mPath = path;
+ mPath.Canonicalize();
+}
+
+CString CJavaPath::getVersion() const {
+ CString s;
+ s.Format(_T("%d.%d"), JAVA_MAJOR(mVersion), JAVA_MINOR(mVersion));
+ return s;
+}
+
+
+bool CJavaPath::toShortPath() {
+ const TCHAR *longPath = mPath;
+ if (longPath == nullptr) {
+ return false;
+ }
+
+ DWORD lenShort = _tcslen(longPath) + 1;
+ TCHAR *shortPath = (TCHAR *)malloc(lenShort * sizeof(TCHAR));
+
+ DWORD length = GetShortPathName(longPath, shortPath, lenShort);
+ if (length > lenShort) {
+ // The buffer wasn't big enough, this is the size to use.
+ free(shortPath);
+ lenShort = length;
+ shortPath = (TCHAR *)malloc(length);
+ length = GetShortPathName(longPath, shortPath, lenShort);
+ }
+
+ if (length != 0) {
+ mPath = CPath(shortPath);
+ }
+
+ free(shortPath);
+ return length != 0;
+}
+
+bool CJavaPath::operator< (const CJavaPath& rhs) const {
+ if (mVersion != rhs.mVersion) {
+ // sort in reverse order on the version
+ return rhs.mVersion > mVersion;
+ }
+ // sort in normal order on the path
+ const CString &pl = mPath;
+ const CString &pr = rhs.mPath;
+ return pl.Compare(pr) < 0;
+}
+
+bool CJavaPath::operator== (const CJavaPath& rhs) const {
+ if (mVersion == rhs.mVersion) {
+ const CString &pl = mPath;
+ const CString &pr = rhs.mPath;
+ return pl.Compare(pr) == 0;
+ }
+ return false;
+}