mirror of
				https://github.com/restic/restic.git
				synced 2025-10-31 13:21:01 +00:00 
			
		
		
		
	 59b343a9bf
			
		
	
	
		59b343a9bf
		
	
	
	
	
		
			
			Go has supported Windows paths correctly since 1.11, see https://github.com/golang/go/issues/10900 and the commit referenced there.
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +build !windows
 | |
| 
 | |
| package fs
 | |
| 
 | |
| import (
 | |
| 	"io/ioutil"
 | |
| 	"os"
 | |
| 	"syscall"
 | |
| )
 | |
| 
 | |
| // fixpath returns an absolute path on windows, so restic can open long file
 | |
| // names.
 | |
| func fixpath(name string) string {
 | |
| 	return name
 | |
| }
 | |
| 
 | |
| // TempFile creates a temporary file which has already been deleted (on
 | |
| // supported platforms)
 | |
| func TempFile(dir, prefix string) (f *os.File, err error) {
 | |
| 	f, err = ioutil.TempFile(dir, prefix)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	if err = os.Remove(f.Name()); err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	return f, nil
 | |
| }
 | |
| 
 | |
| // isNotSuported returns true if the error is caused by an unsupported file system feature.
 | |
| func isNotSupported(err error) bool {
 | |
| 	if perr, ok := err.(*os.PathError); ok && perr.Err == syscall.ENOTSUP {
 | |
| 		return true
 | |
| 	}
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| // Chmod changes the mode of the named file to mode.
 | |
| func Chmod(name string, mode os.FileMode) error {
 | |
| 	err := os.Chmod(fixpath(name), mode)
 | |
| 
 | |
| 	// ignore the error if the FS does not support setting this mode (e.g. CIFS with gvfs on Linux)
 | |
| 	if err != nil && isNotSupported(err) {
 | |
| 		return nil
 | |
| 	}
 | |
| 
 | |
| 	return err
 | |
| }
 |