* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#define _GNU_SOURCE
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
deflateEnd(&zstrm);
return -1;
}
- zstrm.next_in = buffer;
+ zstrm.next_in = (z_const Bytef *) buffer;
zstrm.avail_in = len;
- zstrm.next_out = *out + 6;
+ zstrm.next_out = (Bytef *) *out + 6;
zstrm.avail_out = len * 2 + 30;
while ((r = deflate(&zstrm, Z_FINISH)) != Z_STREAM_END &&
zstrm.avail_out > 0);
zstrm.opaque = Z_NULL;
if ((r = inflateInit(&zstrm)) != Z_OK)
return -1;
- *olen = chars2len(buffer+3);
+ *olen = chars2len((unsigned char *) buffer+3);
*out = malloc(*olen);
if (!out) {
inflateEnd(&zstrm);
return -1;
}
- zstrm.next_in = buffer + 6;
+ zstrm.next_in = (z_const Bytef *) buffer + 6;
zstrm.avail_in = len - 6;
- zstrm.next_out = *out;
+ zstrm.next_out = (Bytef *) *out;
zstrm.avail_out = *olen;
while ((r = inflate(&zstrm, Z_FINISH)) != Z_STREAM_END &&
zstrm.avail_out > 0);
struct addrinfo *addresses;
struct addrinfo *addr;
struct addrinfo hint;
- struct sockaddr_in saddr;
int r;
int fd = *c = -1;
- int i;
memset(&hint, 0, sizeof(hint));
hint.ai_family = AF_UNSPEC;
hint.ai_socktype = SOCK_STREAM;
This chunk size worked at the first try, uploading a
~100KiB file, so let's stick with it. */
- const int maxc = 64472;
+ const unsigned int maxc = 64472;
if (header && len > maxc)
return -1;
static int rnet_recv(gnutls_session_t session, struct rnet_message **message)
{
- char *out;
- size_t olen;
- int r;
+ char *out = NULL;
+ size_t olen = 0;
char *buffer;
size_t len;
rnet_message_expand(message, 6);
buffer = (*message)->buffer;
- r = gnutls_record_recv(session, buffer, 6);
+ gnutls_record_recv(session, buffer, 6);
if (buffer[0] == 0x01) {
- len = chars2len(buffer+1);
+ len = chars2len((unsigned char *) buffer+1);
rnet_message_expand(message, len);
buffer = (*message)->buffer + 6;
- r = gnutls_record_recv(session, buffer, len);
+ gnutls_record_recv(session, buffer, len);
inflateRecord(buffer - 6, len + 6, &out, &olen);
rnet_message_del(*message);
*message = NULL;
(*message)->len = olen;
free(out);
} else {
- len = chars2len(buffer+1);
+ len = chars2len((unsigned char *) buffer+1);
rnet_message_expand(message, len - 1);
buffer = (*message)->buffer + 6;
- r = gnutls_record_recv(session, buffer, len - 1);
+ gnutls_record_recv(session, buffer, len - 1);
(*message)->len = len + 4;
rnet_message_strip(*message, 4);
}
int fd;
char cwd[PATH_MAX];
char *path, *fname, *tmp;
- size_t fname_len, r;
+ size_t fname_len;
+ ssize_t r;
/* If the user provided the output directory where she wishes
to save the receipt, then we use it. Otherwise, we save
the file in the current working directory (CWD). */
the receipt with the name "$CPF.REC". */
tmp = strstr(args->input_file, ".DEC");
if (tmp != NULL && tmp[sizeof(".DEC") - 1] == '\0') {
- const char *p;
+ char *p;
/* We found the ".REC" extension. */
- p = strdup(args->input_file);
+ p = strdup(basename(args->input_file));
/* Replacing the ".DEC" by ".REC". Fortunately, we
just have to change one letter. */
tmp = strstr(p, ".DEC");
fname_len = strlen(p) + strlen(path) + 2;
fname = alloca(fname_len);
snprintf(fname, fname_len, "%s/%s", path, p);
+ free(p);
} else {
/* The declaration filename does not follow the
convention, so we will not use it as a template.
}
do {
r = write(fd, buffer, len);
- } while (r != len && errno == EAGAIN);
+ } while (r < 0 && errno == EAGAIN);
if (r != len)
fprintf(stderr, "Could not write to receipt file: %s", strerror(errno));
else
fprintf(stderr, "error in handshake: %s\n",
gnutls_strerror(r));
- rnet_encode(decfile, &message);
+ r = rnet_encode(decfile, &message);
+ if (r < 0) {
+ fprintf(stderr, "error encoding message, file not supported?\n");
+ goto out;
+ }
+
rnet_send(session, message->buffer, message->len, 1);
rnet_message_del(message);