From: aq <aquynh@gmail.com>
To: Jeremy Katz <katzj@redhat.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Subject: [PATCH] xen bootloader
Date: Wed, 27 Apr 2005 18:21:22 +0900 [thread overview]
Message-ID: <9cde8bff0504270221eded71f@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1067 bytes --]
hello Jeremy,
Here is a patch to fix few problems in Xen bootloader you sent to the
list yesterday.
list of changes:
- make a dummy tools/pygrub/src/__init__.py
- extend filesystem abstraction by adding file_exist() method. this
method is used to check for existent of a file given its name. now
ext2fs implements this method.
- pygrub opens and parses /boot/grub/menu.lst or /boot/grub/grub.conf,
in that order.
- add /usr/lib/python to system path (see pygrub). without this
change, pygrub cannot find grub python package.
- remove few blank lines
$ diffstat xen-grub.patch
__init__.py | 1
fsys/__init__.py | 5 +++-
fsys/ext2/ext2module.c | 51 ++++++++++++++++++++++++++++++++++++++++---------
pygrub | 12 +++++++++--
4 files changed, 57 insertions(+), 12 deletions(-)
Signed-off-by: Nguyen Anh Quynh <aquynh@gmail.com>
I wonder why the patch you sent to list is in CR/LF format? arent you
programming on Windows, are you ;-). could you please remove them next
time ?
regards,
aq
[-- Attachment #2: xen-grub.patch --]
[-- Type: application/octet-stream, Size: 4848 bytes --]
diff -Nurp unstable.27.3.org/tools/pygrub/src/fsys/ext2/ext2module.c unstable.27.3/tools/pygrub/src/fsys/ext2/ext2module.c
--- unstable.27.3.org/tools/pygrub/src/fsys/ext2/ext2module.c 2005-04-27 16:27:33.000000000 +0900
+++ unstable.27.3/tools/pygrub/src/fsys/ext2/ext2module.c 2005-04-27 18:01:26.077028000 +0900
@@ -174,6 +174,25 @@ ext2_file_open (Ext2Fs *fs, char * name,
return (PyObject *) file;
}
+static PyObject *
+ext2_file_exist (Ext2Fs *fs, char * name)
+{
+ int err;
+ ext2_ino_t ino;
+ Ext2File * file;
+
+ file = (Ext2File *) PyObject_NEW(Ext2File, &Ext2FileType);
+ file->file = NULL;
+
+ err = ext2fs_namei_follow(fs->fs, EXT2_ROOT_INO, EXT2_ROOT_INO, name, &ino);
+ if (err) {
+ Py_INCREF(Py_False);
+ return Py_False;
+ }
+ Py_INCREF(Py_True);
+ return Py_True;
+}
+
/* ext2fs object */
static PyObject *
@@ -231,6 +250,18 @@ ext2_fs_open_file (Ext2Fs *fs, PyObject
return ext2_file_open(fs, name, flags);
}
+static PyObject *
+ext2_fs_file_exist (Ext2Fs *fs, PyObject *args, PyObject *kwargs)
+{
+ static char *kwlist[] = { "name", NULL };
+ char * name;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &name))
+ return NULL;
+
+ return ext2_file_exist(fs, name);
+}
+
static void
ext2_fs_dealloc (Ext2Fs * fs)
{
@@ -249,6 +280,9 @@ static struct PyMethodDef Ext2FsMethods[
{ "open_file",
(PyCFunction) ext2_fs_open_file,
METH_VARARGS|METH_KEYWORDS, NULL },
+ { "file_exist",
+ (PyCFunction) ext2_fs_file_exist,
+ METH_VARARGS|METH_KEYWORDS, NULL },
{ NULL, NULL, 0, NULL }
};
@@ -312,21 +346,20 @@ ext2_fs_new(PyObject *o, PyObject *args,
return (PyObject *)pfs;
}
-
static struct PyMethodDef Ext2ModuleMethods[] = {
{ "Ext2Fs", (PyCFunction) ext2_fs_new, METH_VARARGS|METH_KEYWORDS, NULL },
{ NULL, NULL, 0, NULL }
};
-
void init_pyext2(void) {
- PyObject *m, *d;
+ PyObject *m;
m = Py_InitModule("_pyext2", Ext2ModuleMethods);
- d = PyModule_GetDict(m);
-
- /* o = PyObject_NEW(PyObject, yExt2FsConstructorType);
- PyDict_SetItemString(d, "PyExt2Fs", o);
- Py_DECREF(o);*/
-
+ /*
+ * PyObject *d;
+ * d = PyModule_GetDict(m);
+ * o = PyObject_NEW(PyObject, yExt2FsConstructorType);
+ * PyDict_SetItemString(d, "PyExt2Fs", o);
+ * Py_DECREF(o);
+ */
}
diff -Nurp unstable.27.3.org/tools/pygrub/src/fsys/__init__.py unstable.27.3/tools/pygrub/src/fsys/__init__.py
--- unstable.27.3.org/tools/pygrub/src/fsys/__init__.py 2005-04-27 16:27:33.000000000 +0900
+++ unstable.27.3/tools/pygrub/src/fsys/__init__.py 2005-04-27 15:20:37.000000000 +0900
@@ -49,7 +49,10 @@ class FileSystem(object):
should look similar to a native file object."""
raise RuntimeError, "open_file not implemented"
-
+ def file_exist(self, file):
+ """Check to see if the give file is existed.
+ Return true if file existed, return false otherwise."""
+ raise RuntimeError, "file_exist not implemented"
mydir = sys.modules['grub.fsys'].__path__[0]
for f in os.listdir(mydir):
diff -Nurp unstable.27.3.org/tools/pygrub/src/__init__.py unstable.27.3/tools/pygrub/src/__init__.py
--- unstable.27.3.org/tools/pygrub/src/__init__.py 1970-01-01 09:00:00.000000000 +0900
+++ unstable.27.3/tools/pygrub/src/__init__.py 2005-04-27 14:46:50.000000000 +0900
@@ -0,0 +1 @@
+
diff -Nurp unstable.27.3.org/tools/pygrub/src/pygrub unstable.27.3/tools/pygrub/src/pygrub
--- unstable.27.3.org/tools/pygrub/src/pygrub 2005-04-27 17:53:05.000000000 +0900
+++ unstable.27.3/tools/pygrub/src/pygrub 2005-04-27 17:57:44.000000000 +0900
@@ -19,6 +19,8 @@ import logging
import curses, _curses, curses.wrapper
import getopt
+sys.path = [ '/usr/lib/python' ] + sys.path
+
import grub.GrubConf
import grub.fsys
@@ -78,7 +80,6 @@ def is_disk_image(file):
if len(buf) >= 512 and struct.unpack("H", buf[0x1fe: 0x200]) == (0xaaff):
return True
return False
-
def get_config(fn):
if not os.access(fn, os.R_OK):
@@ -97,7 +98,14 @@ def get_config(fn):
break
if fs is not None:
- f = fs.open_file("/boot/grub/grub.conf")
+ if fs.file_exist("/boot/grub/menu.lst"):
+ grubfile = "/boot/grub/menu.lst"
+ elif fs.file_exist("/boot/grub/grub.conf"):
+ grubfile = "/boot/grub/grub.conf"
+ else:
+ raise RuntimeError, "we couldn't find /boot/grub{menu.lst,grub.conf} " + \
+ "in the image provided. halt!"
+ f = fs.open_file(grubfile)
buf = f.read()
f.close()
fs.close()
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next reply other threads:[~2005-04-27 9:21 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-04-27 9:21 aq [this message]
2005-04-27 9:24 ` [PATCH] xen bootloader aq
2005-04-28 13:51 ` Mike Wray
2005-04-28 14:26 ` aq
2005-04-29 3:10 ` Jeremy Katz
2005-04-29 3:25 ` aq
2005-04-29 7:59 ` Mike Wray
2005-04-29 15:30 ` Jeremy Katz
2005-05-01 1:01 ` aq
2005-05-03 13:48 ` Mike Wray
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9cde8bff0504270221eded71f@mail.gmail.com \
--to=aquynh@gmail.com \
--cc=katzj@redhat.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.