Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Foundation/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ objc_library(
hdrs = [
"GTMLogger.h",
],
non_arc_srcs = [
srcs = [
"GTMLogger.m",
],
visibility = ["//visibility:public"],
Expand Down Expand Up @@ -78,7 +78,7 @@ objc_library(
hdrs = [
"GTMStringEncoding.h",
],
non_arc_srcs = [
srcs = [
"GTMStringEncoding.m",
],
visibility = ["//visibility:public"],
Expand Down
86 changes: 28 additions & 58 deletions Foundation/GTMLogger.m
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
// the License.
//

#if !__has_feature(objc_arc)
#error "This file needs to be compiled with ARC enabled."
#endif

#import "GTMLogger.h"
#import <fcntl.h>
#import <unistd.h>
Expand Down Expand Up @@ -45,29 +49,27 @@ @implementation GTMLogger
+ (instancetype)sharedLogger {
@synchronized(self) {
if (gSharedLogger == nil) {
gSharedLogger = [[self standardLogger] retain];
gSharedLogger = [self standardLogger];
}
return [[gSharedLogger retain] autorelease];
return gSharedLogger;
}
}

+ (void)setSharedLogger:(GTMLogger *)logger {
@synchronized(self) {
[gSharedLogger autorelease];
gSharedLogger = [logger retain];
gSharedLogger = logger;
}
}

+ (instancetype)standardLogger {
// Don't trust NSFileHandle not to throw
@try {
id<GTMLogWriter> writer = [NSFileHandle fileHandleWithStandardOutput];
id<GTMLogFormatter> fr = [[[GTMLogStandardFormatter alloc] init]
autorelease];
id<GTMLogFilter> filter = [[[GTMLogLevelFilter alloc] init] autorelease];
return [[[self alloc] initWithWriter:writer
id<GTMLogFormatter> fr = [[GTMLogStandardFormatter alloc] init];
id<GTMLogFilter> filter = [[GTMLogLevelFilter alloc] init];
return [[self alloc] initWithWriter:writer
formatter:fr
filter:filter] autorelease];
filter:filter];
}
@catch (id e) {
// Ignored
Expand Down Expand Up @@ -97,25 +99,23 @@ + (instancetype)standardLoggerWithStdoutAndStderr {

// Don't trust NSFileHandle not to throw
@try {
GTMLogBasicFormatter *formatter = [[[GTMLogBasicFormatter alloc] init]
autorelease];
GTMLogBasicFormatter *formatter = [[GTMLogBasicFormatter alloc] init];
GTMLogger *stdoutLogger =
[self loggerWithWriter:[NSFileHandle fileHandleWithStandardOutput]
formatter:formatter
filter:[[[GTMLogMaximumLevelFilter alloc]
filter:[[GTMLogMaximumLevelFilter alloc]
initWithMaximumLevel:kGTMLoggerLevelInfo]
autorelease]];
];
GTMLogger *stderrLogger =
[self loggerWithWriter:[NSFileHandle fileHandleWithStandardError]
formatter:formatter
filter:[[[GTMLogMininumLevelFilter alloc]
initWithMinimumLevel:kGTMLoggerLevelError]
autorelease]];
filter:[[GTMLogMininumLevelFilter alloc]
initWithMinimumLevel:kGTMLoggerLevelError]];
GTMLogger *compositeWriter =
[self loggerWithWriter:[NSArray arrayWithObjects:
stdoutLogger, stderrLogger, nil]
formatter:formatter
filter:[[[GTMLogNoFilter alloc] init] autorelease]];
filter:[[GTMLogNoFilter alloc] init]];
GTMLogger *outerLogger = [self standardLogger];
[outerLogger setWriter:compositeWriter];
return outerLogger;
Expand Down Expand Up @@ -143,13 +143,13 @@ + (instancetype)standardLoggerWithPath:(NSString *)path {
+ (instancetype)loggerWithWriter:(id<GTMLogWriter>)writer
formatter:(id<GTMLogFormatter>)formatter
filter:(id<GTMLogFilter>)filter {
return [[[self alloc] initWithWriter:writer
return [[self alloc] initWithWriter:writer
formatter:formatter
filter:filter] autorelease];
filter:filter];
}

+ (instancetype)logger {
return [[[self alloc] init] autorelease];
return [[self alloc] init];
}

- (instancetype)init {
Expand All @@ -170,46 +170,38 @@ - (instancetype)initWithWriter:(id<GTMLogWriter>)writer
- (void)dealloc {
// Unlikely, but |writer_| may be an NSFileHandle, which can throw
@try {
[formatter_ release];
[self notifyFilterBeforeDetachIfNeeded];
[filter_ release];
[writer_ release];
}
@catch (id e) {
// Ignored
}
[super dealloc];
}

- (id<GTMLogWriter>)writer {
return [[writer_ retain] autorelease];
return writer_;
}

- (void)setWriter:(id<GTMLogWriter>)writer {
@synchronized(self) {
[writer_ autorelease];
writer_ = nil;
if (writer == nil) {
// Try to use stdout, but don't trust NSFileHandle
@try {
writer_ = [[NSFileHandle fileHandleWithStandardOutput] retain];
writer_ = [NSFileHandle fileHandleWithStandardOutput];
}
@catch (id e) {
// Leave |writer_| nil
}
} else {
writer_ = [writer retain];
}
}
}

- (id<GTMLogFormatter>)formatter {
return [[formatter_ retain] autorelease];
return formatter_;
}

- (void)setFormatter:(id<GTMLogFormatter>)formatter {
@synchronized(self) {
[formatter_ autorelease];
formatter_ = nil;
if (formatter == nil) {
@try {
Expand All @@ -218,20 +210,17 @@ - (void)setFormatter:(id<GTMLogFormatter>)formatter {
@catch (id e) {
// Leave |formatter_| nil
}
} else {
formatter_ = [formatter retain];
}
}
}

- (id<GTMLogFilter>)filter {
return [[filter_ retain] autorelease];
return filter_;
}

- (void)setFilter:(id<GTMLogFilter>)filter {
@synchronized(self) {
[self notifyFilterBeforeDetachIfNeeded];
[filter_ autorelease];
filter_ = nil;
if (filter == nil) {
@try {
Expand All @@ -240,8 +229,6 @@ - (void)setFilter:(id<GTMLogFilter>)filter {
@catch (id e) {
// Leave |filter_| nil
}
} else {
filter_ = [filter retain];
}
[self notifyFilterAfterAttachIfNeeded];
}
Expand Down Expand Up @@ -357,8 +344,8 @@ + (instancetype)fileHandleForLoggingAtPath:(NSString *)path mode:(mode_t)mode {
fd = open([path fileSystemRepresentation], flags, mode);
}
if (fd == -1) return nil;
return [[[self alloc] initWithFileDescriptor:fd
closeOnDealloc:YES] autorelease];
return [[self alloc] initWithFileDescriptor:fd
closeOnDealloc:YES];
}

- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level {
Expand Down Expand Up @@ -446,7 +433,7 @@ - (NSString *)stringForFunc:(NSString *)func
// Performance note: We may want to do a quick check here to see if |fmt|
// contains a '%', and if not, simply return 'fmt'.
if (!(fmt && args)) return nil;
return [[[NSString alloc] initWithFormat:fmt arguments:args] autorelease];
return [[NSString alloc] initWithFormat:fmt arguments:args];
}

@end // GTMLogBasicFormatter
Expand All @@ -462,19 +449,12 @@ - (instancetype)init {
pname_ = [[[NSProcessInfo processInfo] processName] copy];
pid_ = [[NSProcessInfo processInfo] processIdentifier];
if (!(dateFormatter_ && pname_)) {
[self release];
return nil;
}
}
return self;
}

- (void)dealloc {
[dateFormatter_ release];
[pname_ release];
[super dealloc];
}

- (NSString *)stringForFunc:(NSString *)func
withFormat:(NSString *)fmt
valist:(va_list)args
Expand Down Expand Up @@ -542,8 +522,6 @@ - (void)dealloc {
@"`willDetachFromLogger` call because those methods "
@"register/unregister the `GTMLogLevelFilter` instance as an "
@"observer of the user defaults instance.");

[super dealloc];
}

// In DEBUG builds, log everything. If we're not in a debug build we'll assume
Expand Down Expand Up @@ -610,7 +588,7 @@ - (void)startObservingUserDefaultsIfNeeded {
// clear settings:
// https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html#//apple_ref/occ/clm/NSUserDefaults/resetStandardUserDefaults
// and so should only be called in test code if necessary.
userDefaults_ = [[NSUserDefaults standardUserDefaults] retain];
userDefaults_ = [NSUserDefaults standardUserDefaults];
[userDefaults_ addObserver:self
forKeyPath:kVerboseLoggingKey
options:NSKeyValueObservingOptionInitial
Expand All @@ -623,7 +601,6 @@ - (void)stopObservingUserDefaultsIfNeeded {
}

[userDefaults_ removeObserver:self forKeyPath:kVerboseLoggingKey];
[userDefaults_ release];
userDefaults_ = nil;
}

Expand Down Expand Up @@ -655,15 +632,13 @@ @implementation GTMLogAllowedLevelFilter
- (instancetype)initWithAllowedLevels:(NSIndexSet *)levels {
self = [super init];
if (self != nil) {
allowedLevels_ = [levels retain];
// Cap min/max level
if (!allowedLevels_ ||
// NSIndexSet is unsigned so only check the high bound, but need to
// check both first and last index because NSIndexSet appears to allow
// wraparound.
([allowedLevels_ firstIndex] > kGTMLoggerLevelAssert) ||
([allowedLevels_ lastIndex] > kGTMLoggerLevelAssert)) {
[self release];
return nil;
}
}
Expand All @@ -677,11 +652,6 @@ - (instancetype)init {
(kGTMLoggerLevelAssert - kGTMLoggerLevelUnknown + 1))]];
}

- (void)dealloc {
[allowedLevels_ release];
[super dealloc];
}

- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level {
return [allowedLevels_ containsIndex:level];
}
Expand Down
23 changes: 9 additions & 14 deletions Foundation/GTMStringEncoding.m
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
// the License.
//

#if !__has_feature(objc_arc)
#error "This file needs to be compiled with ARC enabled."
#endif

#import "GTMStringEncoding.h"

NSString *const GTMStringEncodingErrorDomain = @"com.google.GTMStringEncodingErrorDomain";
Expand Down Expand Up @@ -92,30 +96,27 @@ GTM_INLINE int lcm(int a, int b) {
}

+ (instancetype)stringEncodingWithString:(NSString *)string {
return [[[self alloc] initWithString:string] autorelease];
return [[self alloc] initWithString:string];
}

- (instancetype)initWithString:(NSString *)string {
if ((self = [super init])) {
charMapData_ = [[string dataUsingEncoding:NSASCIIStringEncoding] retain];
charMapData_ = [string dataUsingEncoding:NSASCIIStringEncoding];
if (!charMapData_) {
_GTMDevLog(@"Unable to convert string to ASCII");
[self release];
return nil;
}
charMap_ = (char *)[charMapData_ bytes];
NSUInteger length = [charMapData_ length];
if (length < 2 || length > 128 || length & (length - 1)) {
_GTMDevLog(@"Length not a power of 2 between 2 and 128");
[self release];
return nil;
}

memset(reverseCharMap_, kUnknownChar, sizeof(reverseCharMap_));
for (unsigned int i = 0; i < length; i++) {
if (reverseCharMap_[(int)charMap_[i]] != kUnknownChar) {
_GTMDevLog(@"Duplicate character at pos %d", i);
[self release];
return nil;
}
reverseCharMap_[(int)charMap_[i]] = i;
Expand All @@ -129,11 +130,6 @@ - (instancetype)initWithString:(NSString *)string {
return self;
}

- (void)dealloc {
[charMapData_ release];
[super dealloc];
}

- (NSString *)description {
// TODO(iwade) track synonyms
return [NSString stringWithFormat:@"<Base%d StringEncoder: %@>",
Expand Down Expand Up @@ -218,8 +214,8 @@ - (NSString *)encode:(NSData *)inData error:(NSError **)error {

[outData setLength:outPos];

NSString *value = [[[NSString alloc] initWithData:outData
encoding:NSASCIIStringEncoding] autorelease];
NSString *value = [[NSString alloc] initWithData:outData
encoding:NSASCIIStringEncoding];
if (!value) {
if (error) {
*error = [NSError errorWithDomain:GTMStringEncodingErrorDomain
Expand Down Expand Up @@ -328,8 +324,7 @@ - (NSString *)stringByDecoding:(NSString *)inString error:(NSError **)error {
NSData *ret = [self decode:inString error:error];
NSString *value = nil;
if (ret) {
value = [[[NSString alloc] initWithData:ret
encoding:NSUTF8StringEncoding] autorelease];
value = [[NSString alloc] initWithData:ret encoding:NSUTF8StringEncoding];
}
return value;
}
Expand Down
2 changes: 2 additions & 0 deletions GoogleToolboxForMac.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ Pod::Spec.new do |s|

s.subspec 'Logger' do |sp|
sp.source_files = 'Foundation/GTMLogger.{h,m}'
sp.requires_arc = 'Foundation/GTMLogger.{h,m}'
sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}"
sp.resource_bundle = {
"GoogleToolboxForMac_Logger_Privacy" => "Resources/Logger/PrivacyInfo.xcprivacy"
Expand All @@ -98,6 +99,7 @@ Pod::Spec.new do |s|

s.subspec 'StringEncoding' do |sp|
sp.source_files = 'Foundation/GTMStringEncoding.{h,m}'
sp.requires_arc = 'Foundation/GTMStringEncoding.{h,m}'
sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}"
end

Expand Down
Loading