static int count = 0;
 
-
+/* The log_printfv() serves to somewhat different goals:
+ * 
+ * - logging
+ * - feeding low-level info to the user in GDB or Telnet
+ * 
+ * The latter dictates that strings without newline are not logged, lest there
+ * will be *MANY log lines when sending one char at the time(e.g. 
+ * target_request.c).
+ * 
+ */
 static void log_puts(enum log_levels level, const char *file, int line, const char *function, const char *string)
 {
        log_callback_t *cb;
        if (f != NULL)
                file = f + 1;
 
-       if (debug_level >= LOG_DEBUG)
+       if (strchr(buffer, '\n')!=NULL)
        {
-               /* print with count and time information */
-               int t=(int)(time(NULL)-start);
+               if (debug_level >= LOG_DEBUG)
+               {
+                       /* print with count and time information */
+                       int t=(int)(time(NULL)-start);
                fprintf(log_output, "%s %d %d %s:%d %s(): %s", log_strings[level+1], count, t, file, line, function, string);
-       }
-       else
+               }
+               else
+               {
+                       /* do not print count and time */
+                       fprintf(log_output, "%s %s:%d %s(): %s", log_strings[level+1], file, line, function, string);
+               }
+       } else
        {
-               /* do not print count and time */
-               fprintf(log_output, "%s %s:%d %s(): %s", log_strings[level+1], file, line, function, string);
+               /* only entire lines are logged. Otherwise it's 
+                * single chars intended for the log callbacks. */
        }
 
        fflush(log_output);
                log_puts(level, file, line, function, string);
                free(string);
        }
-
+       
        va_end(ap);
 }
 
        count++;
        if (level > debug_level)
                return;
-
+       
        va_list ap;
        va_start(ap, format);
-
+       
        string = alloc_printf(format, ap);
        if (string != NULL)
        {
                log_puts(level, file, line, function, string);
                free(string);
        }
-
+       
        va_end(ap);
 }
 
        {
                size *= 2; /* double the buffer size */
 
-               char *t = string;
-               string = realloc(string, size);
-               if (string == NULL)
-               {
-                       if (t != NULL)
-                               free(t);
-                       return NULL;
-               }
-
+                       char *t = string;
+                       string = realloc(string, size);
+                       if (string == NULL)
+                       {
+                               if (t != NULL)
+                                       free(t);
+                               return NULL;
+                       }
+       
            int ret;
-               ret = vsnprintf(string, size, fmt, ap);
+           ret = vsnprintf(string, size, fmt, ap);
            /* NB! The result of the vsnprintf() might be an *EMPTY* string! */
            if ((ret >= 0) && ((ret + 1) < size))
                        break;
        }
        
        /* the returned buffer is by principle guaranteed to be at least one character longer */
-       return string;
+               return string;
 }