]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/gssd/cacheio.c
Use printerr to print svcgssd downcall debugging info
[nfs-utils.git] / utils / gssd / cacheio.c
index ac76c065d09a023cfa9d562ce199139d189de1b5..f47f1fa9d9be936713dd556163f7dad09f881ab8 100644 (file)
@@ -55,6 +55,7 @@
 #include <time.h>
 #include <stdlib.h>
 #include <string.h>
+#include <errno.h>
 #include "err_util.h"
 
 void qword_add(char **bpp, int *lp, char *str)
@@ -131,6 +132,17 @@ void qword_addint(char **bpp, int *lp, int n)
        *lp -= len;
 }
 
+void qword_adduint(char **bpp, int *lp, unsigned int n)
+{
+       int len;
+
+       len = snprintf(*bpp, *lp, "%u ", n);
+       if (len > *lp)
+               len = *lp;
+       *bpp += len;
+       *lp -= len;
+}
+
 void qword_addeol(char **bpp, int *lp)
 {
        if (*lp <= 0)
@@ -141,17 +153,12 @@ void qword_addeol(char **bpp, int *lp)
 }
 
 static char qword_buf[8192];
-static char tmp_buf[8192];
 void qword_print(FILE *f, char *str)
 {
        char *bp = qword_buf;
        int len = sizeof(qword_buf);
        qword_add(&bp, &len, str);
        fwrite(qword_buf, bp-qword_buf, 1, f);
-       /* XXX: */
-       memcpy(tmp_buf, qword_buf, bp-qword_buf);
-       tmp_buf[bp-qword_buf] = '\0';
-       printerr(2, "%s", tmp_buf);
 }
 
 void qword_printhex(FILE *f, char *str, int slen)
@@ -160,23 +167,19 @@ void qword_printhex(FILE *f, char *str, int slen)
        int len = sizeof(qword_buf);
        qword_addhex(&bp, &len, str, slen);
        fwrite(qword_buf, bp-qword_buf, 1, f);
-       /* XXX: */
-       memcpy(tmp_buf, qword_buf, bp-qword_buf);
-       tmp_buf[bp-qword_buf] = '\0';
-       printerr(2, "%s", tmp_buf);
 }
 
 void qword_printint(FILE *f, int num)
 {
        fprintf(f, "%d ", num);
-       printerr(2, "%d ", num);
 }
 
-void qword_eol(FILE *f)
+int qword_eol(FILE *f)
 {
+       int err;
        fprintf(f,"\n");
-       fflush(f);
-       printerr(2, "\n");
+       err = fflush(f);
+       return err;
 }
 
 
@@ -244,6 +247,8 @@ int qword_get_int(char **bpp, int *anint)
        return 0;
 }
 
+#define READLINE_BUFFER_INCREMENT 2048
+
 int readline(int fd, char **buf, int *lenp)
 {
        /* read a line into *buf, which is malloced *len long
@@ -254,15 +259,16 @@ int readline(int fd, char **buf, int *lenp)
        int len;
 
        if (*lenp == 0) {
-               char *b = malloc(128);
+               char *b = malloc(READLINE_BUFFER_INCREMENT);
                if (b == NULL)
                        return 0;
                *buf = b;
-               *lenp = 128;
+               *lenp = READLINE_BUFFER_INCREMENT;
        }
        len = read(fd, *buf, *lenp);
        if (len <= 0) {
-               printerr(2, "read error in readline: %d\n", len);
+               printerr(0, "readline: read error: len %d errno %d (%s)\n",
+                        len, errno, strerror(errno));
                return 0;
        }
        while ((*buf)[len-1] != '\n') {
@@ -271,19 +277,21 @@ int readline(int fd, char **buf, int *lenp)
         */
                char *new;
                int nl;
-               *lenp += 128;
+               *lenp += READLINE_BUFFER_INCREMENT;
                new = realloc(*buf, *lenp);
                if (new == NULL)
                        return 0;
                *buf = new;
                nl = read(fd, *buf +len, *lenp - len);
                if (nl <= 0 ) {
-                       printerr(2, "read error in readline: %d\n", nl);
+                       printerr(0, "readline: read error: len %d "
+                                "errno %d (%s)\n", nl, errno, strerror(errno));
                        return 0;
                }
                len += nl;
        }
        (*buf)[len-1] = 0;
-       printerr(1, "read line with %d characters:\n%s\n", *lenp, *buf);
+       printerr(3, "readline: read %d chars into buffer of size %d:\n%s\n",
+                len, *lenp, *buf);
        return 1;
 }