[Contribs] Add README, license text, and invert error code dictionaries.
authorStefan Hajnoczi <stefanha@gmail.com>
Sat, 10 May 2008 14:06:21 +0000 (15:06 +0100)
committerMichael Brown <mcb30@etherboot.org>
Tue, 20 May 2008 19:28:48 +0000 (20:28 +0100)
contrib/errcode/README [new file with mode: 0644]
contrib/errcode/build_errcodedb.py
contrib/errcode/errcode.php
contrib/errcode/errcode.py

diff --git a/contrib/errcode/README b/contrib/errcode/README
new file mode 100644 (file)
index 0000000..f620ea0
--- /dev/null
@@ -0,0 +1,32 @@
+Error Code Lookup for gPXE
+==========================
+This program looks up gPXE error codes so you can locate the line of source
+code which produced the error.
+
+Setup
+-----
+You must run:
+./build_errcodedb.py >errcodedb.py
+
+This extracts error code definitions from the gPXE source code and produces a
+"database" which is used by the main program.
+
+Once you have done this errcode.py and errcodedb.py are the only files you
+need.  They are now independent of the gPXE source code and can be moved
+anywhere.
+
+[OPTIONAL]
+A PHP script is provided as a web interface.  First edit errcode.php to point
+$ERRCODE_PATH to the errcode.py script.  Then move errcode.php to a location
+visible from your web server.
+
+Usage
+-----
+Looking up error codes on the command-line:
+./errcode.py 0x12345678
+
+Further information
+-------------------
+See http://etherboot.org/.
+
+Released under the GPL and written by Stefan Hajnoczi <stefanha@gmail.com>.
index 295c927..868c2d3 100755 (executable)
@@ -1,4 +1,19 @@
 #!/usr/bin/env python
+# Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 import sys
 import re
 
@@ -15,6 +30,15 @@ def err(msg):
     sys.stderr.write('%s: %s\n' % (sys.argv[0], msg))
     sys.exit(1)
 
+def to_pxenv_status(errno):
+    return errno & 0xff
+
+def to_errfile(errno):
+    return (errno >> 13) & 0x7ff
+
+def to_posix_errno(errno):
+    return (errno >> 24) & 0x7f
+
 def load_header_file(filename, regexp):
     defines = {}
     for line in open(filename, 'r'):
@@ -42,7 +66,7 @@ def evaluate(defines, expr):
         err('invalid expression')
     return eval(pyexpr)
 
-def build(filenames, regexp):
+def build(filenames, regexp, selector):
     unevaluated = {}
     for filename in filenames:
         unevaluated.update(load_header_file(filename, regexp))
@@ -59,8 +83,12 @@ def build(filenames, regexp):
                 changed = True
     if unevaluated:
         err('unable to evaluate all #defines')
-    return evaluated
 
-print 'pxenv_status =', repr(build(pxenv_status_files, PXENV_STATUS_RE))
-print 'errfile =', repr(build(errfile_files, ERRFILE_RE))
-print 'posix_errno =', repr(build(posix_errno_files, POSIX_ERRNO_RE))
+    lookup = {}
+    for key, val in evaluated.iteritems():
+        lookup[selector(val)] = key
+    return lookup
+
+print 'pxenv_status =', repr(build(pxenv_status_files, PXENV_STATUS_RE, to_pxenv_status))
+print 'errfile =', repr(build(errfile_files, ERRFILE_RE, to_errfile))
+print 'posix_errno =', repr(build(posix_errno_files, POSIX_ERRNO_RE, to_posix_errno))
index d7c1dd0..8711449 100644 (file)
@@ -1,4 +1,22 @@
 <?
+/*
+ * Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
 // The path to the errcode.py script.
 $ERRCODE_PATH = './errcode.py';
 ?>
index b7a1e03..8a8ce80 100755 (executable)
@@ -1,4 +1,19 @@
 #!/usr/bin/env python
+# Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 import sys
 
 try:
@@ -19,11 +34,11 @@ def to_errfile(errno):
 def to_posix_errno(errno):
     return (errno >> 24) & 0x7f
 
-def lookup_errno_component(defines, selector, component):
-    for key, val in defines.iteritems():
-        if selector(val) == component:
-            return key
-    return '0x%x' % component
+def lookup_errno_component(defines, component):
+    if component in defines:
+        return defines[component]
+    else:
+        return '0x%x' % component
 
 class Errno(object):
     def __init__(self, errno):
@@ -37,10 +52,10 @@ class Errno(object):
 
     def prettystr(self):
         return 'pxenv_status=%s uniq=%d errfile=%s posix_errno=%s' % (
-                lookup_errno_component(errcodedb.pxenv_status, to_pxenv_status, self.pxenv_status),
+                lookup_errno_component(errcodedb.pxenv_status, self.pxenv_status),
                 self.uniq,
-                lookup_errno_component(errcodedb.errfile, to_errfile, self.errfile),
-                lookup_errno_component(errcodedb.posix_errno, to_posix_errno, self.posix_errno)
+                lookup_errno_component(errcodedb.errfile, self.errfile),
+                lookup_errno_component(errcodedb.posix_errno, self.posix_errno)
                 )
 
     def __str__(self):