]> git.proxmox.com Git - mirror_qemu.git/blobdiff - slirp/sbuf.c
qemu-common: stop including qemu/host-utils.h from qemu-common.h
[mirror_qemu.git] / slirp / sbuf.c
index 2e6e2b2140cd5ae9185575c4424dea6f4f958855..dd4cb8c1396d7bf28d019c6c2bd811ee45aab70a 100644 (file)
@@ -5,30 +5,23 @@
  * terms and conditions of the copyright.
  */
 
+#include "qemu/osdep.h"
 #include <slirp.h>
+#include <qemu/main-loop.h>
 
 static void sbappendsb(struct sbuf *sb, struct mbuf *m);
 
-/* Done as a macro in socket.h */
-/* int
- * sbspace(struct sockbuff *sb)
- * {
- *     return SB_DATALEN - sb->sb_cc;
- * }
- */
-
 void
-sbfree(sb)
-       struct sbuf *sb;
+sbfree(struct sbuf *sb)
 {
        free(sb->sb_data);
 }
 
 void
-sbdrop(sb, num)
-       struct sbuf *sb;
-       int num;
+sbdrop(struct sbuf *sb, int num)
 {
+    int limit = sb->sb_datalen / 2;
+
        /*
         * We can only drop how much we have
         * This should never succeed
@@ -40,12 +33,13 @@ sbdrop(sb, num)
        if(sb->sb_rptr >= sb->sb_data + sb->sb_datalen)
                sb->sb_rptr -= sb->sb_datalen;
 
+    if (sb->sb_cc < limit && sb->sb_cc + num >= limit) {
+        qemu_notify_event();
+    }
 }
 
 void
-sbreserve(sb, size)
-       struct sbuf *sb;
-       int size;
+sbreserve(struct sbuf *sb, int size)
 {
        if (sb->sb_data) {
                /* Already alloced, realloc if necessary */
@@ -74,15 +68,13 @@ sbreserve(sb, size)
  * (the socket is non-blocking, so we won't hang)
  */
 void
-sbappend(so, m)
-       struct socket *so;
-       struct mbuf *m;
+sbappend(struct socket *so, struct mbuf *m)
 {
        int ret = 0;
 
        DEBUG_CALL("sbappend");
-       DEBUG_ARG("so = %lx", (long)so);
-       DEBUG_ARG("m = %lx", (long)m);
+       DEBUG_ARG("so = %p", so);
+       DEBUG_ARG("m = %p", m);
        DEBUG_ARG("m->m_len = %d", m->m_len);
 
        /* Shouldn't happen, but...  e.g. foreign host closes connection */
@@ -173,11 +165,7 @@ sbappendsb(struct sbuf *sb, struct mbuf *m)
  * done in sbdrop when the data is acked
  */
 void
-sbcopy(sb, off, len, to)
-       struct sbuf *sb;
-       int off;
-       int len;
-       char *to;
+sbcopy(struct sbuf *sb, int off, int len, char *to)
 {
        char *from;