summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rbutil/rbutilqt/base/system.cpp47
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