diff options
author | Zhigang Wang <zhigang.x.wang@oracle.com> | 2012-02-09 18:41:03 +0000 |
---|---|---|
committer | Zhigang Wang <zhigang.x.wang@oracle.com> | 2012-02-09 18:41:03 +0000 |
commit | 6f77e95164674e38738bbd55572555d49657c76a (patch) | |
tree | 8694a27b536b7e1886bbec8fb143f9a226d7ea34 /tools/libxl/libxl_bootloader.c | |
parent | ed4779111f938d38ddc935cbef252784f70c482b (diff) | |
download | xen-6f77e95164674e38738bbd55572555d49657c76a.tar.gz xen-6f77e95164674e38738bbd55572555d49657c76a.tar.bz2 xen-6f77e95164674e38738bbd55572555d49657c76a.zip |
libxl: fix bootloader args setting
When bootloader_args = ['foo', 'bar'], then info->u.pv.bootloader_args =
foo\0
bar\0
\0
Before this patch, 'p++' points to the next character of 'foo\0' and never
comes to 'bar\0' (because of the '\0' in 'foo\0'), so the args will be:
args[0] = 'oo\0'
args[1] = 'o\0'
After this patch, 'p++' points to the next string of pv.bootloader_args, so we
get the correct args:
args[0] = 'foo\0'
args[1] = 'bar\0'
Signed-off-by: Zhigang Wang <zhigang.x.wang@oracle.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl/libxl_bootloader.c')
-rw-r--r-- | tools/libxl/libxl_bootloader.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/tools/libxl/libxl_bootloader.c b/tools/libxl/libxl_bootloader.c index 2da1d90f34..907c871f65 100644 --- a/tools/libxl/libxl_bootloader.c +++ b/tools/libxl/libxl_bootloader.c @@ -49,9 +49,11 @@ static char **make_bootloader_args(libxl__gc *gc, flexarray_set(args, nr++, libxl__sprintf(gc, "--output-directory=%s", "/var/run/libxl/")); if (info->u.pv.bootloader_args) { - char *p = info->u.pv.bootloader_args[0]; - while (*(p++)) - flexarray_set(args, nr++, p); + char **p = info->u.pv.bootloader_args; + while (*p) { + flexarray_set(args, nr++, *p); + p++; + } } flexarray_set(args, nr++, disk); |