Fix integer signedness and fd size confusion

dev
Kristian Høgsberg 14 years ago
parent f821f5ad93
commit 4f14f6e109
  1. 29
      connection.c

@ -222,7 +222,7 @@ close_fds(struct wl_buffer *buffer)
return;
wl_buffer_copy(buffer, fds, size);
count = size / 4;
count = size / sizeof fds[0];
for (i = 0; i < count; i++)
close(fds[i]);
buffer->tail += size;
@ -340,7 +340,7 @@ wl_connection_vmarshal(struct wl_connection *connection,
struct wl_closure *closure = &connection->closure;
struct wl_object *object;
uint32_t length, *p, size;
int32_t dup_fd;
int dup_fd;
struct wl_array *array;
const char *s;
int i, count, fd;
@ -350,9 +350,11 @@ wl_connection_vmarshal(struct wl_connection *connection,
for (i = 0; i < count; i++) {
switch (message->signature[i]) {
case 'u':
case 'i':
*p++ = va_arg(ap, uint32_t);
break;
case 'i':
*p++ = va_arg(ap, int32_t);
break;
case 's':
s = va_arg(ap, const char *);
length = s ? strlen(s) + 1: 0;
@ -428,7 +430,8 @@ wl_connection_demarshal(struct wl_connection *connection,
struct wl_hash_table *objects,
const struct wl_message *message)
{
uint32_t *p, *next, *end, length, *uint;
uint32_t *p, *next, *end, length;
int *fd;
char *extra, **s;
int i, count, extra_space;
struct wl_object **object;
@ -466,10 +469,13 @@ wl_connection_demarshal(struct wl_connection *connection,
switch (message->signature[i - 2]) {
case 'u':
case 'i':
closure->types[i] = &ffi_type_uint32;
closure->args[i] = p++;
break;
case 'i':
closure->types[i] = &ffi_type_sint32;
closure->args[i] = p++;
break;
case 's':
closure->types[i] = &ffi_type_pointer;
length = *p++;
@ -557,15 +563,14 @@ wl_connection_demarshal(struct wl_connection *connection,
p = next;
break;
case 'h':
closure->types[i] = &ffi_type_uint32;
closure->types[i] = &ffi_type_sint;
uint = (uint32_t *) extra;
extra += sizeof *uint;
closure->args[i] = uint;
fd = (int *) extra;
extra += sizeof *fd;
closure->args[i] = fd;
wl_buffer_copy(&connection->fds_in,
uint, sizeof *uint);
connection->fds_in.tail += sizeof *uint;
wl_buffer_copy(&connection->fds_in, fd, sizeof *fd);
connection->fds_in.tail += sizeof *fd;
break;
default:
printf("unknown type\n");

Loading…
Cancel
Save