xref: /onnv-gate/usr/src/lib/libast/common/misc/optctx.c (revision 12068:08a39a083754)
18462SApril.Chin@Sun.COM /***********************************************************************
28462SApril.Chin@Sun.COM *                                                                      *
38462SApril.Chin@Sun.COM *               This software is part of the ast package               *
4*12068SRoger.Faulkner@Oracle.COM *          Copyright (c) 1985-2010 AT&T Intellectual Property          *
58462SApril.Chin@Sun.COM *                      and is licensed under the                       *
68462SApril.Chin@Sun.COM *                  Common Public License, Version 1.0                  *
78462SApril.Chin@Sun.COM *                    by AT&T Intellectual Property                     *
88462SApril.Chin@Sun.COM *                                                                      *
98462SApril.Chin@Sun.COM *                A copy of the License is available at                 *
108462SApril.Chin@Sun.COM *            http://www.opensource.org/licenses/cpl1.0.txt             *
118462SApril.Chin@Sun.COM *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
128462SApril.Chin@Sun.COM *                                                                      *
138462SApril.Chin@Sun.COM *              Information and Software Systems Research               *
148462SApril.Chin@Sun.COM *                            AT&T Research                             *
158462SApril.Chin@Sun.COM *                           Florham Park NJ                            *
168462SApril.Chin@Sun.COM *                                                                      *
178462SApril.Chin@Sun.COM *                 Glenn Fowler <gsf@research.att.com>                  *
188462SApril.Chin@Sun.COM *                  David Korn <dgk@research.att.com>                   *
198462SApril.Chin@Sun.COM *                   Phong Vo <kpv@research.att.com>                    *
208462SApril.Chin@Sun.COM *                                                                      *
218462SApril.Chin@Sun.COM ***********************************************************************/
228462SApril.Chin@Sun.COM #pragma prototyped
238462SApril.Chin@Sun.COM /*
248462SApril.Chin@Sun.COM  * Glenn Fowler
258462SApril.Chin@Sun.COM  * AT&T Research
268462SApril.Chin@Sun.COM  *
278462SApril.Chin@Sun.COM  * _opt_infop_ context control
288462SApril.Chin@Sun.COM  *
298462SApril.Chin@Sun.COM  * allocate new context:
308462SApril.Chin@Sun.COM  *	new_context = optctx(0, 0);
318462SApril.Chin@Sun.COM  * free new context:
328462SApril.Chin@Sun.COM  *	optctx(0, new_context);
338462SApril.Chin@Sun.COM  * switch to new_context:
348462SApril.Chin@Sun.COM  *	old_context = optctx(new_context, 0);
358462SApril.Chin@Sun.COM  * switch to old_context and free new_context:
368462SApril.Chin@Sun.COM  *	optctx(old_context, new_context);
378462SApril.Chin@Sun.COM  */
388462SApril.Chin@Sun.COM 
398462SApril.Chin@Sun.COM #include <optlib.h>
408462SApril.Chin@Sun.COM 
418462SApril.Chin@Sun.COM static Opt_t*	freecontext;
428462SApril.Chin@Sun.COM 
438462SApril.Chin@Sun.COM Opt_t*
optctx(Opt_t * p,Opt_t * o)448462SApril.Chin@Sun.COM optctx(Opt_t* p, Opt_t* o)
458462SApril.Chin@Sun.COM {
468462SApril.Chin@Sun.COM 	if (o)
478462SApril.Chin@Sun.COM 	{
488462SApril.Chin@Sun.COM 		if (freecontext)
498462SApril.Chin@Sun.COM 			free(o);
508462SApril.Chin@Sun.COM 		else
518462SApril.Chin@Sun.COM 			freecontext = o;
528462SApril.Chin@Sun.COM 		if (!p)
538462SApril.Chin@Sun.COM 			return 0;
548462SApril.Chin@Sun.COM 	}
558462SApril.Chin@Sun.COM 	if (p)
568462SApril.Chin@Sun.COM 	{
578462SApril.Chin@Sun.COM 		o = _opt_infop_;
588462SApril.Chin@Sun.COM 		_opt_infop_ = p;
598462SApril.Chin@Sun.COM 	}
608462SApril.Chin@Sun.COM 	else
618462SApril.Chin@Sun.COM 	{
628462SApril.Chin@Sun.COM 		if (o = freecontext)
638462SApril.Chin@Sun.COM 			freecontext = 0;
648462SApril.Chin@Sun.COM 		else if (!(o = newof(0, Opt_t, 1, 0)))
658462SApril.Chin@Sun.COM 			return 0;
668462SApril.Chin@Sun.COM 		memset(o, 0, sizeof(Opt_t));
678462SApril.Chin@Sun.COM 		o->state = _opt_infop_->state;
688462SApril.Chin@Sun.COM 	}
698462SApril.Chin@Sun.COM 	return o;
708462SApril.Chin@Sun.COM }
71