aboutsummaryrefslogtreecommitdiffstats
path: root/sysgen
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2016-01-11 22:16:14 +0100
committerDmitry Vyukov <dvyukov@google.com>2016-01-11 22:26:09 +0100
commit15128d47bd7de318bea5ecf0fb15a45deb794c9d (patch)
treec4a1dc12dc0cd3ae937ab98f65af901221583161 /sysgen
parent4d906f05d4d76e153e71a56eccf91eab24286f3a (diff)
sys: support /dev/snd/seq
Diffstat (limited to 'sysgen')
-rw-r--r--sysgen/sysgen.go45
1 files changed, 29 insertions, 16 deletions
diff --git a/sysgen/sysgen.go b/sysgen/sysgen.go
index c8996390b..655d11ce4 100644
--- a/sysgen/sysgen.go
+++ b/sysgen/sysgen.go
@@ -69,6 +69,7 @@ type Struct struct {
Flds [][]string
IsUnion bool
Packed bool
+ Varlen bool
Align int
}
@@ -329,11 +330,15 @@ func generateArg(name, typ string, a []string, structs map[string]Struct, unname
if str.Packed {
packed = ", packed: true"
}
+ varlen := ""
+ if str.Varlen {
+ varlen = ", varlen: true"
+ }
align := ""
if str.Align != 0 {
align = fmt.Sprintf(", align: %v", str.Align)
}
- fmt.Fprintf(out, "%v{TypeCommon: TypeCommon{TypeName: \"%v\", IsOptional: %v} %v %v, %v: []Type{", typ, str.Name, false, packed, align, fields)
+ fmt.Fprintf(out, "%v{TypeCommon: TypeCommon{TypeName: \"%v\", IsOptional: %v} %v %v %v, %v: []Type{", typ, str.Name, false, packed, align, varlen, fields)
for i, a := range str.Flds {
if i != 0 {
fmt.Fprintf(out, ", ")
@@ -427,6 +432,8 @@ func fmtFdKind(s string) string {
return "FdKvmVm"
case "kvmcpu":
return "FdKvmCpu"
+ case "sndseq":
+ return "FdSndSeq"
default:
failf("bad fd type %v", s)
return ""
@@ -572,21 +579,27 @@ func parse(in io.Reader) (includes []string, defines map[string]string, syscalls
p.Parse(p.Char())
for _, attr := range parseType1(p, unnamed, flags, "")[1:] {
if str.IsUnion {
- failf("union %v has attribute: %v", str.Name, attr)
- }
- switch attr {
- case "packed":
- str.Packed = true
- case "align_1":
- str.Align = 1
- case "align_2":
- str.Align = 2
- case "align_4":
- str.Align = 4
- case "align_8":
- str.Align = 8
- default:
- failf("unknown struct %v attribute: %v", str.Name, attr)
+ switch attr {
+ case "varlen":
+ str.Varlen = true
+ default:
+ failf("unknown union %v attribute: %v", str.Name, attr)
+ }
+ } else {
+ switch attr {
+ case "packed":
+ str.Packed = true
+ case "align_1":
+ str.Align = 1
+ case "align_2":
+ str.Align = 2
+ case "align_4":
+ str.Align = 4
+ case "align_8":
+ str.Align = 8
+ default:
+ failf("unknown struct %v attribute: %v", str.Name, attr)
+ }
}
}
structs[str.Name] = *str