2012-06-03 03:27:17 -06:00
|
|
|
// 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 {
|
2012-06-08 12:04:44 -06:00
|
|
|
fd syscall.Win32finddata
|
2012-06-03 03:27:17 -06:00
|
|
|
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}
|
|
|
|
|
2012-06-08 12:04:44 -06:00
|
|
|
h, err := syscall.FindFirstFile(syscall.StringToUTF16Ptr(path), &(x.fd))
|
2012-06-03 03:27:17 -06:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|