Move all: target first.
[qemu] / slirp / misc.c
index 7f6448d..2c42fd1 100644 (file)
@@ -88,15 +88,14 @@ void
 getouraddr()
 {
        char buff[256];
-       struct hostent *he;
-       
-       if (gethostname(buff,256) < 0)
-          return;
-       
-       if ((he = gethostbyname(buff)) == NULL)
-          return;
-       
-       our_addr = *(struct in_addr *)he->h_addr;
+       struct hostent *he = NULL;
+       
+       if (gethostname(buff,256) == 0)
+            he = gethostbyname(buff);
+        if (he)
+            our_addr = *(struct in_addr *)he->h_addr;
+        if (our_addr.s_addr == 0)
+            our_addr.s_addr = loopback_addr.s_addr;
 }
 
 #if SIZEOF_CHAR_P == 8
@@ -212,10 +211,23 @@ strerror(error)
 #endif
 
 
-#if 0
+#ifdef _WIN32
+
+int
+fork_exec(so, ex, do_pty)
+       struct socket *so;
+       char *ex;
+       int do_pty;
+{
+    /* not implemented */
+    return 0;
+}
+
+#else
+
 int
-openpty(amaster, aslave)
-       int *amaster, *aslave;
+slirp_openpty(amaster, aslave)
+     int *amaster, *aslave;
 {
        register int master, slave;
 
@@ -301,11 +313,13 @@ fork_exec(so, ex, do_pty)
        int opt;
         int master;
        char *argv[256];
+#if 0
        char buff[256];
+#endif
        /* don't want to clobber the original */
        char *bptr;
        char *curarg;
-       int c, i;
+       int c, i, ret;
        
        DEBUG_CALL("fork_exec");
        DEBUG_ARG("so = %lx", (long)so);
@@ -313,7 +327,7 @@ fork_exec(so, ex, do_pty)
        DEBUG_ARG("do_pty = %lx", (long)do_pty);
        
        if (do_pty == 2) {
-               if (openpty(&master, &s) == -1) {
+               if (slirp_openpty(&master, &s) == -1) {
                        lprint("Error: openpty failed: %s\n", strerror(errno));
                        return 0;
                }
@@ -326,7 +340,7 @@ fork_exec(so, ex, do_pty)
                    bind(s, (struct sockaddr *)&addr, addrlen) < 0 ||
                    listen(s, 1) < 0) {
                        lprint("Error: inet socket: %s\n", strerror(errno));
-                       close(s);
+                       closesocket(s);
                        
                        return 0;
                }
@@ -357,9 +371,12 @@ fork_exec(so, ex, do_pty)
                         */
                        s = socket(AF_INET, SOCK_STREAM, 0);
                        addr.sin_addr = loopback_addr;
-                       connect(s, (struct sockaddr *)&addr, addrlen);
+                        do {
+                            ret = connect(s, (struct sockaddr *)&addr, addrlen);
+                        } while (ret < 0 && errno == EINTR);
                }
                
+#if 0
                if (x_port >= 0) {
 #ifdef HAVE_SETENV
                        sprintf(buff, "%s:%d.%d", inet_ntoa(our_addr), x_port, x_screen);
@@ -369,7 +386,7 @@ fork_exec(so, ex, do_pty)
                        putenv(buff);
 #endif
                }
-       
+#endif 
                dup2(s, 0);
                dup2(s, 1);
                dup2(s, 2);
@@ -420,8 +437,10 @@ fork_exec(so, ex, do_pty)
                         * The only reason this will block forever is if socket()
                         * of connect() fail in the child process
                         */
-                       so->s = accept(s, (struct sockaddr *)&addr, &addrlen);
-                       close(s);
+                        do {
+                            so->s = accept(s, (struct sockaddr *)&addr, &addrlen);
+                        } while (so->s < 0 && errno == EINTR);
+                        closesocket(s);
                        opt = 1;
                        setsockopt(so->s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int));
                        opt = 1;
@@ -804,7 +823,7 @@ fd_nonblock(fd)
 #ifdef FIONBIO
        int opt = 1;
        
-       ioctl(fd, FIONBIO, &opt);
+       ioctlsocket(fd, FIONBIO, &opt);
 #else
        int opt;
        
@@ -821,7 +840,7 @@ fd_block(fd)
 #ifdef FIONBIO
        int opt = 0;
        
-       ioctl(fd, FIONBIO, &opt);
+       ioctlsocket(fd, FIONBIO, &opt);
 #else
        int opt;
        
@@ -865,7 +884,7 @@ rsh_exec(so,ns, user, host, args)
           return 0;
         }
 #else
-        if (openpty(&fd0[0], &fd0[1]) == -1) {
+        if (slirp_openpty(&fd0[0], &fd0[1]) == -1) {
           close(fd[0]);
           close(fd[1]);
           lprint("Error: openpty failed: %s\n", strerror(errno));