Skip to content

Commit

Permalink
Use NewLazySystemDLL instead of NewLazyDLL (#132)
Browse files Browse the repository at this point in the history
* Use NewLazySystemDLL instead of NewLazyDLL

The ensures that the code only search for DLLs in the Windows system directory.

* Remove old go:generate call

Putting this into doc.go which does not have build tags allows the code to be generated from non-windows OSes.
  • Loading branch information
andrewkroh authored Aug 28, 2019
1 parent 356ba2b commit c93349b
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 9 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).

### Changed

- Load DLLs only from Windows system directory.

### Deprecated

## [0.10.4]
Expand Down
6 changes: 6 additions & 0 deletions sys/windows/doc.go
Original file line number Diff line number Diff line change
@@ -1,2 +1,8 @@
// Package windows contains various Windows system call.
package windows

// Use "go generate -v -x ." to generate the source.

// Add -trace to enable debug prints around syscalls.
//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -systemdll=true -output zsyscall_windows.go syscall_windows.go
//go:generate go run fix_generated.go -input zsyscall_windows.go
60 changes: 60 additions & 0 deletions sys/windows/fix_generated.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

//+build ignore

package main

import (
"flag"
"io/ioutil"
"log"
"regexp"
)

func main() {
var filename string

log.SetFlags(0)
flag.StringVar(&filename, "input", "", "name of generated source file to fix")
flag.Parse()

if filename == "" {
log.Fatal("Name of generated file must be specified with -input flag")
}

if err := fixGeneratedCode(filename); err != nil {
log.Fatal(err)
}
}

var lazySystemRegex = regexp.MustCompile(`(?m)\sNewLazySystemDLL`)
var unsafeImportRegex = regexp.MustCompile(`(?m)"unsafe"`)

// fixGeneratedCode adds "windows." to locations in the generated source code
// that reference "NewLazySystemDLL" without the package name.
func fixGeneratedCode(filename string) error {
data, err := ioutil.ReadFile(filename)
if err != nil {
return err
}

data = lazySystemRegex.ReplaceAll(data, []byte(" windows.NewLazySystemDLL"))
data = unsafeImportRegex.ReplaceAll(data, []byte(`"unsafe"`+"\n\n\t"+`"golang.org/x/sys/windows"`))

return ioutil.WriteFile(filename, data, 0644)
}
5 changes: 0 additions & 5 deletions sys/windows/syscall_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -580,11 +580,6 @@ func GetTickCount64() (uptime uint64, err error) {
return uptime, nil
}

// Use "GOOS=windows go generate -v -x ." to generate the source.

// Add -trace to enable debug prints around syscalls.
//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -systemdll=false -output zsyscall_windows.go syscall_windows.go

// Windows API calls
//sys _GlobalMemoryStatusEx(buffer *MemoryStatusEx) (err error) = kernel32.GlobalMemoryStatusEx
//sys _GetLogicalDriveStringsW(bufferLength uint32, buffer *uint16) (length uint32, err error) = kernel32.GetLogicalDriveStringsW
Expand Down
10 changes: 6 additions & 4 deletions sys/windows/zsyscall_windows.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit c93349b

Please sign in to comment.