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.