| 2782 | | pmsg_unpack(mp, mp2) |
| 2783 | | struct pmsg *mp; |
| 2784 | | struct pmsg *mp2; |
| 2785 | | { |
| 2786 | | struct frag *fp; |
| 2787 | | int cc; |
| 2788 | | int mlen; |
| 2789 | | int frl; |
| 2790 | | |
| 2791 | | if (cc = (mp->m_codef->dec_int) |
| 2792 | | (mp, (void*)&mlen, 1, 1, sizeof(int))) |
| 2793 | | return cc; |
| 2794 | | if (cc = (mp->m_codef->dec_int) |
| 2795 | | (mp, (void*)&mp2->m_ctx, 1, 1, sizeof(int))) |
| 2796 | | return cc; |
| 2797 | | if (cc = (mp->m_codef->dec_int) |
| 2798 | | (mp, (void*)&mp2->m_tag, 1, 1, sizeof(int))) |
| 2799 | | return cc; |
| 2800 | | if (cc = (mp->m_codef->dec_int) |
| 2801 | | (mp, (void*)&mp2->m_wid, 1, 1, sizeof(int))) |
| 2802 | | return cc; |
| 2803 | | if (cc = (mp->m_codef->dec_int) |
| 2804 | | (mp, (void*)&mp2->m_enc, 1, 1, sizeof(int))) |
| 2805 | | return cc; |
| 2806 | | if (cc = (mp->m_codef->dec_int) |
| 2807 | | (mp, (void*)&mp2->m_crc, 1, 1, sizeof(int))) |
| 2808 | | return cc; |
| 2809 | | if (cc = (mp->m_codef->dec_int) |
| 2810 | | (mp, (void*)&mp2->m_src, 1, 1, sizeof(int))) |
| 2811 | | return cc; |
| 2812 | | if (cc = (mp->m_codef->dec_int) |
| 2813 | | (mp, (void*)&mp2->m_dst, 1, 1, sizeof(int))) |
| 2814 | | return cc; |
| 2815 | | |
| 2816 | | mp2->m_len = 0; |
| 2817 | | |
| 2818 | | if (mlen < 0) |
| 2819 | | cc = PvmBadMsg;
|
| 2820 | | else { |
| 2821 | | while (mlen > 0) { |
| 2822 | | if (cc = (mp->m_codef->dec_int) |
| 2823 | | (mp, (void*)&frl, 1, 1, sizeof(int))) |
| 2824 | | break; |
| 2825 | | if (!(fp = fr_new(frl + MAXHDR))) {
|
| 2826 | | cc = PvmNoMem;
|
| 2827 | | break; |
| 2828 | | } |
| 2829 | | fp->fr_dat += MAXHDR;
|
| 2830 | | fp->fr_len = frl; |
| 2831 | | if (cc = (mp->m_codef->dec_byte) |
| 2832 | | (mp, (void*)fp->fr_dat, frl, 1, 1)) |
| 2833 | | break; |
| 2834 | | LISTPUTBEFORE(mp2->m_frag, fp, fr_link, fr_rlink);
|
| 2835 | | mp2->m_len += frl; |
| 2836 | | mlen -= frl; |
| 2837 | | } |
| 2838 | | pmsg_setenc(mp2, mp2->m_enc); |
| 2839 | | } |
| 2840 | | return cc; |
| 2841 | | } |