xref: /illumos-gate/usr/src/cmd/lp/lib/msgs/mgetputm.c (revision 2a8bcb4e)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
67c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
77c478bd9Sstevel@tonic-gate  * with the License.
87c478bd9Sstevel@tonic-gate  *
97c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate  * and limitations under the License.
137c478bd9Sstevel@tonic-gate  *
147c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate  *
207c478bd9Sstevel@tonic-gate  * CDDL HEADER END
217c478bd9Sstevel@tonic-gate  */
227c478bd9Sstevel@tonic-gate /*
237c478bd9Sstevel@tonic-gate  * Copyright 1994 Sun Microsystems, Inc.  All rights reserved.
247c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
287c478bd9Sstevel@tonic-gate /*	  All Rights Reserved  	*/
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate # include	<unistd.h>
317c478bd9Sstevel@tonic-gate # include	<errno.h>
327c478bd9Sstevel@tonic-gate # include	<stdlib.h>
337c478bd9Sstevel@tonic-gate 
347c478bd9Sstevel@tonic-gate #if	defined(__STDC__)
357c478bd9Sstevel@tonic-gate # include	<stdarg.h>
367c478bd9Sstevel@tonic-gate #else
377c478bd9Sstevel@tonic-gate # include	<varargs.h>
387c478bd9Sstevel@tonic-gate #endif
397c478bd9Sstevel@tonic-gate 
407c478bd9Sstevel@tonic-gate # include	"lp.h"
417c478bd9Sstevel@tonic-gate # include	"msgs.h"
427c478bd9Sstevel@tonic-gate 
437c478bd9Sstevel@tonic-gate 
447c478bd9Sstevel@tonic-gate /*
457c478bd9Sstevel@tonic-gate **	Size and pointer for mgetm()
467c478bd9Sstevel@tonic-gate */
477c478bd9Sstevel@tonic-gate static int	MBGSize = 0;
487c478bd9Sstevel@tonic-gate static char *	MBG = NULL;
497c478bd9Sstevel@tonic-gate 
507c478bd9Sstevel@tonic-gate /*
517c478bd9Sstevel@tonic-gate **	Size and pointer for mputm()
527c478bd9Sstevel@tonic-gate */
537c478bd9Sstevel@tonic-gate static int	MBPSize = 0;
547c478bd9Sstevel@tonic-gate static char *	MBP = NULL;
557c478bd9Sstevel@tonic-gate 
567c478bd9Sstevel@tonic-gate int		peek3_2();
577c478bd9Sstevel@tonic-gate 
587c478bd9Sstevel@tonic-gate #if	defined(__STDC__)
mgetm(MESG * md,int type,...)597c478bd9Sstevel@tonic-gate int mgetm ( MESG * md, int type, ... )
607c478bd9Sstevel@tonic-gate #else
617c478bd9Sstevel@tonic-gate int mgetm (md, type, va_alist)
627c478bd9Sstevel@tonic-gate     MESG	*md;
637c478bd9Sstevel@tonic-gate     int		type;
647c478bd9Sstevel@tonic-gate     va_dcl
657c478bd9Sstevel@tonic-gate #endif
667c478bd9Sstevel@tonic-gate {
677c478bd9Sstevel@tonic-gate     va_list	vp;
687c478bd9Sstevel@tonic-gate     int		ret;
697c478bd9Sstevel@tonic-gate     int		needsize;
707c478bd9Sstevel@tonic-gate 
717c478bd9Sstevel@tonic-gate #if	defined(__STDC__)
727c478bd9Sstevel@tonic-gate     va_start(vp, type);
737c478bd9Sstevel@tonic-gate #else
747c478bd9Sstevel@tonic-gate     va_start(vp);
757c478bd9Sstevel@tonic-gate #endif
767c478bd9Sstevel@tonic-gate 
777c478bd9Sstevel@tonic-gate     needsize = mpeek(md);
787c478bd9Sstevel@tonic-gate     if (needsize <=0 || needsize > MSGMAX)
797c478bd9Sstevel@tonic-gate 	needsize = MSGMAX;
807c478bd9Sstevel@tonic-gate     if (needsize > MBGSize)
817c478bd9Sstevel@tonic-gate     {
827c478bd9Sstevel@tonic-gate 	if (MBG)
837c478bd9Sstevel@tonic-gate 	    Free(MBG);
847c478bd9Sstevel@tonic-gate 	if ((MBG = (char *)Malloc(needsize)) == NULL)
857c478bd9Sstevel@tonic-gate 	{
867c478bd9Sstevel@tonic-gate 	    MBGSize = 0;
877c478bd9Sstevel@tonic-gate 	    MBG = NULL;
887c478bd9Sstevel@tonic-gate 	    errno = ENOMEM;
897c478bd9Sstevel@tonic-gate 	    return(-1);
907c478bd9Sstevel@tonic-gate 	}
917c478bd9Sstevel@tonic-gate 	MBGSize = needsize;
927c478bd9Sstevel@tonic-gate     }
937c478bd9Sstevel@tonic-gate     if (mread(md, MBG, MBGSize) < 0)
947c478bd9Sstevel@tonic-gate 	return(-1);
957c478bd9Sstevel@tonic-gate 
967c478bd9Sstevel@tonic-gate     ret = _getmessage(MBG, type, vp);
977c478bd9Sstevel@tonic-gate 
987c478bd9Sstevel@tonic-gate     va_end(vp);
997c478bd9Sstevel@tonic-gate 
1007c478bd9Sstevel@tonic-gate     return(ret);
1017c478bd9Sstevel@tonic-gate }
1027c478bd9Sstevel@tonic-gate 
1037c478bd9Sstevel@tonic-gate #if	defined(__STDC__)
mputm(MESG * md,int type,...)1047c478bd9Sstevel@tonic-gate int mputm ( MESG * md, int type, ... )
1057c478bd9Sstevel@tonic-gate #else
1067c478bd9Sstevel@tonic-gate int mputm (md, type, va_alist)
1077c478bd9Sstevel@tonic-gate     MESG	*md;
1087c478bd9Sstevel@tonic-gate     int		type;
1097c478bd9Sstevel@tonic-gate     va_dcl
1107c478bd9Sstevel@tonic-gate #endif
1117c478bd9Sstevel@tonic-gate {
1127c478bd9Sstevel@tonic-gate     va_list	vp;
1137c478bd9Sstevel@tonic-gate     int		needsize;
1147c478bd9Sstevel@tonic-gate 
1157c478bd9Sstevel@tonic-gate #if	defined(__STDC__)
1167c478bd9Sstevel@tonic-gate     va_start(vp, type);
1177c478bd9Sstevel@tonic-gate #else
1187c478bd9Sstevel@tonic-gate     va_start(vp);
1197c478bd9Sstevel@tonic-gate #endif
1207c478bd9Sstevel@tonic-gate     needsize = _putmessage(NULL, type, vp);
1217c478bd9Sstevel@tonic-gate     va_end(vp);
1227c478bd9Sstevel@tonic-gate     if (needsize <= 0)
1237c478bd9Sstevel@tonic-gate 	return(-1);
124*2a8bcb4eSToomas Soome 
1257c478bd9Sstevel@tonic-gate     if (needsize > MBPSize)
1267c478bd9Sstevel@tonic-gate     {
1277c478bd9Sstevel@tonic-gate 	if (MBP)
1287c478bd9Sstevel@tonic-gate 	    Free(MBP);
1297c478bd9Sstevel@tonic-gate 	if ((MBP = (char *)Malloc(needsize)) == NULL)
1307c478bd9Sstevel@tonic-gate 	{
1317c478bd9Sstevel@tonic-gate 	    MBPSize = 0;
1327c478bd9Sstevel@tonic-gate 	    MBP = NULL;
1337c478bd9Sstevel@tonic-gate 	    errno = ENOMEM;
1347c478bd9Sstevel@tonic-gate 	    return(-1);
1357c478bd9Sstevel@tonic-gate 	}
1367c478bd9Sstevel@tonic-gate 	MBPSize = needsize;
1377c478bd9Sstevel@tonic-gate     }
1387c478bd9Sstevel@tonic-gate 
1397c478bd9Sstevel@tonic-gate #if	defined(__STDC__)
1407c478bd9Sstevel@tonic-gate     va_start(vp, type);
1417c478bd9Sstevel@tonic-gate #else
1427c478bd9Sstevel@tonic-gate     va_start(vp);
1437c478bd9Sstevel@tonic-gate #endif
1447c478bd9Sstevel@tonic-gate     needsize = _putmessage(MBP, type, vp);
1457c478bd9Sstevel@tonic-gate     va_end(vp);
1467c478bd9Sstevel@tonic-gate     if (needsize <= 0)
1477c478bd9Sstevel@tonic-gate 	return(-1);
148*2a8bcb4eSToomas Soome 
1497c478bd9Sstevel@tonic-gate 
1507c478bd9Sstevel@tonic-gate     return(mwrite(md, MBP));
1517c478bd9Sstevel@tonic-gate }
1527c478bd9Sstevel@tonic-gate 
1537c478bd9Sstevel@tonic-gate #if	defined(__STDC__)
__mbfree(void)1547c478bd9Sstevel@tonic-gate void __mbfree ( void )
1557c478bd9Sstevel@tonic-gate #else
1567c478bd9Sstevel@tonic-gate void __mbfree ()
1577c478bd9Sstevel@tonic-gate #endif
1587c478bd9Sstevel@tonic-gate {
1597c478bd9Sstevel@tonic-gate     MBGSize = MBPSize = 0;
1607c478bd9Sstevel@tonic-gate     if (MBG)
1617c478bd9Sstevel@tonic-gate 	Free (MBG);
1627c478bd9Sstevel@tonic-gate     if (MBP)
1637c478bd9Sstevel@tonic-gate 	Free (MBP);
1647c478bd9Sstevel@tonic-gate     MBG = MBP = NULL;
1657c478bd9Sstevel@tonic-gate }
1667c478bd9Sstevel@tonic-gate 
1677c478bd9Sstevel@tonic-gate #if	defined(__STDC__)
mpeek(MESG * md)1687c478bd9Sstevel@tonic-gate short mpeek ( MESG * md )
1697c478bd9Sstevel@tonic-gate #else
1707c478bd9Sstevel@tonic-gate short mpeek (md)
1717c478bd9Sstevel@tonic-gate     MESG	*md;
1727c478bd9Sstevel@tonic-gate #endif
1737c478bd9Sstevel@tonic-gate {
1747c478bd9Sstevel@tonic-gate     int size;
1757c478bd9Sstevel@tonic-gate 
1767c478bd9Sstevel@tonic-gate     if (md->type == MD_USR_FIFO || md->type == MD_SYS_FIFO)
1777c478bd9Sstevel@tonic-gate 	return(peek3_2(md->readfd) - EXCESS_3_2_LEN);
1787c478bd9Sstevel@tonic-gate 
1797c478bd9Sstevel@tonic-gate     if (ioctl(md->readfd, I_NREAD, &size))
1807c478bd9Sstevel@tonic-gate 	return((short)size);
1817c478bd9Sstevel@tonic-gate 
1827c478bd9Sstevel@tonic-gate     return(-1);
1837c478bd9Sstevel@tonic-gate }
184