Skip to content

Commit

Permalink
unix: convert Iovec.Base to *byte in mkpost.go on solaris
Browse files Browse the repository at this point in the history
Instead of defining a dedicated type goIovec with the correct *byte type
for its Base field like CL 412496 did, modify the Base field of the
original type Iovec (generated from struct iovec) in mkpost.go. This is
akin to how we already change []int8 to []byte for several other types.

Fixes golang/go#55997

Change-Id: If30799bb2bfe6d17678370b45348ff0b7c5de2e9
Reviewed-on: https://go-review.googlesource.com/c/sys/+/484635
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: David Chase <drchase@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
  • Loading branch information
tklauser authored and gopherbot committed Apr 14, 2023
1 parent 3125361 commit 1fb6828
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
11 changes: 11 additions & 0 deletions unix/mkpost.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,17 @@ func main() {
})
}

if goos == "solaris" {
// Convert *int8 to *byte in Iovec.Base like on every other platform.
convertIovecBase := regexp.MustCompile(`Base\s+\*int8`)
iovecType := regexp.MustCompile(`type Iovec struct {[^}]*}`)
iovecStructs := iovecType.FindAll(b, -1)
for _, s := range iovecStructs {
newNames := convertIovecBase.ReplaceAll(s, []byte("Base *byte"))
b = bytes.Replace(b, s, newNames, 1)
}
}

// Intentionally export __val fields in Fsid and Sigset_t
valRegex := regexp.MustCompile(`type (Fsid|Sigset_t) struct {(\s+)X__(bits|val)(\s+\S+\s+)}`)
b = valRegex.ReplaceAll(b, []byte("type $1 struct {${2}Val$4}"))
Expand Down
8 changes: 1 addition & 7 deletions unix/types_solaris.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,6 @@ struct sockaddr_any {
char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];
};
// go_iovec is used to get *byte as the base address for Iovec.
struct goIovec {
void* iov_base;
size_t iov_len;
};
// Solaris and the major illumos distributions ship a 3rd party tun/tap driver
// from https://github.com/kaizawa/tuntap
// It supports a pair of IOCTLs defined at
Expand Down Expand Up @@ -164,7 +158,7 @@ type _Socklen C.socklen_t

type Linger C.struct_linger

type Iovec C.struct_goIovec
type Iovec C.struct_iovec

type IPMreq C.struct_ip_mreq

Expand Down

0 comments on commit 1fb6828

Please sign in to comment.