Um pequeno programa de teste para obter alguns campos de uma declaração.
[cascardo/libreceita.git] / rnet_message.c
index 52edf14..95d8b41 100644 (file)
@@ -1,5 +1,6 @@
 /*
  *  Copyright (C) 2013  Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
+ *  Copyright (C) 2014  Alexandre Oliva <lxoliva@fsfla.org>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -58,14 +59,23 @@ 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)
 {
        int n = 0;
        char *buffer;
        struct rnet_message *msg = *message;
-       if ((msg->alen - msg->len) < (klen + vlen + 3)) {
-               if (rnet_message_expand(message, MAX(msg->len, klen + vlen + 3)))
+       if ((msg->alen - msg->len) < (size_t) (klen + vlen + 3)) {
+               if (rnet_message_expand(message, MAX(msg->len, (size_t) (klen + vlen + 3))))
                        return -ENOMEM;
                msg = *message;
        }
@@ -137,28 +147,25 @@ int rnet_message_parse(struct rnet_message *msg, char *skey,
 {
        char * buffer = msg->buffer;
        size_t len = msg->len;
-       int i = 0;
+       unsigned int i = 0;
        unsigned int j;
        int b;
        char *key;
-       int klen;
-       char *kcopy;
+       unsigned int klen;
        /* skip first byte */
        i++;
        while (i < len) {
-               j = buffer[i];
+               j = (unsigned char)buffer[i];
                b = j & 0x80;
-               if (b)
-                       ;
                j = j & 0x7f;
                i++;
                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;