Home | History | Annotate | Download | only in src
      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