chiark / gitweb /
buffers: Introduce buf_remaining_space
[secnet.git] / util.c
diff --git a/util.c b/util.c
index 8c23485c059581cbb2aef2c1d8c40628dbaeecaa..de182a431445abdf34abc8b3f7dbf57f17ee919e 100644 (file)
--- a/util.c
+++ b/util.c
@@ -254,7 +254,7 @@ void buffer_init(struct buffer_if *buffer, int32_t max_start_pad)
 
 void *buf_append(struct buffer_if *buf, int32_t amount) {
     void *p;
-    assert(buf->size <= buf->len - amount);
+    assert(amount <= buf_remaining_space(buf));
     p=buf->start + buf->size;
     buf->size+=amount;
     return p;
@@ -394,7 +394,7 @@ void send_nak(const struct comm_addr *dest, uint32_t our_index,
     if (logwhy)
        Message(M_INFO,"%s: %08"PRIx32"<-%08"PRIx32": %08"PRIx32":"
                " %s; sending NAK\n",
-               dest->comm->addr_to_string(dest->comm->st,dest),
+               comm_addr_to_string(dest),
                our_index, their_index, msgtype, logwhy);
     dest->comm->sendmsg(dest->comm->st, buf, dest);
 }
@@ -435,3 +435,30 @@ int32_t calculate_max_start_pad(void)
        transform_max_start_pad +
        comm_max_start_pad;
 }
+
+void vslilog_part(struct log_if *lf, int priority, const char *message, va_list ap)
+{
+    char *buff=lf->buff;
+    size_t bp;
+    char *nlp;
+
+    bp=strlen(buff);
+    assert(bp < LOG_MESSAGE_BUFLEN);
+    vsnprintf(buff+bp,LOG_MESSAGE_BUFLEN-bp,message,ap);
+    buff[LOG_MESSAGE_BUFLEN-1] = '\n';
+    buff[LOG_MESSAGE_BUFLEN] = '\0';
+    /* Each line is sent separately */
+    while ((nlp=strchr(buff,'\n'))) {
+       *nlp=0;
+       slilog(lf,priority,"%s",buff);
+       memmove(buff,nlp+1,strlen(nlp+1)+1);
+    }
+}
+
+extern void slilog_part(struct log_if *lf, int priority, const char *message, ...)
+{
+    va_list ap;
+    va_start(ap,message);
+    vslilog_part(lf,priority,message,ap);
+    va_end(ap);
+}