// -*- mode: ObjC -*-

//  This file is part of class-dump, a utility for examining the Objective-C segment of Mach-O files.
//  Copyright (C) 1997-1998, 2000-2001, 2004-2009 Steve Nygard.

#import "CDLCDylinker.h"

#import "CDDataCursor.h"

@implementation CDLCDylinker

- (id)initWithDataCursor:(CDDataCursor *)cursor machOFile:(CDMachOFile *)aMachOFile;
{
    NSUInteger length;

    if ([super initWithDataCursor:cursor machOFile:aMachOFile] == nil)
        return nil;

    dylinkerCommand.cmd = [cursor readInt32];
    dylinkerCommand.cmdsize = [cursor readInt32];

    dylinkerCommand.name.offset = [cursor readInt32];

    length = dylinkerCommand.cmdsize - sizeof(dylinkerCommand);
    //NSLog(@"expected length: %u", length);

    name = [[cursor readStringOfLength:length encoding:NSASCIIStringEncoding] retain];
    //NSLog(@"name: %@", name);

    return self;
}

- (void)dealloc;
{
    [name release];

    [super dealloc];
}

- (uint32_t)cmd;
{
    return dylinkerCommand.cmd;
}

- (uint32_t)cmdsize;
{
    return dylinkerCommand.cmdsize;
}

- (NSString *)name;
{
    return name;
}

@end
