* a way to have backtraces in log in citserver.
+#if HAVE_BACKTRACE
+#include <execinfo.h>
+#endif
+
#include <ctype.h>
#include <string.h>
#include <dirent.h>
#include <ctype.h>
#include <string.h>
#include <dirent.h>
int do_defrag = 0;
time_t server_startup_time;
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
*/
/*
* 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.
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)
if test "$ac_cv_func_gethostbyname" = no; then
AC_CHECK_LIB(nsl, gethostbyname)
+//extern void cit_backtrace(void);
+
/*
* extract_token() - a string tokenizer
* returns -1 if not found, or length of token.
/*
* 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)
{
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 * /
+// cit_backtrace();
+// lprintf (CTDL_DEBUG, "test >: n: %d sep: %c source: %s \n willi \n", parmnum, separator, source);
dest[0] = 0;
if (s == NULL) {
dest[0] = 0;
if (s == NULL) {
if (*s == separator) {
++current_token;
}
if (*s == separator) {
++current_token;
}
- if ( (current_token == parmnum) && (len < maxlen) ) {
+ if ( (current_token == parmnum) &&
+ (*s != separator) &&
+ (len < maxlen) ) {
- 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);
/*
* extract_token() - a string tokenizer
/*
* extract_token() - a string tokenizer
long extract_token(char *dest, const char *source, int parmnum, char separator, int maxlen)
{
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;
int count = 0;
int len = 0;
+
+// cit_backtrace();
+ lprintf (CTDL_DEBUG, "test >: n: %d sep: %c source: %s \n willi \n", parmnum, separator, source);
- /* Locate desired parameter */
+ //* Locate desired parameter * /
s = source;
while (count < parmnum) {
s = source;
while (count < parmnum) {
- /* End of string, bail! */
+ //* End of string, bail! * /
if (!*s) {
s = NULL;
break;
if (!*s) {
s = NULL;
break;
- 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;
for (d = dest; *s && *s != separator && ++len<maxlen; s++, d++) {
*d = *s;
}
*d = 0;
+ lprintf (CTDL_DEBUG,"test <: %d; %s\n", len, dest);