mirror of
https://github.com/criyle/go-sandbox.git
synced 2025-11-04 14:49:53 +08:00
41 lines
829 B
Go
41 lines
829 B
Go
package main
|
|
|
|
import "os"
|
|
|
|
// prepareFile opens file for new process
|
|
func prepareFiles(inputFile, outputFile, errorFile string) ([]*os.File, error) {
|
|
var err error
|
|
files := make([]*os.File, 3)
|
|
if inputFile != "" {
|
|
files[0], err = os.OpenFile(inputFile, os.O_RDONLY, 0755)
|
|
if err != nil {
|
|
goto openerror
|
|
}
|
|
}
|
|
if outputFile != "" {
|
|
files[1], err = os.OpenFile(outputFile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0755)
|
|
if err != nil {
|
|
goto openerror
|
|
}
|
|
}
|
|
if errorFile != "" {
|
|
files[2], err = os.OpenFile(errorFile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0755)
|
|
if err != nil {
|
|
goto openerror
|
|
}
|
|
}
|
|
return files, nil
|
|
openerror:
|
|
closeFiles(files)
|
|
return nil, err
|
|
}
|
|
|
|
// closeFiles close all file in the list
|
|
func closeFiles(files []*os.File) {
|
|
for _, f := range files {
|
|
if f != nil {
|
|
f.Close()
|
|
}
|
|
}
|
|
}
|