Re: [libvirt] [PATCH] Kernel command line support for UML
On Mon, Jul 27, 2009 at 07:51:08PM +0100, Ron Yorston wrote: > When experimenting with libvirt and UML I found it necessary to add > support for additional kernel command line arguments. Okay, makes sense and code looks fine, applied and commited, thanks ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ dan...@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] Kernel command line support for UML
On Mon, Jul 27, 2009 at 07:51:08PM +0100, Ron Yorston wrote: > When experimenting with libvirt and UML I found it necessary to add > support for additional kernel command line arguments. ACK, this looks reasonable. Daniel > diff -up libvirt-0.6.5/src/uml_conf.c.uml-cmdline libvirt-0.6.5/src/uml_conf.c > --- libvirt-0.6.5/src/uml_conf.c.uml-cmdline 2009-07-10 16:28:51.0 > +0100 > +++ libvirt-0.6.5/src/uml_conf.c 2009-07-27 19:39:59.0 +0100 > @@ -326,6 +326,31 @@ umlBuildCommandLineChr(virConnectPtr con > } > > /* > + * Null-terminate the current argument and return a pointer to the next. > + * This should follow the same rules as the Linux kernel: arguments are > + * separated by spaces; arguments can be quoted with double quotes; double > + * quotes can't be escaped. > + */ > +static char *umlNextArg(char *args) > +{ > +int in_quote = 0; > + > +for (; *args; args++) { > +if (*args == ' ' && !in_quote) { > +*args++ = '\0'; > +break; > +} > +if (*args == '"') > +in_quote = !in_quote; > +} > + > +while (*args == ' ') > +args++; > + > +return args; > +} > + > +/* > * Constructs a argv suitable for launching uml with config defined > * for a given virtual machine. > */ > @@ -342,6 +367,7 @@ int umlBuildCommandLine(virConnectPtr co > const char **qargv = NULL; > int qenvc = 0, qenva = 0; > const char **qenv = NULL; > +char *cmdline = NULL; > > uname(&ut); > > @@ -474,6 +500,22 @@ int umlBuildCommandLine(virConnectPtr co > ADD_ARG(ret); > } > > +if (vm->def->os.cmdline) { > +char *args, *next_arg; > +if ((cmdline = strdup(vm->def->os.cmdline)) == NULL) > +goto no_memory; > + > +args = cmdline; > +while (*args == ' ') > +args++; > + > +while (*args) { > +next_arg = umlNextArg(args); > +ADD_ARG_LIT(args); > +args = next_arg; > +} > +} > + > ADD_ARG(NULL); > ADD_ENV(NULL); > > @@ -495,6 +537,7 @@ int umlBuildCommandLine(virConnectPtr co > VIR_FREE((qenv)[i]); > VIR_FREE(qenv); > } > +VIR_FREE(cmdline); > return -1; > > #undef ADD_ARG > > -- > Libvir-list mailing list > Libvir-list@redhat.com > https://www.redhat.com/mailman/listinfo/libvir-list -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH] Kernel command line support for UML
When experimenting with libvirt and UML I found it necessary to add support for additional kernel command line arguments. Ron diff -up libvirt-0.6.5/src/uml_conf.c.uml-cmdline libvirt-0.6.5/src/uml_conf.c --- libvirt-0.6.5/src/uml_conf.c.uml-cmdline2009-07-10 16:28:51.0 +0100 +++ libvirt-0.6.5/src/uml_conf.c2009-07-27 19:39:59.0 +0100 @@ -326,6 +326,31 @@ umlBuildCommandLineChr(virConnectPtr con } /* + * Null-terminate the current argument and return a pointer to the next. + * This should follow the same rules as the Linux kernel: arguments are + * separated by spaces; arguments can be quoted with double quotes; double + * quotes can't be escaped. + */ +static char *umlNextArg(char *args) +{ +int in_quote = 0; + +for (; *args; args++) { +if (*args == ' ' && !in_quote) { +*args++ = '\0'; +break; +} +if (*args == '"') +in_quote = !in_quote; +} + +while (*args == ' ') +args++; + +return args; +} + +/* * Constructs a argv suitable for launching uml with config defined * for a given virtual machine. */ @@ -342,6 +367,7 @@ int umlBuildCommandLine(virConnectPtr co const char **qargv = NULL; int qenvc = 0, qenva = 0; const char **qenv = NULL; +char *cmdline = NULL; uname(&ut); @@ -474,6 +500,22 @@ int umlBuildCommandLine(virConnectPtr co ADD_ARG(ret); } +if (vm->def->os.cmdline) { +char *args, *next_arg; +if ((cmdline = strdup(vm->def->os.cmdline)) == NULL) +goto no_memory; + +args = cmdline; +while (*args == ' ') +args++; + +while (*args) { +next_arg = umlNextArg(args); +ADD_ARG_LIT(args); +args = next_arg; +} +} + ADD_ARG(NULL); ADD_ENV(NULL); @@ -495,6 +537,7 @@ int umlBuildCommandLine(virConnectPtr co VIR_FREE((qenv)[i]); VIR_FREE(qenv); } +VIR_FREE(cmdline); return -1; #undef ADD_ARG -- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list