aboutsummaryrefslogtreecommitdiffstats
path: root/vl-android.c
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@android.com>2011-03-01 14:00:26 +0100
committerDavid 'Digit' Turner <digit@android.com>2011-03-01 15:22:30 +0100
commit5f82411f73a9913588d8cef751db870b4239a6a4 (patch)
treed9168cd726f736be4df5995f537332597af6c6aa /vl-android.c
parentf8a46731b2f86966399c9d24e095d669ba1a7898 (diff)
downloadexternal_qemu-5f82411f73a9913588d8cef751db870b4239a6a4.zip
external_qemu-5f82411f73a9913588d8cef751db870b4239a6a4.tar.gz
external_qemu-5f82411f73a9913588d8cef751db870b4239a6a4.tar.bz2
Simplify kernel parameters processing.
This change simplifies the code that deals with kernel parameters in the core by using a stralloc_t (dynamic strings). Change-Id: I73cf2d1461a3cb1aa4511d74fd34249f0f8b58a2
Diffstat (limited to 'vl-android.c')
-rw-r--r--vl-android.c82
1 files changed, 36 insertions, 46 deletions
diff --git a/vl-android.c b/vl-android.c
index 25a6cf1..ff21db9 100644
--- a/vl-android.c
+++ b/vl-android.c
@@ -56,6 +56,8 @@
#include "android/charmap.h"
#include "android/globals.h"
#include "android/utils/bufprint.h"
+#include "android/utils/debug.h"
+#include "android/utils/stralloc.h"
#include "android/display-core.h"
#include "android/utils/timezone.h"
#include "android/snapshot.h"
@@ -3599,24 +3601,6 @@ add_dns_server( const char* server_name )
return 0;
}
-/* Appends a parameter to a string of parameters separated with space.
- * Pararm:
- * param_str String containing parameters separated with space.
- * param Parameter to append to the string.
- * size - Size (in characters) of the buffer addressed by param_str.
- */
-static void
-append_param(char* param_str, const char* arg, int size)
-{
- if (*param_str) {
- strncat(param_str, " ", size);
- strncat(param_str, arg, size);
- } else {
- strncpy(param_str, arg, size);
- param_str[size - 1] = '\0';
- }
-}
-
/* Parses an integer
* Pararm:
* str String containing a number to be parsed.
@@ -3823,13 +3807,8 @@ int main(int argc, char **argv, char **envp)
CPUState *env;
int show_vnc_port = 0;
IniFile* hw_ini = NULL;
- /* Container for the kernel initialization parameters collected in this
- * routine. */
- char kernel_cmdline_append[1024];
- /* Combines kernel initialization parameters passed from the UI with
- * the parameters collected in this routine. */
- char kernel_cmdline_full[1024];
- char tmp_str[1024];
+ STRALLOC_DEFINE(kernel_params);
+ STRALLOC_DEFINE(kernel_config);
int dns_count = 0;
/* Initialize sockets before anything else, so we can properly report
@@ -3881,8 +3860,7 @@ int main(int argc, char **argv, char **envp)
snapshot = 0;
kernel_filename = NULL;
kernel_cmdline = "";
- kernel_cmdline_append[0] = '\0';
- kernel_cmdline_full[0] = '\0';
+
cyls = heads = secs = 0;
translation = BIOS_ATA_TRANSLATION_AUTO;
monitor_device = "vc:80Cx24C";
@@ -4787,12 +4765,9 @@ int main(int argc, char **argv, char **envp)
#ifdef CONFIG_MEMCHECK
case QEMU_OPTION_android_memcheck:
android_op_memcheck = (char*)optarg;
- snprintf(tmp_str, sizeof(tmp_str), "memcheck=%s",
- android_op_memcheck);
- tmp_str[sizeof(tmp_str) - 1] = '\0';
/* This will set ro.kernel.memcheck system property
* to memcheck's tracing flags. */
- append_param(kernel_cmdline_append, tmp_str, sizeof(kernel_cmdline_append));
+ stralloc_add_format(kernel_config, " memcheck=%s", android_op_memcheck);
break;
#endif // CONFIG_MEMCHECK
@@ -4985,8 +4960,7 @@ int main(int argc, char **argv, char **envp)
if (dns_count == 0)
dns_count = slirp_get_system_dns_servers();
if (dns_count) {
- snprintf(tmp_str, sizeof(tmp_str), "ndns=%d", dns_count);
- append_param(kernel_cmdline_append, tmp_str, sizeof(kernel_cmdline_append));
+ stralloc_add_format(kernel_config, " ndns=%d", dns_count);
}
#ifdef CONFIG_MEMCHECK
@@ -5349,21 +5323,37 @@ int main(int argc, char **argv, char **envp)
#endif
/* Combine kernel command line passed from the UI with parameters
- * collected during initialization. */
- if (*kernel_cmdline) {
- if (kernel_cmdline_append[0]) {
- snprintf(kernel_cmdline_full, sizeof(kernel_cmdline_full), "%s %s",
- kernel_cmdline, kernel_cmdline_append);
- } else {
- strncpy(kernel_cmdline_full, kernel_cmdline, sizeof(kernel_cmdline_full));
- kernel_cmdline_full[sizeof(kernel_cmdline_full) - 1] = '\0';
+ * collected during initialization.
+ *
+ * The order is the following:
+ * - parameters from the hw configuration (kernel.parameters)
+ * - additionnal parameters from options (e.g. -memcheck)
+ * - the -append parameters.
+ */
+ {
+ const char* kernel_parameters;
+
+ /* If not empty, kernel_config always contains a leading space */
+ stralloc_append(kernel_params, kernel_config);
+
+ if (*kernel_cmdline) {
+ stralloc_add_c(kernel_params, ' ');
+ stralloc_add_str(kernel_params, kernel_cmdline);
}
- } else if (kernel_cmdline_append[0]) {
- strncpy(kernel_cmdline_full, kernel_cmdline_append, sizeof(kernel_cmdline_full));
- }
- machine->init(ram_size, boot_devices,
- kernel_filename, kernel_cmdline_full, initrd_filename, cpu_model);
+ kernel_parameters = stralloc_cstr(kernel_params);
+ VERBOSE_PRINT(init, "Kernel parameters: %s", kernel_parameters);
+
+ machine->init(ram_size,
+ boot_devices,
+ kernel_filename,
+ kernel_parameters,
+ initrd_filename,
+ cpu_model);
+
+ stralloc_reset(kernel_params);
+ stralloc_reset(kernel_config);
+ }
for (env = first_cpu; env != NULL; env = env->next_cpu) {