X-Git-Url: http://www.git.cypherpunks.ru/?p=goredo.git;a=blobdiff_plain;f=tmp.go;h=7b3161117edb90e783a6d8abb7bfc8f747da9579;hp=8e8bff3c13fbaeacd3fd49bde2d245b9f25abdd3;hb=b4eefdd675c9aef9ff8bd1089d031ee05733195b;hpb=edb601644735972fac3efcdc27849b5b9b1f5fb7 diff --git a/tmp.go b/tmp.go index 8e8bff3..7b31611 100644 --- a/tmp.go +++ b/tmp.go @@ -1,6 +1,6 @@ /* -goredo -- redo implementation on pure Go -Copyright (C) 2020-2021 Sergey Matveev +goredo -- djb's redo implementation on pure Go +Copyright (C) 2020-2023 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,17 +21,17 @@ package main import ( "os" - "path" - "strconv" - "time" ) -func tempsuffix() string { - return strconv.FormatInt((time.Now().UnixNano()+int64(os.Getpid()))&0xFFFFFFFF, 16) -} - func tempfile(dir, prefix string) (*os.File, error) { - // It respects umask, unlike ioutil.TempFile - name := path.Join(dir, TmpPrefix+prefix+"."+tempsuffix()) - return os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, os.FileMode(0666)) + tmp, err := os.CreateTemp(dir, TmpPrefix+prefix+".") + if err != nil { + return nil, err + } + err = os.Chmod(tmp.Name(), os.FileMode(0666&^UmaskCur)) + if err != nil { + tmp.Close() + return nil, err + } + return tmp, nil }