trace.c revision 82017
1/* 2 * Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers. 3 * All rights reserved. 4 * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. 5 * Copyright (c) 1988, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * By using this file, you agree to the terms and conditions set 9 * forth in the LICENSE file which can be found at the top level of 10 * the sendmail distribution. 11 * 12 */ 13 14#ifndef lint 15static char id[] = "@(#)$Id: trace.c,v 8.20.22.4 2001/08/15 13:05:43 ca Exp $"; 16#endif /* ! lint */ 17 18#include <sendmail.h> 19 20/* 21** TtSETUP -- set up for trace package. 22** 23** Parameters: 24** vect -- pointer to trace vector. 25** size -- number of flags in trace vector. 26** defflags -- flags to set if no value given. 27** 28** Returns: 29** none 30** 31** Side Effects: 32** environment is set up. 33*/ 34 35static u_char *tTvect; 36static int tTsize; 37static char *DefFlags; 38 39void 40tTsetup(vect, size, defflags) 41 u_char *vect; 42 int size; 43 char *defflags; 44{ 45 tTvect = vect; 46 tTsize = size; 47 DefFlags = defflags; 48} 49/* 50** TtFLAG -- process an external trace flag description. 51** 52** Parameters: 53** s -- the trace flag. 54** 55** Returns: 56** none. 57** 58** Side Effects: 59** sets/clears trace flags. 60*/ 61 62void 63tTflag(s) 64 register char *s; 65{ 66 unsigned int first, last; 67 register unsigned int i; 68 69 if (*s == '\0') 70 s = DefFlags; 71 72 for (;;) 73 { 74 /* find first flag to set */ 75 i = 0; 76 while (isascii(*s) && isdigit(*s) && i < tTsize) 77 i = i * 10 + (*s++ - '0'); 78 79 /* 80 ** skip over rest of a too large number 81 ** Maybe we should complain if out-of-bounds values are used. 82 */ 83 84 while (isascii(*s) && isdigit(*s) && i >= tTsize) 85 s++; 86 first = i; 87 88 /* find last flag to set */ 89 if (*s == '-') 90 { 91 i = 0; 92 while (isascii(*++s) && isdigit(*s) && i < tTsize) 93 i = i * 10 + (*s - '0'); 94 95 /* skip over rest of a too large number */ 96 while (isascii(*s) && isdigit(*s) && i >= tTsize) 97 s++; 98 } 99 last = i; 100 101 /* find the level to set it to */ 102 i = 1; 103 if (*s == '.') 104 { 105 i = 0; 106 while (isascii(*++s) && isdigit(*s)) 107 i = i * 10 + (*s - '0'); 108 } 109 110 /* clean up args */ 111 if (first >= tTsize) 112 first = tTsize - 1; 113 if (last >= tTsize) 114 last = tTsize - 1; 115 116 /* set the flags */ 117 while (first <= last) 118 tTvect[first++] = i; 119 120 /* more arguments? */ 121 if (*s++ == '\0') 122 return; 123 } 124} 125