aboutsummaryrefslogtreecommitdiffstats
path: root/qemu-sockets-android.c
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@android.com>2010-12-23 00:57:28 +0100
committerDavid 'Digit' Turner <digit@android.com>2011-01-02 22:08:57 +0100
commit8423ffa1a8c56e65220e2a354cd62f71f99a7a06 (patch)
tree1ee33c6d14e1c36e648fd54df39972710094399f /qemu-sockets-android.c
parent46d15c4f2636ca04f975bd38a0949e8aa6f3ee04 (diff)
downloadexternal_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.c39
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;
}