This is MappedFile.m in view mode; [Download] [Up]
// // $Id: MappedFile.m,v 1.4 1997/12/07 22:31:41 nygard Exp $ // // // This file is a part of class-dump v2, a utility for examining the // Objective-C segment of Mach-O files. // Copyright (C) 1997 Steve Nygard // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // // You may contact the author by: // e-mail: nygard@telusplanet.net // #import "MappedFile.h" #if NS_TARGET_MAJOR < 4 #import <foundation/NSArray.h> #import <foundation/NSException.h> #import <foundation/NSPathUtilities.h> #import <foundation/NSUtilities.h> @interface NSString (Foundation4PathCompatibility) - (NSArray *)pathComponents; @end @implementation NSString (Foundation4PathCompatibility) - (NSArray *)pathComponents { return [self componentsSeparatedByString:@"/"]; } @end #endif #include <stdio.h> #include <libc.h> #include <ctype.h> @implementation MappedFile // Will map filename into memory. If filename is a directory with specific suffixes, treat the directory as a wrapper. - initWithFilename:(NSString *)aFilename { NSString *standardPath; #if (NS_TARGET_MAJOR >= 4) NSMutableSet *wrappers = [NSMutableSet set]; #else // for foundation 3.x (less efficient than a set but at least it works...) NSMutableArray *wrappers = [NSMutableArray array]; #endif if ([super init] == nil) return nil; standardPath = [aFilename stringByStandardizingPath]; [wrappers addObject:@"app"]; [wrappers addObject:@"framework"]; [wrappers addObject:@"bundle"]; [wrappers addObject:@"palette"]; if ([wrappers containsObject:[standardPath pathExtension]] == YES) { standardPath = [self pathToMainFileOfWrapper:standardPath]; } data = [[NSData dataWithContentsOfMappedFile:standardPath] retain]; if (data == nil) { NSLog (@"Couldn't map file: %@", standardPath); return nil; } filename = [standardPath retain]; return self; } - (void) dealloc { [data release]; [filename release]; [super dealloc]; } - (NSString *) filename { return filename; } - (const void *) data { return [data bytes]; } // How does this handle something ending in "/"? - (NSString *) pathToMainFileOfWrapper:(NSString *)path { NSRange range; NSMutableString *tmp; NSString *extension; NSString *base; base = [[path pathComponents] lastObject]; NSAssert (base != nil, @"No base."); extension = [NSString stringWithFormat:@".%@", [base pathExtension]]; tmp = [NSMutableString stringWithFormat:@"%@/%@", path, base]; range = [tmp rangeOfString:extension options:NSBackwardsSearch]; [tmp deleteCharactersInRange:range]; return tmp; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.