William Bowling is sharing code with you

Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.

Don't show this again

wbowling / adium (fork of adium / adium)

Fork of Adium for patches/improvements

Clone this repository (size: 338.7 MB): HTTPS / SSH
hg clone https://bitbucket.org/wbowling/adium
hg clone ssh://hg@bitbucket.org/wbowling/adium

adium / Source / AINulRemovalPlugin.m

//
//  AINulRemovalPlugin.m
//  Adium
//
//  Created by Evan Schoenberg on 9/10/06.
//

#import "AINulRemovalPlugin.h"
#import <Adium/AIContentControllerProtocol.h>
#import <AIUtilities/AIAttributedStringAdditions.h>

@implementation AINulRemovalPlugin

- (void)installPlugin
{
    //Register us as a filter
        [adium.contentController registerContentFilter:self ofType:AIFilterContent direction:AIFilterIncoming];
        [adium.contentController registerContentFilter:self ofType:AIFilterContent direction:AIFilterOutgoing];
}

- (void)uninstallPlugin
{
        [adium.contentController unregisterContentFilter:self];
}

- (NSAttributedString *)filterAttributedString:(NSAttributedString *)inAttributedString context:(id)context
{
        if (!inAttributedString || ![inAttributedString length]) return inAttributedString;

        //Don't allow embedded NULs
        static NSString *nulString = nil;
        if (!nulString) {
                UInt8 bytes[1];
                bytes[0] = '\0';
                nulString = (NSString *)CFStringCreateWithBytes(kCFAllocatorDefault, bytes, 1, kCFStringEncodingASCII, false);
        }

        NSAttributedString *nulFreeAttributedString;

        if ([[inAttributedString string] rangeOfString:nulString options:NSLiteralSearch].location != NSNotFound) {
                NSMutableAttributedString *temporaryString = [inAttributedString mutableCopy];
                [temporaryString replaceOccurrencesOfString:nulString
                                                                                 withString:@""
                                                                                        options:NSLiteralSearch
                                                                                          range:NSMakeRange(0, [temporaryString length])];
                nulFreeAttributedString = [temporaryString autorelease];

        } else {
                nulFreeAttributedString = inAttributedString;
        }

        return nulFreeAttributedString;
}

/*!
 * @brief When should this filter run?
 *
 * Run this filter as early as possible to remove NULs in case other filters want to use the UTF8String of the filtered string.
 */
- (CGFloat)filterPriority
{
        return HIGHEST_FILTER_PRIORITY;
}

@end