mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
863 B
31 lines
863 B
// Copyright 2014 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. |
|
|
|
// +build windows |
|
// +build go1.3 |
|
|
|
package svc |
|
|
|
import "unsafe" |
|
|
|
const ptrSize = 4 << (^uintptr(0) >> 63) // unsafe.Sizeof(uintptr(0)) but an ideal const |
|
|
|
// Should be a built-in for unsafe.Pointer? |
|
func add(p unsafe.Pointer, x uintptr) unsafe.Pointer { |
|
return unsafe.Pointer(uintptr(p) + x) |
|
} |
|
|
|
// funcPC returns the entry PC of the function f. |
|
// It assumes that f is a func value. Otherwise the behavior is undefined. |
|
func funcPC(f interface{}) uintptr { |
|
return **(**uintptr)(add(unsafe.Pointer(&f), ptrSize)) |
|
} |
|
|
|
// from sys_386.s and sys_amd64.s |
|
func servicectlhandler(ctl uint32) uintptr |
|
func servicemain(argc uint32, argv **uint16) |
|
|
|
func getServiceMain(r *uintptr) { |
|
*r = funcPC(servicemain) |
|
}
|
|
|