src/jdk.packager/share/native/library/common/WindowsPlatform.cpp
branchJDK-8200758-branch
changeset 56995 3d5b13207b70
parent 56993 3629eb24e9ac
equal deleted inserted replaced
56994:b4aca2dbe2b5 56995:3d5b13207b70
   485     return pid;
   485     return pid;
   486 }
   486 }
   487 #endif //DEBUG
   487 #endif //DEBUG
   488 
   488 
   489 
   489 
   490 WindowsJavaUserPreferences::WindowsJavaUserPreferences(void) :
       
   491         JavaUserPreferences() {
       
   492 }
       
   493 
       
   494 WindowsJavaUserPreferences::~WindowsJavaUserPreferences(void) {
       
   495 }
       
   496 
       
   497 // Java Preferences API encodes it's strings, so we need to match what
       
   498 // Java does to work with Java.
       
   499 // CAVEAT: Java also does unicode encoding which this doesn't do yet.
       
   500 // Should be sufficient for jvm args.
       
   501 // See WindowsPreferences.java toWindowsName()
       
   502 TString ConvertStringToJavaEcodedString(TString Value) {
       
   503     TString result;
       
   504     TCHAR* p = (TCHAR*)Value.c_str();
       
   505     TCHAR c = *p;
       
   506 
       
   507     while (c != 0) {
       
   508         switch (c) {
       
   509             case '\\':
       
   510                 result += _T("//");
       
   511                 break;
       
   512 
       
   513             case '/':
       
   514                 result += '\\';
       
   515                 break;
       
   516             default:
       
   517                 if ((c >= 'A') && (c <= 'Z')) {
       
   518                     result += '/';
       
   519                     result += c;
       
   520                 }
       
   521                 else
       
   522                     result += c;
       
   523                 break;
       
   524         }
       
   525 
       
   526         p++;
       
   527         c = *p;
       
   528     }
       
   529 
       
   530     return result;
       
   531 }
       
   532 
       
   533 // Java Preferences API encodes it's strings,
       
   534 // so we need to match what Java does to work with Java.
       
   535 // CAVEAT: Java also does unicode encoding which this doesn't do yet.
       
   536 // Should be sufficient for jvm args.
       
   537 // See WindowsPreferences.java toJavaName()
       
   538 TString ConvertJavaEcodedStringToString(TString Value) {
       
   539     TString result;
       
   540 
       
   541     for (size_t index = 0; index < Value.length(); index++) {
       
   542         TCHAR c = Value[index];
       
   543 
       
   544         switch (c) {
       
   545             case '/':
       
   546                 if ((index + 1) < Value.length()) {
       
   547                     index++;
       
   548                     TCHAR nextc = Value[index];
       
   549 
       
   550                     if (nextc >= 'A' && nextc <= 'Z') {
       
   551                         result += nextc;
       
   552                     }
       
   553                     else if (nextc == '/') {
       
   554                         result += '\\';
       
   555                     }
       
   556                 }
       
   557                 break;
       
   558             case '\\':
       
   559                 result += '/';
       
   560                 break;
       
   561             default:
       
   562                 result += c;
       
   563                 break;
       
   564         }
       
   565     }
       
   566 
       
   567     return result;
       
   568 }
       
   569 
       
   570 bool WindowsJavaUserPreferences::Load(TString Appid) {
       
   571     bool result = false;
       
   572     TString lappid = Helpers::ConvertIdToFilePath(Appid);
       
   573     lappid = ConvertStringToJavaEcodedString(Appid);
       
   574     TString registryKey = TString(_T("SOFTWARE\\JavaSoft\\Prefs\\"))
       
   575             + lappid + TString(_T("\\/J/V/M/User/Options"));
       
   576     Registry registry(HKEY_CURRENT_USER);
       
   577 
       
   578     if (registry.Open(registryKey) == true) {
       
   579         std::list<TString> keys = registry.GetKeys();
       
   580         OrderedMap<TString, TString> mapOfKeysAndValues;
       
   581 
       
   582         for (std::list<TString>::const_iterator iterator = keys.begin();
       
   583                 iterator != keys.end(); iterator++) {
       
   584             TString key = *iterator;
       
   585             TString value = registry.ReadString(key);
       
   586             key = ConvertJavaEcodedStringToString(key);
       
   587             value = ConvertJavaEcodedStringToString(value);
       
   588 
       
   589             if (key.empty() == false) {
       
   590                 mapOfKeysAndValues.Append(key, value);
       
   591                 result = true;
       
   592             }
       
   593         }
       
   594 
       
   595         FMap = mapOfKeysAndValues;
       
   596     }
       
   597 
       
   598     return result;
       
   599 }
       
   600 
       
   601 FileHandle::FileHandle(std::wstring FileName) {
   490 FileHandle::FileHandle(std::wstring FileName) {
   602     FHandle = ::CreateFile(FileName.data(), GENERIC_READ, FILE_SHARE_READ,
   491     FHandle = ::CreateFile(FileName.data(), GENERIC_READ, FILE_SHARE_READ,
   603             NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   492             NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   604 }
   493 }
   605 
   494