head.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. package objabi
  31. import "fmt"
  32. // HeadType is the executable header type.
  33. type HeadType uint8
  34. const (
  35. Hunknown HeadType = iota
  36. Hdarwin
  37. Hdragonfly
  38. Hfreebsd
  39. Hjs
  40. Hlinux
  41. Hnetbsd
  42. Hopenbsd
  43. Hplan9
  44. Hsolaris
  45. Hwindows
  46. Haix
  47. )
  48. func (h *HeadType) Set(s string) error {
  49. switch s {
  50. case "aix":
  51. *h = Haix
  52. case "darwin":
  53. *h = Hdarwin
  54. case "dragonfly":
  55. *h = Hdragonfly
  56. case "freebsd":
  57. *h = Hfreebsd
  58. case "js":
  59. *h = Hjs
  60. case "linux", "android":
  61. *h = Hlinux
  62. case "netbsd":
  63. *h = Hnetbsd
  64. case "openbsd":
  65. *h = Hopenbsd
  66. case "plan9":
  67. *h = Hplan9
  68. case "illumos", "solaris":
  69. *h = Hsolaris
  70. case "windows":
  71. *h = Hwindows
  72. default:
  73. return fmt.Errorf("invalid headtype: %q", s)
  74. }
  75. return nil
  76. }
  77. func (h *HeadType) String() string {
  78. switch *h {
  79. case Haix:
  80. return "aix"
  81. case Hdarwin:
  82. return "darwin"
  83. case Hdragonfly:
  84. return "dragonfly"
  85. case Hfreebsd:
  86. return "freebsd"
  87. case Hjs:
  88. return "js"
  89. case Hlinux:
  90. return "linux"
  91. case Hnetbsd:
  92. return "netbsd"
  93. case Hopenbsd:
  94. return "openbsd"
  95. case Hplan9:
  96. return "plan9"
  97. case Hsolaris:
  98. return "solaris"
  99. case Hwindows:
  100. return "windows"
  101. }
  102. return fmt.Sprintf("HeadType(%d)", *h)
  103. }