Changeset 928

Show
Ignore:
Timestamp:
08/25/08 13:23:07 (3 months ago)
Author:
astrange
Message:

CopyProcessName? could return localized names and mess up our string comparison.
Use a different system call instead.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/perian-1.1/CommonUtils.c

    r926 r928  
    311311                ProcessSerialNumber myProcess; 
    312312                GetCurrentProcess(&myProcess); 
    313                 CFStringRef myProcessName; 
    314                 CopyProcessName(&myProcess, &myProcessName); 
     313                CFDictionaryRef processInformation; 
    315314                 
    316                 CFArrayRef list = CFPreferencesCopyAppValue(CFSTR("FrameDroppingWhiteList"), CFSTR("org.perian.Perian")); 
    317                  
    318                 if (list) { 
    319                         int count = CFArrayGetCount(list); 
    320                         CFStringRef names[count]; 
    321                          
    322                         CFArrayGetValues(list, CFRangeMake(0, count), (void *)names); 
    323                         enabled = findNameInList(myProcessName, names, count); 
    324                         CFRelease(list); 
    325                 } else { 
    326                         int count = sizeof(defaultFrameDroppingWhiteList)/sizeof(defaultFrameDroppingWhiteList[0]); 
    327                         enabled = findNameInList(myProcessName, defaultFrameDroppingWhiteList, count); 
    328                 } 
    329                 //Codecprintf(NULL, "Frame Dropping enabled is %d for %s\n", enabled, CFStringGetCStringPtr(myProcessName, kCFStringEncodingMacRoman)); 
    330                 CFRelease(myProcessName); 
     315        processInformation = ProcessInformationCopyDictionary(&myProcess, kProcessDictionaryIncludeAllInformationMask); 
     316         
     317        if (!processInformation) enabled = FALSE; 
     318                else { 
     319            CFArrayRef list = CFPreferencesCopyAppValue(CFSTR("FrameDroppingWhiteList"), CFSTR("org.perian.Perian")); 
     320            CFStringRef path = CFDictionaryGetValue(processInformation, kCFBundleExecutableKey); 
     321            CFRange entireRange = CFRangeMake(0, CFStringGetLength(path)), basename; 
     322             
     323            CFStringFindWithOptions(path, CFSTR("/"), entireRange, kCFCompareBackwards, &basename); 
     324             
     325            basename.location += 1; //advance past "/" 
     326            basename.length = entireRange.length - basename.location; 
     327             
     328            CFStringRef myProcessName = CFStringCreateWithSubstring(NULL, path, basename); 
     329             
     330            if (list) { 
     331                int count = CFArrayGetCount(list); 
     332                CFStringRef names[count]; 
     333                 
     334                CFArrayGetValues(list, CFRangeMake(0, count), (void *)names); 
     335                enabled = findNameInList(myProcessName, names, count); 
     336                CFRelease(list); 
     337            } else { 
     338                int count = sizeof(defaultFrameDroppingWhiteList)/sizeof(defaultFrameDroppingWhiteList[0]); 
     339                enabled = findNameInList(myProcessName, defaultFrameDroppingWhiteList, count); 
     340            } 
     341            //Codecprintf(NULL, "Frame Dropping enabled is %d for %s\n", enabled, CFStringGetCStringPtr(myProcessName, kCFStringEncodingMacRoman)); 
     342            CFRelease(myProcessName); 
     343            CFRelease(path); 
     344        } 
    331345        } 
    332346