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.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.c')
-rw-r--r-- | qemu-sockets.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/qemu-sockets.c b/qemu-sockets.c index c526324..c4c0f65 100644 --- a/qemu-sockets.c +++ b/qemu-sockets.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 */ } }, @@ -130,6 +135,13 @@ int inet_listen_opts(QemuOpts *opts, int port_offset) ai.ai_family = PF_UNSPEC; ai.ai_socktype = SOCK_STREAM; +#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__); @@ -226,6 +238,13 @@ int inet_connect_opts(QemuOpts *opts) char uport[33]; int sock,rc; +#ifdef CONFIG_ANDROID + const char* socket_fd = qemu_opt_get(opts, "socket"); + if (socket_fd) { + return atoi(socket_fd); + } +#endif + memset(&ai,0, sizeof(ai)); ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; ai.ai_family = PF_UNSPEC; @@ -454,6 +473,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; } |