blob: ebe30c5762f9453081a898824125d2ed7ff613fd [file] [log] [blame]
Raphael Moll6b94c862014-09-05 15:54:04 -07001/*
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
25const CJavaPath CJavaPath::sEmpty = CJavaPath();
26
27CJavaPath::CJavaPath(int version, CPath path) : mVersion(version), mPath(path) {
28 mPath.Canonicalize();
29}
30
31bool CJavaPath::isEmpty() const {
32 return mVersion <= 0;
33}
34
35void CJavaPath::clear() {
36 mVersion = 0;
37 mPath = CPath();
38}
39
40void CJavaPath::set(int version, CPath path) {
41 mVersion = version;
42 mPath = path;
43 mPath.Canonicalize();
44}
45
46CString CJavaPath::getVersion() const {
47 CString s;
48 s.Format(_T("%d.%d"), JAVA_MAJOR(mVersion), JAVA_MINOR(mVersion));
49 return s;
50}
51
52
53bool 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
79bool 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
90bool 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}