-
Notifications
You must be signed in to change notification settings - Fork 580
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
windows/mkwinsyscall: support "." and "-" in DLL name
This change adds "." and "-" support for DLL filenames in "//sys". Supporting "." requires a change in how mkwinsyscall handles the "= <filename>.<function>" syntax. Instead of assuming that only one "." can appear in this string, now mkwinsyscall assumes that any additional "." belongs to the filename. Supporting "." also requires changing how Go identifiers are created for each DLL. This change also allows mkwinsyscall to support "-". When creating a Go identifier, "." and "-" in the DLL filename are replaced with "_". Otherwise, mkwinsyscall would produce invalid Go code, causing "format.Source" to fail. Includes a test for the new behavior. There aren't yet any cases where this code is executed while generating the x/sys/windows syscalls. The syscalls "SetSocketMediaStreamingMode" from "windows.networking.dll" and "WslRegisterDistribution" from "api-ms-win-wsl-api-l1-1-0.dll" can be successfully called using this change, but these syscalls have no known use in Go so they are not included in this change. Fixes golang/go#57913 Change-Id: If64deeb8c7738d61520e7392fd2d81ef8920f08d Reviewed-on: https://go-review.googlesource.com/c/sys/+/463215 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> Run-TryBot: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Quim Muntal <quimmuntal@gmail.com> Reviewed-by: Bryan Mills <bcmills@google.com>
- Loading branch information
1 parent
b829a39
commit 71da690
Showing
2 changed files
with
93 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
// Copyright 2023 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 main | ||
|
||
import ( | ||
"bytes" | ||
"go/format" | ||
"os" | ||
"path/filepath" | ||
"testing" | ||
) | ||
|
||
func TestDLLFilenameEscaping(t *testing.T) { | ||
tests := []struct { | ||
name string | ||
filename string | ||
}{ | ||
{"no escaping necessary", "kernel32"}, | ||
{"escape period", "windows.networking"}, | ||
{"escape dash", "api-ms-win-wsl-api-l1-1-0"}, | ||
} | ||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
// Write a made-up syscall into a temp file for testing. | ||
const prefix = "package windows\n//sys Example() = " | ||
const suffix = ".Example" | ||
name := filepath.Join(t.TempDir(), "syscall.go") | ||
if err := os.WriteFile(name, []byte(prefix+tt.filename+suffix), 0666); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
// Ensure parsing, generating, and formatting run without errors. | ||
// This is good enough to show that escaping is working. | ||
src, err := ParseFiles([]string{name}) | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
var buf bytes.Buffer | ||
if err := src.Generate(&buf); err != nil { | ||
t.Fatal(err) | ||
} | ||
if _, err := format.Source(buf.Bytes()); err != nil { | ||
t.Log(buf.String()) | ||
t.Fatal(err) | ||
} | ||
}) | ||
} | ||
} |