fix typo in pt.po headers
[debian/iodine.git] / src / read.c
index 299bc3e3c5106338aa9a3dc7794823e5c15c2529..a2dcd96ebcdb2d97c943b8c50247a5e4cee8d73d 100644 (file)
@@ -1,5 +1,6 @@
 /*
 /*
- * Copyright (c) 2006-2007 Bjorn Andersson <flex@kryo.se>, Erik Ekman <yarrick@kryo.se>
+ * Copyright (c) 2006-2014 Erik Ekman <yarrick@kryo.se>,
+ * 2006-2009 Bjorn Andersson <flex@kryo.se>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -60,7 +61,7 @@ readname_loop(char *packet, int packetlen, char **src, char *dst, size_t length,
 
                        c--;
                }
 
                        c--;
                }
-               
+
                if (len >= length - 1) {
                        break; /* We used up all space */
                }
                if (len >= length - 1) {
                        break; /* We used up all space */
                }
@@ -84,15 +85,15 @@ readname(char *packet, int packetlen, char **src, char *dst, size_t length)
 }
 
 int
 }
 
 int
-readshort(char *packet, char **src, short *dst)
+readshort(char *packet, char **src, unsigned short *dst)
 {
        unsigned char *p;
 
        p = (unsigned char *) *src;
        *dst = (p[0] << 8) | p[1];
 
 {
        unsigned char *p;
 
        p = (unsigned char *) *src;
        *dst = (p[0] << 8) | p[1];
 
-       (*src) += sizeof(short);
-       return sizeof(short);
+       (*src) += sizeof(unsigned short);
+       return sizeof(unsigned short);
 }
 
 int
 }
 
 int
@@ -103,8 +104,8 @@ readlong(char *packet, char **src, uint32_t *dst)
 
        p = (unsigned char *) *src;
 
 
        p = (unsigned char *) *src;
 
-       *dst = ((uint32_t)p[0] << 24) 
-                | ((uint32_t)p[1] << 16) 
+       *dst = ((uint32_t)p[0] << 24)
+                | ((uint32_t)p[1] << 16)
                 | ((uint32_t)p[2] << 8)
                 | ((uint32_t)p[3]);
 
                 | ((uint32_t)p[2] << 8)
                 | ((uint32_t)p[3]);
 
@@ -115,9 +116,6 @@ readlong(char *packet, char **src, uint32_t *dst)
 int
 readdata(char *packet, char **src, char *dst, size_t len)
 {
 int
 readdata(char *packet, char **src, char *dst, size_t len)
 {
-       if (len < 0)
-               return 0;
-
        memcpy(dst, *src, len);
 
        (*src) += len;
        memcpy(dst, *src, len);
 
        (*src) += len;
@@ -125,6 +123,35 @@ readdata(char *packet, char **src, char *dst, size_t len)
        return len;
 }
 
        return len;
 }
 
+int
+readtxtbin(char *packet, char **src, size_t srcremain, char *dst, size_t dstremain)
+{
+       unsigned char *uc;
+       int tocopy;
+       int dstused = 0;
+
+       while (srcremain > 0)
+       {
+               uc = (unsigned char*) (*src);
+               tocopy = *uc;
+               (*src)++;
+               srcremain--;
+
+               if (tocopy > srcremain)
+                       return 0;       /* illegal, better have nothing */
+               if (tocopy > dstremain)
+                       return 0;       /* doesn't fit, better have nothing */
+
+               memcpy(dst, *src, tocopy);
+               dst += tocopy;
+               (*src) += tocopy;
+               srcremain -= tocopy;
+               dstremain -= tocopy;
+               dstused += tocopy;
+       }
+       return dstused;
+}
+
 int
 putname(char **buf, size_t buflen, const char *host)
 {
 int
 putname(char **buf, size_t buflen, const char *host)
 {
@@ -136,7 +163,7 @@ putname(char **buf, size_t buflen, const char *host)
        h = strdup(host);
        left = buflen;
        p = *buf;
        h = strdup(host);
        left = buflen;
        p = *buf;
-       
+
        word = strtok(h, ".");
        while(word) {
                if (strlen(word) > 63 || strlen(word) > left) {
        word = strtok(h, ".");
        while(word) {
                if (strlen(word) > 63 || strlen(word) > left) {
@@ -203,12 +230,41 @@ putlong(char **dst, uint32_t value)
 int
 putdata(char **dst, char *data, size_t len)
 {
 int
 putdata(char **dst, char *data, size_t len)
 {
-       if (len < 0)
-               return 0;
-
        memcpy(*dst, data, len);
        memcpy(*dst, data, len);
-       
+
        (*dst) += len;
        return len;
 }
 
        (*dst) += len;
        return len;
 }
 
+int
+puttxtbin(char **buf, size_t bufremain, char *from, size_t fromremain)
+{
+       unsigned char uc;
+       unsigned char *ucp = &uc;
+       char *cp = (char *) ucp;
+       int tocopy;
+       int bufused = 0;
+
+       while (fromremain > 0)
+       {
+               tocopy = fromremain;
+               if (tocopy > 252)
+                       tocopy = 252;   /* allow off-by-1s in caches etc */
+               if (tocopy + 1 > bufremain)
+                       return -1;      /* doesn't fit, better have nothing */
+
+               uc = tocopy;
+               **buf = *cp;
+               (*buf)++;
+               bufremain--;
+               bufused++;
+
+               memcpy(*buf, from, tocopy);
+               (*buf) += tocopy;
+               from += tocopy;
+               bufremain -= tocopy;
+               fromremain -= tocopy;
+               bufused += tocopy;
+       }
+       return bufused;
+}