func run()

in auparse/mk_audit_exit_codes.go [145:214]


func run() error {
	tmp, err := os.MkdirTemp("", "mk_audit_exit_codes")
	if err != nil {
		return err
	}
	defer os.RemoveAll(tmp)

	if err := os.Chdir(tmp); err != nil {
		return err
	}

	errnos, err := readErrorNumbers()
	if err != nil {
		return err
	}

	// Filter duplicates and sort by name.
	var numToName []ErrorNumber
	for _, errno := range errnos {
		if errno.Value >= 0 {
			numToName = append(numToName, errno)
		}
	}

	// Create output file.
	f, err := os.Create("defs.go")
	if err != nil {
		return err
	}
	defer f.Close()

	// Evaluate template.
	r := TemplateParams{
		Command:   filepath.Base(os.Args[0]),
		NameToNum: errnos,
		NumToName: numToName,
	}
	if err := tmpl.Execute(f, r); err != nil {
		return err
	}

	output, err := exec.Command("go", "tool", "cgo", "-godefs", "defs.go").Output()
	if err != nil {
		return err
	}

	buf := new(bytes.Buffer)
	if err = headerTmpl.Execute(buf, r); err != nil {
		return nil
	}

	s := bufio.NewScanner(bytes.NewReader(output))
	for s.Scan() {
		if !bytes.HasPrefix(s.Bytes(), []byte("//")) {
			buf.Write(s.Bytes())
			buf.WriteByte('\n')
		}
	}

	if err = os.WriteFile(flagOut, buf.Bytes(), 0o644); err != nil {
		return err
	}

	_, err = exec.Command("gofmt", "-w", "-s", flagOut).Output()
	if err != nil {
		return err
	}

	return nil
}