Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought






       copymsg(D3)                                              copymsg(D3)


       NAME
             copymsg - copy a message

       SYNOPSIS
             #include <sys/stream.h>
             #include <sys/ddi.h>
             mblk_t *copymsg(mblk_t *mp);

          Arguments
             mp        Pointer to the message to be copied.

       DESCRIPTION
             copymsg forms a new message by allocating new message blocks,
             copies the contents of the message referred to by mp (using
             the copyb(D3) function), and returns a pointer to the new
             message.

          Return Values
             On success, copymsg returns a pointer to the new message.  On
             failure, it returns a NULL pointer.

       USAGE
          Warnings
             Drivers should not assume that the memory allocated for the
             data buffer is usable for DMA operations, nor should drivers
             assume that the memory has any specific physical properties
             such as starting address alignment, physical address range, or
             physical contiguity.  Beginning with ddi version 6, memory
             with specific physical properties can be obtained by using
             msgphysreq(D3) after the copy or using allocb_physreq(D3) and
             copy manually.

          Level
             Base or Interrupt.

          Synchronization Constraints
             Does not sleep.

             Driver-defined basic locks, read/write locks, and sleep locks
             may be held across calls to this function.

          Examples
             The routine lctouc converts all the lower case ASCII
             characters in the message to upper case.  If the reference
             count is greater than one (line 8), then the message is
             shared, and must be copied before changing the contents of the


                           Copyright 1994 Novell, Inc.               Page 1













      copymsg(D3)                                              copymsg(D3)


            data buffer.  If the call to copymsg fails (line 9), we return
            NULL (line 10).  Otherwise, we free the original message (line
            11).  If the reference count was equal to one, the message can
            be modified.  For each character (line 16) in each message
            block (line 15), if it is a lower case letter, we convert it
            to an upper case letter (line 18).  When done, we return a
            pointer to the converted message (line 21).

             1  mblk_t *lctouc(mp)
             2    mblk_t *mp;
             3  {
             4    mblk_t *cmp;
             5    mblk_t *tmp;
             6    uchar_t *cp;
             7
             8    if (mp->b_datap->db_ref > 1) {
             9          if ((cmp = copymsg(mp)) == NULL)
            10                return(NULL);
            11          freemsg(mp);
            12    } else {
            13          cmp = mp;
            14    }
            15    for (tmp = cmp; tmp; tmp = tmp->b_next) {
            16          for (cp = tmp->b_rptr; cp < tmp->b_wptr; cp++) {
            17                if ((*cp <= 'z') && (*cp >= 'a'))
            18                      *cp -= 0x20;
            19          }
            20    }
            21    return(cmp);
            22  }

      REFERENCES
            allocb(D3), allocb_physreq(D3), copyb(D3), msgphysreq(D3),
            msgb(D4)

      NOTICES
         Portability
            All processors

         Applicability
            ddi: 1, 2, 3, 4, 5, 5mp, 6, 6mp, 7, 7mp

            In versions 1, 2, 3, 4, 5, and 5mp, the memory for the data
            buffer(s) returned by copymsg will be DMA-able; that is, it
            will satisfy worst-case DMA-ability requirements on systems
            with restricted DMA and will be physically contiguous; see


                          Copyright 1994 Novell, Inc.               Page 2













       copymsg(D3)                                              copymsg(D3)


             phys_dmasize of physreq(D4).  For other versions, there are no
             guarantees on the memory properties.














































                           Copyright 1994 Novell, Inc.               Page 3








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026