]> git.proxmox.com Git - qemu.git/blobdiff - slirp/misc.c
vhost build fix for i386
[qemu.git] / slirp / misc.c
index 05f4fb329f3e889727f338a82caceabcc973f7c9..6002550361d601eb521954c599a3953232a8e7cf 100644 (file)
@@ -119,6 +119,7 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
        char *bptr;
        const char *curarg;
        int c, i, ret;
+       pid_t pid;
 
        DEBUG_CALL("fork_exec");
        DEBUG_ARG("so = %lx", (long)so);
@@ -142,7 +143,8 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
                }
        }
 
-       switch(fork()) {
+       pid = fork();
+       switch(pid) {
         case -1:
                lprint("Error: fork failed: %s\n", strerror(errno));
                close(s);
@@ -151,11 +153,12 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
                return 0;
 
         case 0:
+                setsid();
+
                /* Set the DISPLAY */
                if (do_pty == 2) {
                        (void) close(master);
 #ifdef TIOCSCTTY /* XXXXX */
-                       (void) setsid();
                        ioctl(s, TIOCSCTTY, (char *)NULL);
 #endif
                } else {
@@ -179,7 +182,7 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
                   close(s);
 
                i = 0;
-               bptr = strdup(ex); /* No need to free() this */
+               bptr = qemu_strdup(ex); /* No need to free() this */
                if (do_pty == 1) {
                        /* Setup "slirp.telnetd -x" */
                        argv[i++] = "slirp.telnetd";
@@ -206,6 +209,7 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
                exit(1);
 
         default:
+               qemu_add_child_watch(pid);
                if (do_pty == 2) {
                        close(s);
                        so->s = master;
@@ -260,52 +264,10 @@ void lprint(const char *format, ...)
     va_list args;
 
     va_start(args, format);
-    monitor_vprintf(cur_mon, format, args);
+    monitor_vprintf(default_mon, format, args);
     va_end(args);
 }
 
-#ifdef BAD_SPRINTF
-
-#undef vsprintf
-#undef sprintf
-
-/*
- * Some BSD-derived systems have a sprintf which returns char *
- */
-
-int
-vsprintf_len(string, format, args)
-       char *string;
-       const char *format;
-       va_list args;
-{
-       vsprintf(string, format, args);
-       return strlen(string);
-}
-
-int
-#ifdef __STDC__
-sprintf_len(char *string, const char *format, ...)
-#else
-sprintf_len(va_alist) va_dcl
-#endif
-{
-       va_list args;
-#ifdef __STDC__
-       va_start(args, format);
-#else
-       char *string;
-       char *format;
-       va_start(args);
-       string = va_arg(args, char *);
-       format = va_arg(args, char *);
-#endif
-       vsprintf(string, format, args);
-       return strlen(string);
-}
-
-#endif
-
 void
 u_sleep(int usec)
 {
@@ -445,4 +407,17 @@ void slirp_connection_info(Slirp *slirp, Monitor *mon)
                        inet_ntoa(dst_addr), ntohs(dst_port),
                        so->so_rcv.sb_cc, so->so_snd.sb_cc);
     }
+
+    for (so = slirp->icmp.so_next; so != &slirp->icmp; so = so->so_next) {
+        n = snprintf(buf, sizeof(buf), "  ICMP[%d sec]",
+                     (so->so_expire - curtime) / 1000);
+        src.sin_addr = so->so_laddr;
+        dst_addr = so->so_faddr;
+        memset(&buf[n], ' ', 19 - n);
+        buf[19] = 0;
+        monitor_printf(mon, "%s %3d %15s  -    ", buf, so->s,
+                       src.sin_addr.s_addr ? inet_ntoa(src.sin_addr) : "*");
+        monitor_printf(mon, "%15s  -    %5d %5d\n", inet_ntoa(dst_addr),
+                       so->so_rcv.sb_cc, so->so_snd.sb_cc);
+    }
 }