github.com/hugelgupf/u-root@v0.0.0-20191023214958-4807c632154c/cmds/core/uname/uname.go (about)

     1  // Copyright 2015-2017 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Print build information about the kernel and machine.
     6  //
     7  // Synopsis:
     8  //     uname [-asnrvmd]
     9  //
    10  // Options:
    11  //     -a: print everything
    12  //     -s: print the kernel name
    13  //     -n: print the network node name
    14  //     -r: print the kernel release
    15  //     -v: print the kernel version
    16  //     -m: print the machine hardware name
    17  //     -d: print your domain name
    18  package main
    19  
    20  import (
    21  	"bytes"
    22  	"flag"
    23  	"fmt"
    24  	"log"
    25  	"strings"
    26  
    27  	"golang.org/x/sys/unix"
    28  )
    29  
    30  var (
    31  	all       = flag.Bool("a", false, "print everything")
    32  	kernel    = flag.Bool("s", false, "print the kernel name")
    33  	node      = flag.Bool("n", false, "print the network node name")
    34  	release   = flag.Bool("r", false, "print the kernel release")
    35  	version   = flag.Bool("v", false, "print the kernel version")
    36  	machine   = flag.Bool("m", false, "print the machine hardware name")
    37  	processor = flag.Bool("p", false, "print the machine hardware name")
    38  	domain    = flag.Bool("d", false, "print your domain name")
    39  )
    40  
    41  func toString(d []byte) string {
    42  	return string(d[:bytes.IndexByte(d[:], 0)])
    43  }
    44  
    45  func handleFlags(u *unix.Utsname) string {
    46  	Sysname, Nodename := toString(u.Sysname[:]), toString(u.Nodename[:])
    47  	Release, Version := toString(u.Release[:]), toString(u.Version[:])
    48  	Machine, Domainname := toString(u.Machine[:]), toString(u.Domainname[:])
    49  	info := make([]string, 0, 6)
    50  
    51  	if *all || flag.NFlag() == 0 {
    52  		info = append(info, Sysname, Nodename, Release, Version, Machine, Domainname)
    53  		goto end
    54  	}
    55  	if *kernel {
    56  		info = append(info, Sysname)
    57  	}
    58  	if *node {
    59  		info = append(info, Nodename)
    60  	}
    61  	if *release {
    62  		info = append(info, Release)
    63  	}
    64  	if *version {
    65  		info = append(info, Version)
    66  	}
    67  	if *machine || *processor {
    68  		info = append(info, Machine)
    69  	}
    70  	if *domain {
    71  		info = append(info, Domainname)
    72  	}
    73  
    74  end:
    75  	return strings.Join(info, " ")
    76  }
    77  
    78  func main() {
    79  	flag.Parse()
    80  
    81  	var u unix.Utsname
    82  	if err := unix.Uname(&u); err != nil {
    83  		log.Fatalf("%v", err)
    84  	}
    85  
    86  	info := handleFlags(&u)
    87  	fmt.Println(info)
    88  }