| // Copyright 2012 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package syscall_test | |
| import ( | |
| "io/ioutil" | |
| "os" | |
| "path/filepath" | |
| "syscall" | |
| "testing" | |
| ) | |
| func TestWin32finddata(t *testing.T) { | |
| dir, err := ioutil.TempDir("", "go-build") | |
| if err != nil { | |
| t.Fatalf("failed to create temp directory: %v", err) | |
| } | |
| defer os.RemoveAll(dir) | |
| path := filepath.Join(dir, "long_name.and_extension") | |
| f, err := os.Create(path) | |
| if err != nil { | |
| t.Fatalf("failed to create %v: %v", path, err) | |
| } | |
| f.Close() | |
| type X struct { | |
| fd syscall.Win32finddata | |
| got byte | |
| pad [10]byte // to protect ourselves | |
| } | |
| var want byte = 2 // it is unlikely to have this character in the filename | |
| x := X{got: want} | |
| h, err := syscall.FindFirstFile(syscall.StringToUTF16Ptr(path), &(x.fd)) | |
| if err != nil { | |
| t.Fatalf("FindFirstFile failed: %v", err) | |
| } | |
| err = syscall.FindClose(h) | |
| if err != nil { | |
| t.Fatalf("FindClose failed: %v", err) | |
| } | |
| if x.got != want { | |
| t.Fatalf("memory corruption: want=%d got=%d", want, x.got) | |
| } | |
| } |