aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/os
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2022-02-18 13:10:34 -0800
committerIan Lance Taylor <iant@golang.org>2022-02-18 13:12:08 -0800
commit20a33efdf32bf0aedcb0c9813ddc7572bb1ab8c7 (patch)
tree94aec72c2092a11fa49f0b45da8e036f13416209 /libgo/go/os
parent1931cbad498e625b1e24452dcfffe02539b12224 (diff)
downloadgcc-20a33efdf32bf0aedcb0c9813ddc7572bb1ab8c7.zip
gcc-20a33efdf32bf0aedcb0c9813ddc7572bb1ab8c7.tar.gz
gcc-20a33efdf32bf0aedcb0c9813ddc7572bb1ab8c7.tar.bz2
libgo: update to Go1.18rc1 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/386594
Diffstat (limited to 'libgo/go/os')
-rw-r--r--libgo/go/os/example_test.go22
-rw-r--r--libgo/go/os/os_test.go40
-rw-r--r--libgo/go/os/tempfile.go2
3 files changed, 50 insertions, 14 deletions
diff --git a/libgo/go/os/example_test.go b/libgo/go/os/example_test.go
index e8554b0..53e3c52 100644
--- a/libgo/go/os/example_test.go
+++ b/libgo/go/os/example_test.go
@@ -241,3 +241,25 @@ func ExampleWriteFile() {
log.Fatal(err)
}
}
+
+func ExampleMkdir() {
+ err := os.Mkdir("testdir", 0750)
+ if err != nil && !os.IsExist(err) {
+ log.Fatal(err)
+ }
+ err = os.WriteFile("testdir/testfile.txt", []byte("Hello, Gophers!"), 0660)
+ if err != nil {
+ log.Fatal(err)
+ }
+}
+
+func ExampleMkdirAll() {
+ err := os.MkdirAll("test/subdir", 0750)
+ if err != nil && !os.IsExist(err) {
+ log.Fatal(err)
+ }
+ err = os.WriteFile("test/subdir/testfile.txt", []byte("Hello, Gophers!"), 0660)
+ if err != nil {
+ log.Fatal(err)
+ }
+}
diff --git a/libgo/go/os/os_test.go b/libgo/go/os/os_test.go
index e90b89d..59e4fb6 100644
--- a/libgo/go/os/os_test.go
+++ b/libgo/go/os/os_test.go
@@ -28,6 +28,16 @@ import (
"time"
)
+func TestMain(m *testing.M) {
+ if Getenv("GO_OS_TEST_DRAIN_STDIN") == "1" {
+ os.Stdout.Close()
+ io.Copy(io.Discard, os.Stdin)
+ Exit(0)
+ }
+
+ Exit(m.Run())
+}
+
var dot = []string{
"dir.go",
"env.go",
@@ -2261,9 +2271,18 @@ func testKillProcess(t *testing.T, processKiller func(p *Process)) {
testenv.MustHaveExec(t)
t.Parallel()
- // Re-exec the test binary itself to emulate "sleep 1".
- cmd := osexec.Command(Args[0], "-test.run", "TestSleep")
- err := cmd.Start()
+ // Re-exec the test binary to start a process that hangs until stdin is closed.
+ cmd := osexec.Command(Args[0])
+ cmd.Env = append(os.Environ(), "GO_OS_TEST_DRAIN_STDIN=1")
+ stdout, err := cmd.StdoutPipe()
+ if err != nil {
+ t.Fatal(err)
+ }
+ stdin, err := cmd.StdinPipe()
+ if err != nil {
+ t.Fatal(err)
+ }
+ err = cmd.Start()
if err != nil {
t.Fatalf("Failed to start test process: %v", err)
}
@@ -2272,19 +2291,14 @@ func testKillProcess(t *testing.T, processKiller func(p *Process)) {
if err := cmd.Wait(); err == nil {
t.Errorf("Test process succeeded, but expected to fail")
}
+ stdin.Close() // Keep stdin alive until the process has finished dying.
}()
- time.Sleep(100 * time.Millisecond)
- processKiller(cmd.Process)
-}
+ // Wait for the process to be started.
+ // (It will close its stdout when it reaches TestMain.)
+ io.Copy(io.Discard, stdout)
-// TestSleep emulates "sleep 1". It is a helper for testKillProcess, so we
-// don't have to rely on an external "sleep" command being available.
-func TestSleep(t *testing.T) {
- if testing.Short() {
- t.Skip("Skipping in short mode")
- }
- time.Sleep(time.Second)
+ processKiller(cmd.Process)
}
func TestKillStartProcess(t *testing.T) {
diff --git a/libgo/go/os/tempfile.go b/libgo/go/os/tempfile.go
index 5b681fc..3be3d13 100644
--- a/libgo/go/os/tempfile.go
+++ b/libgo/go/os/tempfile.go
@@ -46,7 +46,7 @@ func CreateTemp(dir, pattern string) (*File, error) {
if try++; try < 10000 {
continue
}
- return nil, &PathError{Op: "createtemp", Path: dir + string(PathSeparator) + prefix + "*" + suffix, Err: ErrExist}
+ return nil, &PathError{Op: "createtemp", Path: prefix + "*" + suffix, Err: ErrExist}
}
return f, err
}