# endif
#endif
+#if HAVE_BACKTRACE
+#include <execinfo.h>
+#endif
+
#include <ctype.h>
#include <string.h>
#include <dirent.h>
int do_defrag = 0;
time_t server_startup_time;
+/**
+ * \brief print the actual stack frame.
+ */
+void cit_backtrace(void)
+{
+#ifdef HAVE_BACKTRACE
+ void *stack_frames[50];
+ size_t size, i;
+ char **strings;
+
+
+ size = backtrace(stack_frames, sizeof(stack_frames) / sizeof(void*));
+ strings = backtrace_symbols(stack_frames, size);
+ for (i = 0; i < size; i++) {
+ if (strings != NULL)
+ lprintf(1, "%s\n", strings[i]);
+ else
+ lprintf(1, "%p\n", stack_frames[i]);
+ }
+ free(strings);
+#endif
+}
/*
* Various things that need to be initialized at startup
*/
dnl We want to test for the following in libc before checking for their
dnl respective libraries, because some systems (like Irix) have both, and the
dnl non-libc versions may be broken.
-AC_CHECK_FUNCS(crypt gethostbyname connect)
+AC_CHECK_FUNCS(crypt gethostbyname connect backtrace)
if test "$ac_cv_func_gethostbyname" = no; then
AC_CHECK_LIB(nsl, gethostbyname)
return (count);
}
+//extern void cit_backtrace(void);
+
/*
* extract_token() - a string tokenizer
* returns -1 if not found, or length of token.
- * /
+ */
long extract_token(char *dest, const char *source, int parmnum, char separator, int maxlen)
{
- const char *s; /* source * /
- int len = 0; /* running total length of extracted string * /
- int current_token = 0; /* token currently being processed * /
+ const char *s; //* source * /
+ int len = 0; //* running total length of extracted string * /
+ int current_token = 0; //* token currently being processed * /
s = source;
return(-1);
}
+// cit_backtrace();
+// lprintf (CTDL_DEBUG, "test >: n: %d sep: %c source: %s \n willi \n", parmnum, separator, source);
dest[0] = 0;
if (s == NULL) {
if (*s == separator) {
++current_token;
}
- if ( (current_token == parmnum) && (len < maxlen) ) {
+ if ( (current_token == parmnum) &&
+ (*s != separator) &&
+ (len < maxlen) ) {
dest[len] = *s;
++len;
}
++s;
}
- dest[len] = 0;
- if (current_token < parmnum) return(-1);
+ dest[len] = '\0';
+ if (current_token < parmnum) {
+// lprintf (CTDL_DEBUG,"test <!: %s\n", dest);
+ return(-1);
+ }
+// lprintf (CTDL_DEBUG,"test <: %d; %s\n", len, dest);
return(len);
}
-*/
+//*/
+
/*
* extract_token() - a string tokenizer
- */
+ * /
long extract_token(char *dest, const char *source, int parmnum, char separator, int maxlen)
{
- char *d; /* dest */
- const char *s; /* source */
+ char *d; //* dest * /
+ const char *s; //* source * /
int count = 0;
int len = 0;
+
+// cit_backtrace();
+ lprintf (CTDL_DEBUG, "test >: n: %d sep: %c source: %s \n willi \n", parmnum, separator, source);
strcpy(dest, "");
- /* Locate desired parameter */
+ //* Locate desired parameter * /
s = source;
while (count < parmnum) {
- /* End of string, bail! */
+ //* End of string, bail! * /
if (!*s) {
s = NULL;
break;
}
s++;
}
- if (!s) return -1; /* Parameter not found */
-
+ if (!s) {
+ lprintf (CTDL_DEBUG,"test <!: %s\n", dest);
+ return -1; //* Parameter not found * /
+ }
+
for (d = dest; *s && *s != separator && ++len<maxlen; s++, d++) {
*d = *s;
}
*d = 0;
+ lprintf (CTDL_DEBUG,"test <: %d; %s\n", len, dest);
return 0;
}
-
+*/
/*