fix OS X unzipping
							parent
							
								
									b873605bad
								
							
						
					
					
						commit
						6140e6ca1f
					
				| 
						 | 
				
			
			@ -195,36 +195,61 @@ func checkSHA256() {
 | 
			
		|||
	fmt.Println("checked!")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func unzip(archive, target string) error {
 | 
			
		||||
	reader, err := zip.OpenReader(archive)
 | 
			
		||||
func unzip(src, dest string) error {
 | 
			
		||||
	r, err := zip.OpenReader(src)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := os.MkdirAll(target, 0755); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	defer func() {
 | 
			
		||||
		if err := r.Close(); err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	for _, file := range reader.File {
 | 
			
		||||
		path := filepath.Join(target, file.Name)
 | 
			
		||||
		if file.FileInfo().IsDir() {
 | 
			
		||||
			os.MkdirAll(path, file.Mode())
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
	os.MkdirAll(dest, 0755)
 | 
			
		||||
 | 
			
		||||
		fileReader, err := file.Open()
 | 
			
		||||
	// Closure to address file descriptors issue with all the deferred .Close() methods
 | 
			
		||||
	extractAndWriteFile := func(f *zip.File) error {
 | 
			
		||||
		rc, err := f.Open()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		defer fileReader.Close()
 | 
			
		||||
		defer func() {
 | 
			
		||||
			if err := rc.Close(); err != nil {
 | 
			
		||||
				panic(err)
 | 
			
		||||
			}
 | 
			
		||||
		}()
 | 
			
		||||
 | 
			
		||||
		targetFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
 | 
			
		||||
		path := filepath.Join(dest, f.Name)
 | 
			
		||||
 | 
			
		||||
		if f.FileInfo().IsDir() {
 | 
			
		||||
			os.MkdirAll(path, f.Mode())
 | 
			
		||||
		} else {
 | 
			
		||||
			if _, err := os.Stat(filepath.Dir(path)); os.IsNotExist(err) {
 | 
			
		||||
				os.MkdirAll(filepath.Dir(path), 0755)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
		defer targetFile.Close()
 | 
			
		||||
			defer func() {
 | 
			
		||||
				if err := f.Close(); err != nil {
 | 
			
		||||
					panic(err)
 | 
			
		||||
				}
 | 
			
		||||
			}()
 | 
			
		||||
			_, err = io.Copy(f, rc)
 | 
			
		||||
 | 
			
		||||
		if _, err := io.Copy(targetFile, fileReader); err != nil {
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, f := range r.File {
 | 
			
		||||
		err := extractAndWriteFile(f)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue