diff options
author | David 'Digit' Turner <digit@android.com> | 2010-12-23 00:57:28 +0100 |
---|---|---|
committer | David 'Digit' Turner <digit@android.com> | 2011-01-02 22:08:57 +0100 |
commit | 8423ffa1a8c56e65220e2a354cd62f71f99a7a06 (patch) | |
tree | 1ee33c6d14e1c36e648fd54df39972710094399f /qemu-sockets-android.c | |
parent | 46d15c4f2636ca04f975bd38a0949e8aa6f3ee04 (diff) | |
download | external_qemu-8423ffa1a8c56e65220e2a354cd62f71f99a7a06.zip external_qemu-8423ffa1a8c56e65220e2a354cd62f71f99a7a06.tar.gz external_qemu-8423ffa1a8c56e65220e2a354cd62f71f99a7a06.tar.bz2 |
qemu-sockets-android.c: Add support for socket=<number> option.
Change-Id: If7896d653b36fde05c24d3170ff5b0beb27fff5f
Diffstat (limited to 'qemu-sockets-android.c')
-rw-r--r-- | qemu-sockets-android.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/qemu-sockets-android.c b/qemu-sockets-android.c index dc64775..e7d5e18 100644 --- a/qemu-sockets-android.c +++ b/qemu-sockets-android.c @@ -52,6 +52,11 @@ static QemuOptsList dummy_opts = { },{ .name = "ipv6", .type = QEMU_OPT_BOOL, +#ifdef CONFIG_ANDROID + },{ + .name = "socket", + .type = QEMU_OPT_NUMBER, +#endif }, { /* end if list */ } }, @@ -79,6 +84,13 @@ int inet_listen_opts(QemuOpts *opts, int port_offset) char uport[33]; int slisten,to,try_next,nn; +#ifdef CONFIG_ANDROID + const char* socket_fd = qemu_opt_get(opts, "socket"); + if (socket_fd) { + return atoi(socket_fd); + } +#endif + if ((qemu_opt_get(opts, "host") == NULL) || (qemu_opt_get(opts, "port") == NULL)) { fprintf(stderr, "%s: host and/or port not specified\n", __FUNCTION__); @@ -177,6 +189,13 @@ int inet_connect_opts(QemuOpts *opts) const char *port; int sock, nn; +#ifdef CONFIG_ANDROID + const char* socket_fd = qemu_opt_get(opts, "socket"); + if (socket_fd) { + return atoi(socket_fd); + } +#endif + addr = qemu_opt_get(opts, "host"); port = qemu_opt_get(opts, "port"); if (addr == NULL || port == NULL) { @@ -233,6 +252,7 @@ EXIT: return sock; } + /* compatibility wrapper */ static int inet_parse(QemuOpts *opts, const char *str) { @@ -286,6 +306,25 @@ static int inet_parse(QemuOpts *opts, const char *str) qemu_opt_set(opts, "ipv4", "on"); if (strstr(optstr, ",ipv6")) qemu_opt_set(opts, "ipv6", "on"); +#ifdef CONFIG_ANDROID + h = strstr(optstr, ",socket="); + if (h) { + int socket_fd; + char str_fd[12]; + if (1 != sscanf(h+7,"%d",&socket_fd)) { + fprintf(stderr,"%s: socket fd parse error (%s)\n", + __FUNCTION__, h+7); + return -1; + } + if (socket_fd < 0 || socket_fd >= INT_MAX) { + fprintf(stderr,"%s: socket fd range error (%d)\n", + __FUNCTION__, socket_fd); + return -1; + } + snprintf(str_fd, sizeof str_fd, "%d", socket_fd); + qemu_opt_set(opts, "socket", str_fd); + } +#endif return 0; } |