1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "stdafx.h" 18 #include "JavaPath.h" 19 #include "utils.h" 20 21 #define _CRT_SECURE_NO_WARNINGS 22 23 // -------------- 24 25 const CJavaPath CJavaPath::sEmpty = CJavaPath(); 26 27 CJavaPath::CJavaPath(int version, CPath path) : mVersion(version), mPath(path) { 28 mPath.Canonicalize(); 29 } 30 31 bool CJavaPath::isEmpty() const { 32 return mVersion <= 0; 33 } 34 35 void CJavaPath::clear() { 36 mVersion = 0; 37 mPath = CPath(); 38 } 39 40 void CJavaPath::set(int version, CPath path) { 41 mVersion = version; 42 mPath = path; 43 mPath.Canonicalize(); 44 } 45 46 CString CJavaPath::getVersion() const { 47 CString s; 48 s.Format(_T("%d.%d"), JAVA_MAJOR(mVersion), JAVA_MINOR(mVersion)); 49 return s; 50 } 51 52 53 bool CJavaPath::toShortPath() { 54 const TCHAR *longPath = mPath; 55 if (longPath == nullptr) { 56 return false; 57 } 58 59 DWORD lenShort = _tcslen(longPath) + 1; 60 TCHAR *shortPath = (TCHAR *)malloc(lenShort * sizeof(TCHAR)); 61 62 DWORD length = GetShortPathName(longPath, shortPath, lenShort); 63 if (length > lenShort) { 64 // The buffer wasn't big enough, this is the size to use. 65 free(shortPath); 66 lenShort = length; 67 shortPath = (TCHAR *)malloc(length); 68 length = GetShortPathName(longPath, shortPath, lenShort); 69 } 70 71 if (length != 0) { 72 mPath = CPath(shortPath); 73 } 74 75 free(shortPath); 76 return length != 0; 77 } 78 79 bool CJavaPath::operator< (const CJavaPath& rhs) const { 80 if (mVersion != rhs.mVersion) { 81 // sort in reverse order on the version 82 return rhs.mVersion > mVersion; 83 } 84 // sort in normal order on the path 85 const CString &pl = mPath; 86 const CString &pr = rhs.mPath; 87 return pl.Compare(pr) < 0; 88 } 89 90 bool CJavaPath::operator== (const CJavaPath& rhs) const { 91 if (mVersion == rhs.mVersion) { 92 const CString &pl = mPath; 93 const CString &pr = rhs.mPath; 94 return pl.Compare(pr) == 0; 95 } 96 return false; 97 } 98