projects
/
cascardo
/
rnetclient.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add .dir-locals.el
[cascardo/rnetclient.git]
/
rnet_message.c
diff --git
a/rnet_message.c
b/rnet_message.c
index
52edf14
..
95d8b41
100644
(file)
--- a/
rnet_message.c
+++ b/
rnet_message.c
@@
-1,5
+1,6
@@
/*
* Copyright (C) 2013 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
/*
* 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
*
* 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);
}
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;
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;
}
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;
{
char * buffer = msg->buffer;
size_t len = msg->len;
- int i = 0;
+
unsigned
int i = 0;
unsigned int j;
int b;
char *key;
unsigned int j;
int b;
char *key;
- int klen;
- char *kcopy;
+ unsigned int klen;
/* skip first byte */
i++;
while (i < len) {
/* skip first byte */
i++;
while (i < len) {
- j = buffer[i];
+ j =
(unsigned char)
buffer[i];
b = j & 0x80;
b = j & 0x80;
- if (b)
- ;
j = j & 0x7f;
i++;
key = buffer + i;
klen = j;
i += j;
j = j & 0x7f;
i++;
key = buffer + i;
klen = j;
i += j;
- j = buffer[i];
+ j =
(unsigned char)
buffer[i];
i++;
if (b)
i++;
if (b)
- j = j << 8 | buffer[i++];
+ j = j << 8 |
(unsigned char)
buffer[i++];
*value = buffer + i;
*vlen = j;
i += j;
*value = buffer + i;
*vlen = j;
i += j;