diff options
-rw-r--r-- | rbutil/rbutilqt/base/system.cpp | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/rbutil/rbutilqt/base/system.cpp b/rbutil/rbutilqt/base/system.cpp index 3773e68786..4b97dea0f0 100644 --- a/rbutil/rbutilqt/base/system.cpp +++ b/rbutil/rbutilqt/base/system.cpp | |||
@@ -509,33 +509,40 @@ QUrl System::systemProxy(void) | |||
509 | CFDictionaryRef dictref; | 509 | CFDictionaryRef dictref; |
510 | CFStringRef stringref; | 510 | CFStringRef stringref; |
511 | CFNumberRef numberref; | 511 | CFNumberRef numberref; |
512 | int enable; | 512 | int enable = 0; |
513 | int port; | 513 | int port = 0; |
514 | unsigned int bufsize = 0; | 514 | unsigned int bufsize = 0; |
515 | char *buf; | 515 | char *buf; |
516 | QUrl proxy; | 516 | QUrl proxy; |
517 | 517 | ||
518 | dictref = SCDynamicStoreCopyProxies(NULL); | 518 | dictref = SCDynamicStoreCopyProxies(NULL); |
519 | stringref = (CFStringRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPProxy); | 519 | if(dictref == NULL) |
520 | return proxy; | ||
520 | numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPEnable); | 521 | numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPEnable); |
521 | CFNumberGetValue(numberref, kCFNumberIntType, &enable); | 522 | if(numberref != NULL) |
523 | CFNumberGetValue(numberref, kCFNumberIntType, &enable); | ||
522 | if(enable == 1) { | 524 | if(enable == 1) { |
523 | // get number of characters. CFStringGetLength uses UTF-16 code pairs | 525 | // get proxy string |
524 | bufsize = CFStringGetLength(stringref) * 2 + 1; | 526 | stringref = (CFStringRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPProxy); |
525 | buf = (char*)malloc(sizeof(char) * bufsize); | 527 | if(stringref != NULL) { |
526 | if(buf == NULL) { | 528 | // get number of characters. CFStringGetLength uses UTF-16 code pairs |
527 | qDebug() << "[System] can't allocate memory for proxy string!"; | 529 | bufsize = CFStringGetLength(stringref) * 2 + 1; |
528 | CFRelease(dictref); | 530 | buf = (char*)malloc(sizeof(char) * bufsize); |
529 | return QUrl(""); | 531 | if(buf == NULL) { |
530 | } | 532 | qDebug() << "[System] can't allocate memory for proxy string!"; |
531 | CFStringGetCString(stringref, buf, bufsize, kCFStringEncodingUTF16); | 533 | CFRelease(dictref); |
532 | numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPPort); | 534 | return QUrl(""); |
533 | CFNumberGetValue(numberref, kCFNumberIntType, &port); | 535 | } |
534 | proxy.setScheme("http"); | 536 | CFStringGetCString(stringref, buf, bufsize, kCFStringEncodingUTF16); |
535 | proxy.setHost(QString::fromUtf16((unsigned short*)buf)); | 537 | numberref = (CFNumberRef)CFDictionaryGetValue(dictref, kSCPropNetProxiesHTTPPort); |
536 | proxy.setPort(port); | 538 | if(numberref != NULL) |
537 | 539 | CFNumberGetValue(numberref, kCFNumberIntType, &port); | |
538 | free(buf); | 540 | proxy.setScheme("http"); |
541 | proxy.setHost(QString::fromUtf16((unsigned short*)buf)); | ||
542 | proxy.setPort(port); | ||
543 | |||
544 | free(buf); | ||
545 | } | ||
539 | } | 546 | } |
540 | CFRelease(dictref); | 547 | CFRelease(dictref); |
541 | 548 | ||