Change bug report address to softwares-impostos@fsfla.org.
[cascardo/libreceita.git] / rnet_message.c
index 52edf14..83a762b 100644 (file)
@@ -58,6 +58,15 @@ void rnet_message_del(struct rnet_message *message)
        free(message);
 }
 
+int rnet_message_strip(struct rnet_message *message, size_t len)
+{
+       if (len > message->len)
+               return -1;
+       message->len -= len;
+       memmove(message->buffer, message->buffer + len, message->len);
+       return 0;
+}
+
 static int add_field(struct rnet_message **message, char *key, int klen,
                                                char *val, int vlen)
 {
@@ -142,11 +151,10 @@ int rnet_message_parse(struct rnet_message *msg, char *skey,
        int b;
        char *key;
        int klen;
-       char *kcopy;
        /* skip first byte */
        i++;
        while (i < len) {
-               j = buffer[i];
+               j = (unsigned char)buffer[i];
                b = j & 0x80;
                if (b)
                        ;
@@ -155,10 +163,10 @@ int rnet_message_parse(struct rnet_message *msg, char *skey,
                key = buffer + i;
                klen = j;
                i += j;
-               j = buffer[i];
+               j = (unsigned char)buffer[i];
                i++;
                if (b)
-                       j = j << 8 | buffer[i++];
+                       j = j << 8 | (unsigned char)buffer[i++];
                *value = buffer + i;
                *vlen = j;
                i += j;