github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/libkb/tmpfile.go (about) 1 // Copyright 2015 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package libkb 5 6 import ( 7 "fmt" 8 "os" 9 "path/filepath" 10 ) 11 12 // OpenTempFile creates an opened termporary file. Use mode=0 for default 13 // permissions. 14 // 15 // OpenTempFile("foo", ".zip", 0755) => "foo.RCG2KUSCGYOO3PCKNWQHBOXBKACOPIKL.zip" 16 // OpenTempFile(path.Join(os.TempDir(), "foo"), "", 0) => "/tmp/foo.RCG2KUSCGYOO3PCKNWQHBOXBKACOPIKL" 17 func OpenTempFile(prefix string, suffix string, mode os.FileMode) (string, *os.File, error) { 18 if prefix == "" { 19 return "", nil, fmt.Errorf("Prefix was an empty string") 20 } 21 filename, err := RandString(fmt.Sprintf("%s.", prefix), 20) 22 if err != nil { 23 return "", nil, err 24 } 25 if suffix != "" { 26 filename += suffix 27 } 28 flags := os.O_WRONLY | os.O_CREATE | os.O_EXCL 29 if mode == 0 { 30 mode = PermFile 31 } 32 file, err := os.OpenFile(filename, flags, mode) 33 return filename, file, err 34 } 35 36 // TempFileName returns a temporary random filename 37 func TempFileName(prefix string) (tmp string, err error) { 38 tmp, err = RandString(prefix, 20) 39 return 40 } 41 42 // TempFile returns a random path name in os.TempDir() 43 func TempFile(prefix string) (string, error) { 44 tmp, err := TempFileName(prefix) 45 if err != nil { 46 return "", err 47 } 48 return filepath.Join(os.TempDir(), tmp), nil 49 }