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 |