From 23a7f3baa33265519840609dc54e950615ec39b1 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 3 Jan 2020 18:04:08 +0200 Subject: Merge some QoL improvements from staging branch - Build executable in top-level buildroot - Use meson sourceset - Pull in poi-crash and poi-update from staging - Remove extraneous scripts in tools/ - Pull in configure scripts in scripts/ --- tools/src/crashhandler/defaults.go.in | 4 ++ tools/src/crashhandler/main.go | 79 +++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 tools/src/crashhandler/defaults.go.in create mode 100644 tools/src/crashhandler/main.go (limited to 'tools/src/crashhandler') diff --git a/tools/src/crashhandler/defaults.go.in b/tools/src/crashhandler/defaults.go.in new file mode 100644 index 0000000..2ea5827 --- /dev/null +++ b/tools/src/crashhandler/defaults.go.in @@ -0,0 +1,4 @@ +package main + +var dumpPath = "@PATH_CRASHDUMP@" + diff --git a/tools/src/crashhandler/main.go b/tools/src/crashhandler/main.go new file mode 100644 index 0000000..00ce0cd --- /dev/null +++ b/tools/src/crashhandler/main.go @@ -0,0 +1,79 @@ +package main + +import ( + "flag" + "fmt" + "io/ioutil" + "os" + "strings" +) + +type CrashDump struct { + Name string + DumpPath string + MetadataPath string +} + +func expandHomeDir(path string) (string, error) { + home, err := os.UserHomeDir() + if err != nil { + return path, err + } + + return strings.Replace(path, "~/", home, -1), nil +} + +func dumps(path string) ([]CrashDump, error) { + files, err := ioutil.ReadDir(path) + if err != nil { + return nil, err + } + + var crashes []CrashDump + + for i, file := range files { + if strings.HasSuffix(file.Name(), ".dmp") { + if i+1 < len(files) && files[i+1].Name() == file.Name()+".txt" { + crashes = append(crashes, CrashDump{Name: strings.TrimSuffix(file.Name(), ".dmp"), + DumpPath: file.Name(), MetadataPath: files[i+1].Name()}) + } else { + crashes = append(crashes, CrashDump{Name: strings.TrimSuffix(file.Name(), ".dmp"), DumpPath: file.Name()}) + } + } + } + + return crashes, nil +} + +func main() { + helpFlag := flag.Bool("help", false, "Show help information.") + flag.StringVar(&dumpPath, "crashd", dumpPath, "Crash dump path") + + // create crash report flags + crashedFlag := flag.String("c", "", "Create crash report at specified location and write any specified data into it") + + flag.Parse() + dumpPath, _ = expandHomeDir(dumpPath) + + if *helpFlag { + flag.PrintDefaults() + return + } + + if *crashedFlag != "" { + fmt.Println("Creating crash dump report", *crashedFlag) + contents := []byte("Additional information: " + strings.Join(flag.Args(), "")) + ioutil.WriteFile(*crashedFlag+".txt", contents, 0644) + return + } + + fmt.Printf("[%s]\n", dumpPath) + c, err := dumps(dumpPath) + if err != nil { + panic(err) + } + for _, d := range c { + fmt.Printf("\t- %s\n", d.Name) + } + +} -- cgit v1.2.1