Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[Contribs] Add README, license text, and invert error code dictionaries.
  • Loading branch information
stefanha authored and Michael Brown committed May 20, 2008
1 parent ce298a9 commit fbf9295
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 13 deletions.
32 changes: 32 additions & 0 deletions contrib/errcode/README
@@ -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>.
38 changes: 33 additions & 5 deletions contrib/errcode/build_errcodedb.py
@@ -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

Expand All @@ -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'):
Expand Down Expand Up @@ -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))
Expand All @@ -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))
18 changes: 18 additions & 0 deletions contrib/errcode/errcode.php
@@ -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';
?>
Expand Down
31 changes: 23 additions & 8 deletions contrib/errcode/errcode.py
@@ -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:
Expand All @@ -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):
Expand All @@ -37,10 +52,10 @@ def rawstr(self):

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):
Expand Down

0 comments on commit fbf9295

Please sign in to comment.