aboutsummaryrefslogtreecommitdiff
path: root/contrib/sendmail/libsm/debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sendmail/libsm/debug.c')
-rw-r--r--contrib/sendmail/libsm/debug.c394
1 files changed, 0 insertions, 394 deletions
diff --git a/contrib/sendmail/libsm/debug.c b/contrib/sendmail/libsm/debug.c
deleted file mode 100644
index f9281fd5e710..000000000000
--- a/contrib/sendmail/libsm/debug.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 2003, 2004 Sendmail, Inc. and its suppliers.
- * All rights reserved.
- *
- * By using this file, you agree to the terms and conditions set
- * forth in the LICENSE file which can be found at the top level of
- * the sendmail distribution.
- */
-
-#include <sm/gen.h>
-SM_RCSID("@(#)$Id: debug.c,v 1.30 2004/08/03 20:10:26 ca Exp $")
-
-/*
-** libsm debugging and tracing
-** For documentation, see debug.html.
-*/
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <setjmp.h>
-#include <sm/io.h>
-#include <sm/assert.h>
-#include <sm/conf.h>
-#include <sm/debug.h>
-#include <sm/string.h>
-#include <sm/varargs.h>
-#include <sm/heap.h>
-
-static void sm_debug_reset __P((void));
-static const char *parse_named_setting_x __P((const char *));
-
-/*
-** Abstractions for printing trace messages.
-*/
-
-/*
-** The output file to which trace output is directed.
-** There is a controversy over whether this variable
-** should be process global or thread local.
-** To make the interface more abstract, we've hidden the
-** variable behind access functions.
-*/
-
-static SM_FILE_T *SmDebugOutput = smioout;
-
-/*
-** SM_DEBUG_FILE -- Returns current debug file pointer.
-**
-** Parameters:
-** none.
-**
-** Returns:
-** current debug file pointer.
-*/
-
-SM_FILE_T *
-sm_debug_file()
-{
- return SmDebugOutput;
-}
-
-/*
-** SM_DEBUG_SETFILE -- Sets debug file pointer.
-**
-** Parameters:
-** fp -- new debug file pointer.
-**
-** Returns:
-** none.
-**
-** Side Effects:
-** Sets SmDebugOutput.
-*/
-
-void
-sm_debug_setfile(fp)
- SM_FILE_T *fp;
-{
- SmDebugOutput = fp;
-}
-
-/*
-** SM_DEBUG_CLOSE -- Close debug file pointer.
-**
-** Parameters:
-** none.
-**
-** Returns:
-** none.
-**
-** Side Effects:
-** Closes SmDebugOutput.
-*/
-
-void
-sm_debug_close()
-{
- if (SmDebugOutput != NULL && SmDebugOutput != smioout)
- {
- sm_io_close(SmDebugOutput, SM_TIME_DEFAULT);
- SmDebugOutput = NULL;
- }
-}
-
-/*
-** SM_DPRINTF -- printf() for debug output.
-**
-** Parameters:
-** fmt -- format for printf()
-**
-** Returns:
-** none.
-*/
-
-void
-#if SM_VA_STD
-sm_dprintf(char *fmt, ...)
-#else /* SM_VA_STD */
-sm_dprintf(fmt, va_alist)
- char *fmt;
- va_dcl
-#endif /* SM_VA_STD */
-{
- SM_VA_LOCAL_DECL
-
- if (SmDebugOutput == NULL)
- return;
- SM_VA_START(ap, fmt);
- sm_io_vfprintf(SmDebugOutput, SmDebugOutput->f_timeout, fmt, ap);
- SM_VA_END(ap);
-}
-
-/*
-** SM_DFLUSH -- Flush debug output.
-**
-** Parameters:
-** none.
-**
-** Returns:
-** none.
-*/
-
-void
-sm_dflush()
-{
- sm_io_flush(SmDebugOutput, SM_TIME_DEFAULT);
-}
-
-/*
-** This is the internal database of debug settings.
-** The semantics of looking up a setting in the settings database
-** are that the *last* setting specified in a -d option on the sendmail
-** command line that matches a given SM_DEBUG structure is the one that is
-** used. That is necessary to conform to the existing semantics of
-** the sendmail -d option. We store the settings as a linked list in
-** reverse order, so when we do a lookup, we take the *first* entry
-** that matches.
-*/
-
-typedef struct sm_debug_setting SM_DEBUG_SETTING_T;
-struct sm_debug_setting
-{
- const char *ds_pattern;
- unsigned int ds_level;
- SM_DEBUG_SETTING_T *ds_next;
-};
-SM_DEBUG_SETTING_T *SmDebugSettings = NULL;
-
-/*
-** We keep a linked list of SM_DEBUG structures that have been initialized,
-** for use by sm_debug_reset.
-*/
-
-SM_DEBUG_T *SmDebugInitialized = NULL;
-
-const char SmDebugMagic[] = "sm_debug";
-
-/*
-** SM_DEBUG_RESET -- Reset SM_DEBUG structures.
-**
-** Reset all SM_DEBUG structures back to the uninitialized state.
-** This is used by sm_debug_addsetting to ensure that references to
-** SM_DEBUG structures that occur before sendmail processes its -d flags
-** do not cause those structures to be permanently forced to level 0.
-**
-** Parameters:
-** none.
-**
-** Returns:
-** none.
-*/
-
-static void
-sm_debug_reset()
-{
- SM_DEBUG_T *debug;
-
- for (debug = SmDebugInitialized;
- debug != NULL;
- debug = debug->debug_next)
- {
- debug->debug_level = SM_DEBUG_UNKNOWN;
- }
- SmDebugInitialized = NULL;
-}
-
-/*
-** SM_DEBUG_ADDSETTING_X -- add an entry to the database of debug settings
-**
-** Parameters:
-** pattern -- a shell-style glob pattern (see sm_match).
-** WARNING: the storage for 'pattern' will be owned by
-** the debug package, so it should either be a string
-** literal or the result of a call to sm_strdup_x.
-** level -- a non-negative integer.
-**
-** Returns:
-** none.
-**
-** Exceptions:
-** F:sm_heap -- out of memory
-*/
-
-void
-sm_debug_addsetting_x(pattern, level)
- const char *pattern;
- int level;
-{
- SM_DEBUG_SETTING_T *s;
-
- SM_REQUIRE(pattern != NULL);
- SM_REQUIRE(level >= 0);
- s = sm_malloc_x(sizeof(SM_DEBUG_SETTING_T));
- s->ds_pattern = pattern;
- s->ds_level = (unsigned int) level;
- s->ds_next = SmDebugSettings;
- SmDebugSettings = s;
- sm_debug_reset();
-}
-
-/*
-** PARSE_NAMED_SETTING_X -- process a symbolic debug setting
-**
-** Parameters:
-** s -- Points to a non-empty \0 or , terminated string,
-** of which the initial character is not a digit.
-**
-** Returns:
-** pointer to terminating \0 or , character.
-**
-** Exceptions:
-** F:sm.heap -- out of memory.
-**
-** Side Effects:
-** adds the setting to the database.
-*/
-
-static const char *
-parse_named_setting_x(s)
- const char *s;
-{
- const char *pat, *endpat;
- int level;
-
- pat = s;
- while (*s != '\0' && *s != ',' && *s != '.')
- ++s;
- endpat = s;
- if (*s == '.')
- {
- ++s;
- level = 0;
- while (isascii(*s) && isdigit(*s))
- {
- level = level * 10 + (*s - '0');
- ++s;
- }
- if (level < 0)
- level = 0;
- }
- else
- level = 1;
-
- sm_debug_addsetting_x(sm_strndup_x(pat, endpat - pat), level);
-
- /* skip trailing junk */
- while (*s != '\0' && *s != ',')
- ++s;
-
- return s;
-}
-
-/*
-** SM_DEBUG_ADDSETTINGS_X -- process a list of debug options
-**
-** Parameters:
-** s -- a list of debug settings, eg the argument to the
-** sendmail -d option.
-**
-** The syntax of the string s is as follows:
-**
-** <settings> ::= <setting> | <settings> "," <setting>
-** <setting> ::= <categories> | <categories> "." <level>
-** <categories> ::= [a-zA-Z_*?][a-zA-Z0-9_*?]*
-**
-** However, note that we skip over anything we don't
-** understand, rather than report an error.
-**
-** Returns:
-** none.
-**
-** Exceptions:
-** F:sm.heap -- out of memory
-**
-** Side Effects:
-** updates the database of debug settings.
-*/
-
-void
-sm_debug_addsettings_x(s)
- const char *s;
-{
- for (;;)
- {
- if (*s == '\0')
- return;
- if (*s == ',')
- {
- ++s;
- continue;
- }
- s = parse_named_setting_x(s);
- }
-}
-
-/*
-** SM_DEBUG_LOADLEVEL -- Get activation level of the specified debug object.
-**
-** Parameters:
-** debug -- debug object.
-**
-** Returns:
-** Activation level of the specified debug object.
-**
-** Side Effects:
-** Ensures that the debug object is initialized.
-*/
-
-int
-sm_debug_loadlevel(debug)
- SM_DEBUG_T *debug;
-{
- if (debug->debug_level == SM_DEBUG_UNKNOWN)
- {
- SM_DEBUG_SETTING_T *s;
-
- for (s = SmDebugSettings; s != NULL; s = s->ds_next)
- {
- if (sm_match(debug->debug_name, s->ds_pattern))
- {
- debug->debug_level = s->ds_level;
- goto initialized;
- }
- }
- debug->debug_level = 0;
- initialized:
- debug->debug_next = SmDebugInitialized;
- SmDebugInitialized = debug;
- }
- return (int) debug->debug_level;
-}
-
-/*
-** SM_DEBUG_LOADACTIVE -- Activation level reached?
-**
-** Parameters:
-** debug -- debug object.
-** level -- level to check.
-**
-** Returns:
-** true iff the activation level of the specified debug
-** object >= level.
-**
-** Side Effects:
-** Ensures that the debug object is initialized.
-*/
-
-bool
-sm_debug_loadactive(debug, level)
- SM_DEBUG_T *debug;
- int level;
-{
- return sm_debug_loadlevel(debug) >= level;
-}