head.go raw

   1  // Derived from Inferno utils/6l/l.h and related files.
   2  // https://bitbucket.org/inferno-os/inferno-os/src/master/utils/6l/l.h
   3  //
   4  //	Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
   5  //	Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
   6  //	Portions Copyright © 1997-1999 Vita Nuova Limited
   7  //	Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
   8  //	Portions Copyright © 2004,2006 Bruce Ellis
   9  //	Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
  10  //	Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
  11  //	Portions Copyright © 2009 The Go Authors. All rights reserved.
  12  //
  13  // Permission is hereby granted, free of charge, to any person obtaining a copy
  14  // of this software and associated documentation files (the "Software"), to deal
  15  // in the Software without restriction, including without limitation the rights
  16  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  17  // copies of the Software, and to permit persons to whom the Software is
  18  // furnished to do so, subject to the following conditions:
  19  //
  20  // The above copyright notice and this permission notice shall be included in
  21  // all copies or substantial portions of the Software.
  22  //
  23  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  24  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  25  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
  26  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29  // THE SOFTWARE.
  30  
  31  package objabi
  32  
  33  import "fmt"
  34  
  35  // HeadType is the executable header type.
  36  type HeadType uint8
  37  
  38  const (
  39  	Hunknown HeadType = iota
  40  	Hdarwin
  41  	Hdragonfly
  42  	Hfreebsd
  43  	Hjs
  44  	Hlinux
  45  	Hnetbsd
  46  	Hopenbsd
  47  	Hplan9
  48  	Hsolaris
  49  	Hwindows
  50  	Haix
  51  )
  52  
  53  func (h *HeadType) Set(s string) error {
  54  	switch s {
  55  	case "aix":
  56  		*h = Haix
  57  	case "darwin":
  58  		*h = Hdarwin
  59  	case "dragonfly":
  60  		*h = Hdragonfly
  61  	case "freebsd":
  62  		*h = Hfreebsd
  63  	case "js":
  64  		*h = Hjs
  65  	case "linux", "android":
  66  		*h = Hlinux
  67  	case "netbsd":
  68  		*h = Hnetbsd
  69  	case "openbsd":
  70  		*h = Hopenbsd
  71  	case "plan9":
  72  		*h = Hplan9
  73  	case "illumos", "solaris":
  74  		*h = Hsolaris
  75  	case "windows":
  76  		*h = Hwindows
  77  	default:
  78  		return fmt.Errorf("invalid headtype: %q", s)
  79  	}
  80  	return nil
  81  }
  82  
  83  func (h *HeadType) String() string {
  84  	switch *h {
  85  	case Haix:
  86  		return "aix"
  87  	case Hdarwin:
  88  		return "darwin"
  89  	case Hdragonfly:
  90  		return "dragonfly"
  91  	case Hfreebsd:
  92  		return "freebsd"
  93  	case Hjs:
  94  		return "js"
  95  	case Hlinux:
  96  		return "linux"
  97  	case Hnetbsd:
  98  		return "netbsd"
  99  	case Hopenbsd:
 100  		return "openbsd"
 101  	case Hplan9:
 102  		return "plan9"
 103  	case Hsolaris:
 104  		return "solaris"
 105  	case Hwindows:
 106  		return "windows"
 107  	}
 108  	return fmt.Sprintf("HeadType(%d)", *h)
 109  }
 110