Re: [libvirt] [PATCH] Kernel command line support for UML

2009-07-29 Thread Daniel Veillard
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

2009-07-27 Thread Daniel P. Berrange
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

2009-07-27 Thread Ron Yorston
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