New function: m_getptr(), takes as argument an mbuf chain and an
authorangelos <angelos@openbsd.org>
Thu, 2 Mar 2000 21:40:49 +0000 (21:40 +0000)
committerangelos <angelos@openbsd.org>
Thu, 2 Mar 2000 21:40:49 +0000 (21:40 +0000)
offset, returns a pointer to them specific mbuf and the offset inside
it that corresponds to the offset argument (so one can find where the
n'th byte is in an mbuf).

sys/kern/uipc_mbuf.c

index c63c3ea..84f0d8e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: uipc_mbuf.c,v 1.19 1999/12/31 23:37:08 provos Exp $   */
+/*     $OpenBSD: uipc_mbuf.c,v 1.20 2000/03/02 21:40:49 angelos Exp $  */
 /*     $NetBSD: uipc_mbuf.c,v 1.15.4.1 1996/06/13 17:11:44 cgd Exp $   */
 
 /*
@@ -720,6 +720,42 @@ bad:
        return (NULL);
 }
 
+/*
+ * Return a pointer to mbuf/offset of location in mbuf chain.
+ */
+struct mbuf *
+m_getptr(struct mbuf *m, int loc, int *off)
+{
+    while (loc >= 0)
+    {
+       /* Normal end of search */
+       if (m->m_len > loc)
+       {
+           *off = loc;
+           return m;
+       }
+       else
+       {
+           loc -= m->m_len;
+
+           if (m->m_next == NULL)
+           {
+               if (loc == 0)
+               {
+                   *off = m->m_len; /* Point at the end of valid data */
+                   return m;
+               }
+               else
+                 return NULL;
+           }
+           else
+             m = m->m_next;
+       }
+    }
+
+    return NULL;
+}
+
 /*
  * Inject a new mbuf chain of length siz in mbuf chain m0 at
  * position len0. Returns a pointer to the first injected mbuf, or