/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 1994 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ # include # include # include #if defined(__STDC__) # include #else # include #endif # include "lp.h" # include "msgs.h" /* ** Size and pointer for mgetm() */ static int MBGSize = 0; static char * MBG = NULL; /* ** Size and pointer for mputm() */ static int MBPSize = 0; static char * MBP = NULL; int peek3_2(); #if defined(__STDC__) int mgetm ( MESG * md, int type, ... ) #else int mgetm (md, type, va_alist) MESG *md; int type; va_dcl #endif { va_list vp; int ret; int needsize; #if defined(__STDC__) va_start(vp, type); #else va_start(vp); #endif needsize = mpeek(md); if (needsize <=0 || needsize > MSGMAX) needsize = MSGMAX; if (needsize > MBGSize) { if (MBG) Free(MBG); if ((MBG = (char *)Malloc(needsize)) == NULL) { MBGSize = 0; MBG = NULL; errno = ENOMEM; return(-1); } MBGSize = needsize; } if (mread(md, MBG, MBGSize) < 0) return(-1); ret = _getmessage(MBG, type, vp); va_end(vp); return(ret); } #if defined(__STDC__) int mputm ( MESG * md, int type, ... ) #else int mputm (md, type, va_alist) MESG *md; int type; va_dcl #endif { va_list vp; int needsize; #if defined(__STDC__) va_start(vp, type); #else va_start(vp); #endif needsize = _putmessage(NULL, type, vp); va_end(vp); if (needsize <= 0) return(-1); if (needsize > MBPSize) { if (MBP) Free(MBP); if ((MBP = (char *)Malloc(needsize)) == NULL) { MBPSize = 0; MBP = NULL; errno = ENOMEM; return(-1); } MBPSize = needsize; } #if defined(__STDC__) va_start(vp, type); #else va_start(vp); #endif needsize = _putmessage(MBP, type, vp); va_end(vp); if (needsize <= 0) return(-1); return(mwrite(md, MBP)); } #if defined(__STDC__) void __mbfree ( void ) #else void __mbfree () #endif { MBGSize = MBPSize = 0; if (MBG) Free (MBG); if (MBP) Free (MBP); MBG = MBP = NULL; } #if defined(__STDC__) short mpeek ( MESG * md ) #else short mpeek (md) MESG *md; #endif { int size; if (md->type == MD_USR_FIFO || md->type == MD_SYS_FIFO) return(peek3_2(md->readfd) - EXCESS_3_2_LEN); if (ioctl(md->readfd, I_NREAD, &size)) return((short)size); return(-1); }