- 论坛徽章:
- 11
|
忍着又看了2句,看到了这个:
void bkfile_copyout(
iofile_t *iofile,
const char *out_name,
int in_des,
const char *in_name,
struct ar_header *file_hdr,
int copy_device,
OFF_T seek
) {
char buf[8192*5],*buffer;
int is_dev = 0;
int exec_copy = 0;
long len;
long pagesize=8192;
long cur_finish = 0;
long finish = 0;
long cur_total = file_hdr->c_filesize;
long count = 0;
is_dev = AR_ISDEV(file_hdr->c_mode);
exec_copy = AR_ISREG(file_hdr->c_mode) || (copy_device&&is_dev);
if( !exec_copy ){
cur_finish = 1;
return;
}
buffer = buf;
if( pagesize > 8192 ) pagesize = 8192;
pagesize = pagesize;
/* set the buffer address align page(8192) */
buffer = (void *)(((ulong)buffer+pagesize-1)&(~(ulong)(pagesize-1)));
if( seek && lseek(in_des,seek,SEEK_SET)<0 ){
bklog(LOG_WARNING,errno,"seek(%ld) %s failed, skipping it.",seek,file_hdr->c_name);
return;
}
while( 1 ){
if( cur_finish == cur_total )
break;
if( is_dev ){
count = cur_finish+pagesize<cur_total ? pagesize : cur_total-cur_finish;
} else {
count = cur_finish+pagesize<cur_total ? pagesize : cur_total-cur_finish;
}
.........
} |
|