1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#import "XADStuffItXBlockHandle.h"
#import "StuffItXUtilities.h"
@implementation XADStuffItXBlockHandle
-(id)initWithHandle:(CSHandle *)handle
{
if((self=[super initWithName:[handle name]]))
{
parent=[handle retain];
startoffs=[parent offsetInFile];
buffer=NULL;
currsize=0;
}
return self;
}
-(void)dealloc
{
free(buffer);
[parent release];
[super dealloc];
}
-(void)resetBlockStream
{
[parent seekToFileOffset:startoffs];
}
-(int)produceBlockAtOffset:(off_t)pos
{
int size=ReadSitxP2(parent);
if(!size) return -1;
if(size>currsize)
{
free(buffer);
buffer=malloc(size);
currsize=size;
[self setBlockPointer:buffer];
}
return [parent readAtMost:size toBuffer:buffer];
}
@end
|