You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							38 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							38 lines
						
					
					
						
							1.0 KiB
						
					
					
				| var binary = require('binary');
 | |
| 
 | |
| module.exports = function(extraField, vars) {
 | |
|   var extra;
 | |
|   // Find the ZIP64 header, if present.
 | |
|   while(!extra && extraField && extraField.length) {
 | |
|     var candidateExtra = binary.parse(extraField)
 | |
|       .word16lu('signature')
 | |
|       .word16lu('partsize')
 | |
|       .word64lu('uncompressedSize')
 | |
|       .word64lu('compressedSize')
 | |
|       .word64lu('offset')
 | |
|       .word64lu('disknum')
 | |
|       .vars;
 | |
| 
 | |
|     if(candidateExtra.signature === 0x0001) {
 | |
|       extra = candidateExtra;
 | |
|     } else {
 | |
|       // Advance the buffer to the next part.
 | |
|       // The total size of this part is the 4 byte header + partsize.
 | |
|       extraField = extraField.slice(candidateExtra.partsize + 4);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   extra = extra || {};
 | |
| 
 | |
|   if (vars.compressedSize === 0xffffffff)
 | |
|     vars.compressedSize = extra.compressedSize;
 | |
| 
 | |
|   if (vars.uncompressedSize  === 0xffffffff)
 | |
|     vars.uncompressedSize= extra.uncompressedSize;
 | |
| 
 | |
|   if (vars.offsetToLocalFileHeader === 0xffffffff)
 | |
|     vars.offsetToLocalFileHeader= extra.offset;
 | |
| 
 | |
|   return extra;
 | |
| };
 |