src/pxar/decoder.rs: correctly call callback()
This commit is contained in:
		@ -35,7 +35,7 @@ impl PxarDecodeWriter {
 | 
				
			|||||||
          
 | 
					          
 | 
				
			||||||
            if let Err(err) = decoder.restore(&base, & |path| {
 | 
					            if let Err(err) = decoder.restore(&base, & |path| {
 | 
				
			||||||
                if verbose {
 | 
					                if verbose {
 | 
				
			||||||
                    println!("RESTORE: {:?}", path);
 | 
					                    println!("{:?}", path);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                Ok(())
 | 
					                Ok(())
 | 
				
			||||||
            }) {
 | 
					            }) {
 | 
				
			||||||
 | 
				
			|||||||
@ -266,6 +266,8 @@ impl <'a, R: Read> PxarDecoder<'a, R> {
 | 
				
			|||||||
        check_ca_header::<CaFormatEntry>(&head, CA_FORMAT_ENTRY)?;
 | 
					        check_ca_header::<CaFormatEntry>(&head, CA_FORMAT_ENTRY)?;
 | 
				
			||||||
        let entry: CaFormatEntry = self.read_item()?;
 | 
					        let entry: CaFormatEntry = self.read_item()?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        (callback)(path)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let mode = entry.mode as u32; //fixme: upper 32bits?
 | 
					        let mode = entry.mode as u32; //fixme: upper 32bits?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let ifmt = mode & libc::S_IFMT;
 | 
					        let ifmt = mode & libc::S_IFMT;
 | 
				
			||||||
@ -286,8 +288,7 @@ impl <'a, R: Read> PxarDecoder<'a, R> {
 | 
				
			|||||||
            while head.htype == CA_FORMAT_FILENAME {
 | 
					            while head.htype == CA_FORMAT_FILENAME {
 | 
				
			||||||
                let name = self.read_filename(head.size)?;
 | 
					                let name = self.read_filename(head.size)?;
 | 
				
			||||||
                path.push(&name);
 | 
					                path.push(&name);
 | 
				
			||||||
                println!("NAME: {:?}", path);
 | 
					                //println!("NAME: {:?}", path);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                self.restore_sequential(path, &name, &dir, callback)?;
 | 
					                self.restore_sequential(path, &name, &dir, callback)?;
 | 
				
			||||||
                path.pop();
 | 
					                path.pop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -298,7 +299,7 @@ impl <'a, R: Read> PxarDecoder<'a, R> {
 | 
				
			|||||||
                bail!("got unknown header type inside directory entry {:016x}", head.htype);
 | 
					                bail!("got unknown header type inside directory entry {:016x}", head.htype);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            println!("Skip Goodbye");
 | 
					            //println!("Skip Goodbye");
 | 
				
			||||||
            if head.size < HEADER_SIZE { bail!("detected short goodbye table"); }
 | 
					            if head.size < HEADER_SIZE { bail!("detected short goodbye table"); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self.skip_bytes((head.size - HEADER_SIZE) as usize)?;
 | 
					            self.skip_bytes((head.size - HEADER_SIZE) as usize)?;
 | 
				
			||||||
@ -322,7 +323,7 @@ impl <'a, R: Read> PxarDecoder<'a, R> {
 | 
				
			|||||||
            match head.htype {
 | 
					            match head.htype {
 | 
				
			||||||
                CA_FORMAT_SYMLINK => {
 | 
					                CA_FORMAT_SYMLINK => {
 | 
				
			||||||
                    let target = self.read_symlink(head.size)?;
 | 
					                    let target = self.read_symlink(head.size)?;
 | 
				
			||||||
                    println!("TARGET: {:?}", target);
 | 
					                    //println!("TARGET: {:?}", target);
 | 
				
			||||||
                    if let Err(err) = symlinkat(&target, parent_fd, filename) {
 | 
					                    if let Err(err) = symlinkat(&target, parent_fd, filename) {
 | 
				
			||||||
                        bail!("create symlink {:?} failed - {}", path, err);
 | 
					                        bail!("create symlink {:?} failed - {}", path, err);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user