xref: /original-bsd/usr.sbin/sendmail/src/trace.c (revision 7211505a)
1 /*
2  * Copyright (c) 1983 Eric P. Allman
3  * Copyright (c) 1988 Regents of the University of California.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms are permitted
7  * provided that the above copyright notice and this paragraph are
8  * duplicated in all such forms and that any documentation,
9  * advertising materials, and other materials related to such
10  * distribution and use acknowledge that the software was developed
11  * by the University of California, Berkeley.  The name of the
12  * University may not be used to endorse or promote products derived
13  * from this software without specific prior written permission.
14  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
16  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17  */
18 
19 #ifndef lint
20 static char sccsid[] = "@(#)trace.c	5.5 (Berkeley) 06/30/88";
21 #endif /* not lint */
22 
23 # include "sendmail.h"
24 
25 /*
26 **  TtSETUP -- set up for trace package.
27 **
28 **	Parameters:
29 **		vect -- pointer to trace vector.
30 **		size -- number of flags in trace vector.
31 **		defflags -- flags to set if no value given.
32 **
33 **	Returns:
34 **		none
35 **
36 **	Side Effects:
37 **		environment is set up.
38 */
39 
40 u_char		*tTvect;
41 int		tTsize;
42 static char	*DefFlags;
43 
44 tTsetup(vect, size, defflags)
45 	u_char *vect;
46 	int size;
47 	char *defflags;
48 {
49 	tTvect = vect;
50 	tTsize = size;
51 	DefFlags = defflags;
52 }
53 /*
54 **  TtFLAG -- process an external trace flag description.
55 **
56 **	Parameters:
57 **		s -- the trace flag.
58 **
59 **	Returns:
60 **		none.
61 **
62 **	Side Effects:
63 **		sets/clears trace flags.
64 */
65 
66 tTflag(s)
67 	register char *s;
68 {
69 	int first, last;
70 	register int i;
71 
72 	if (*s == '\0')
73 		s = DefFlags;
74 
75 	for (;;)
76 	{
77 		/* find first flag to set */
78 		i = 0;
79 		while (isdigit(*s))
80 			i = i * 10 + (*s++ - '0');
81 		first = i;
82 
83 		/* find last flag to set */
84 		if (*s == '-')
85 		{
86 			i = 0;
87 			while (isdigit(*++s))
88 				i = i * 10 + (*s - '0');
89 		}
90 		last = i;
91 
92 		/* find the level to set it to */
93 		i = 1;
94 		if (*s == '.')
95 		{
96 			i = 0;
97 			while (isdigit(*++s))
98 				i = i * 10 + (*s - '0');
99 		}
100 
101 		/* clean up args */
102 		if (first >= tTsize)
103 			first = tTsize - 1;
104 		if (last >= tTsize)
105 			last = tTsize - 1;
106 
107 		/* set the flags */
108 		while (first <= last)
109 			tTvect[first++] = i;
110 
111 		/* more arguments? */
112 		if (*s++ == '\0')
113 			return;
114 	}
115 }
116