// #define _GNU_SOURCE /* See feature_test_macros(7) */ #include #include #include #include #include #include #include #include #include #include "modelbahn.h" #define DEBUG_FILE "/tmp/modelbahn-server.log" #define LEN_TEXT 256 int _debuglevel = 0xff; pid_t gettid(); void debug (int type, char *fmt,...) { va_list args; char texttime[LEN_TEXT]; char text1[DEBUG_TEXT1LEN]; char text2[DEBUG_TEXT2LEN]; pid_t pid = gettid(); int tms; struct timeval tv; struct tm tmp; struct tm *tmptr = NULL; va_start (args, fmt); vsnprintf (text1, (DEBUG_TEXT1LEN-1), fmt, args); va_end (args); texttime[0] = 0; text1[DEBUG_TEXT1LEN-1] = 0; text2[DEBUG_TEXT2LEN-1] = 0; gettimeofday (&tv, NULL); tmptr = localtime_r(&tv.tv_sec, &tmp); if (tmptr != NULL) strftime(texttime, LEN_TEXT, "%H:%M:%S", &tmp); if (type > 0) snprintf (text2, DEBUG_TEXT2LEN-1, "(%d, %s.%03d) %d : %s", pid, texttime, tv.tv_usec/1000, type, text1); else snprintf (text2, DEBUG_TEXT2LEN-1, "(%d, %s.%03d) : %s", pid, texttime, tv.tv_usec/1000, text1); if (type == 0 || (type & _debuglevel) != 0) { FILE *f; printf ("%s\n", text2); f= fopen(DEBUG_FILE, "a"); if (f) { fprintf (f, "%s\n", text2); fclose (f); } } }; /******************************************************************************************* * helper stuff *******************************************************************************************/ // // return the current thread process id // pid_t gettid() { pid_t tid = 0; tid = syscall(SYS_gettid); return tid; };