chiark / gitweb /
First record and playback works.
[adns.git] / src / general.c
index fbab698eb39aa26f1104c9dffea2005f530865da..15025a406c8375a68e60c86c921d24282a087a82 100644 (file)
@@ -34,33 +34,36 @@ void adns__vdiag(adns_state ads, const char *pfx, adns_initflags prevent,
                 int serv, adns_query qu, const char *fmt, va_list al) {
   const char *bef, *aft;
   vbuf vb;
-  if (!(ads->iflags & adns_if_debug) && (!prevent || (ads->iflags & prevent))) return;
+  
+  if (!ads->diagfile ||
+      (!(ads->iflags & adns_if_debug) && (!prevent || (ads->iflags & prevent))))
+    return;
 
-  fprintf(stderr,"adns%s: ",pfx);
+  fprintf(ads->diagfile,"adns%s: ",pfx);
 
-  vfprintf(stderr,fmt,al);
+  vfprintf(ads->diagfile,fmt,al);
 
   bef= " (";
   aft= "\n";
 
   if (qu && qu->query_dgram) {
     adns__vbuf_init(&vb);
-    fprintf(stderr,"%sQNAME=%s, QTYPE=%s",
+    fprintf(ads->diagfile,"%sQNAME=%s, QTYPE=%s",
            bef,
            adns__diag_domain(qu->ads,-1,0, &vb,
                              qu->query_dgram,qu->query_dglen,DNS_HDRSIZE),
            qu->typei ? qu->typei->rrtname : "<unknown>");
     if (qu->typei && qu->typei->fmtname)
-      fprintf(stderr,"(%s)",qu->typei->fmtname);
+      fprintf(ads->diagfile,"(%s)",qu->typei->fmtname);
     bef=", "; aft=")\n";
   }
   
   if (serv>=0) {
-    fprintf(stderr,"%sNS=%s",bef,inet_ntoa(ads->servers[serv].addr));
+    fprintf(ads->diagfile,"%sNS=%s",bef,inet_ntoa(ads->servers[serv].addr));
     bef=", "; aft=")\n";
   }
 
-  fputs(aft,stderr);
+  fputs(aft,ads->diagfile);
 }
 
 void adns__debug(adns_state ads, int serv, adns_query qu, const char *fmt, ...) {
@@ -251,13 +254,15 @@ const char *adns_strerror(adns_status st) {
 }
 
 void adns__isort(void *array, int nobjs, int sz, void *tempbuf,
-                int (*needswap)(const void *a, const void *b)) {
+                int (*needswap)(void *context, const void *a, const void *b),
+                void *context) {
   byte *data= array;
   int i, place;
 
   for (i=0; i<nobjs; i++) {
-    for (place= i; place>0 && needswap(data + (place-1)*sz, data + i*sz); place--);
-
+    for (place= i;
+        place>0 && needswap(context, data + (place-1)*sz, data + i*sz);
+        place--);
     if (place != i) {
       memcpy(tempbuf, data + i*sz, sz);
       memmove(data + (place+1)*sz, data + place*sz, (i-place)*sz);