+ }
+ s = spltty();
+#if defined(vax)
+ c = *((word_t *)p->c_cf);
+#else
+ c = (((u_char *)p->c_cf)[1] << 8) | ((u_char *)p->c_cf)[0];
+#endif
+ p->c_cf += sizeof (word_t);
+ p->c_cc -= sizeof (word_t);
+ if (p->c_cc <= 0) {
+ bp = (struct cblock *)(p->c_cf-1);
+ bp = (struct cblock *)((int)bp & ~CROUND);
+ p->c_cf = NULL;
+ p->c_cl = NULL;
+ bp->c_next = cfreelist;
+ cfreelist = bp;
+ cfreecount += CBSIZE;
+ if (cwaiting) {
+ wakeup(&cwaiting);
+ cwaiting = 0;
+ }
+ } else if (((int)p->c_cf & CROUND) == 0) {
+ bp = (struct cblock *)(p->c_cf);
+ bp--;
+ p->c_cf = bp->c_next->c_info;
+ bp->c_next = cfreelist;
+ cfreelist = bp;
+ cfreecount += CBSIZE;
+ if (cwaiting) {
+ wakeup(&cwaiting);
+ cwaiting = 0;
+ }
+ }
+ splx(s);
+ return (c);
+}