summaryrefslogtreecommitdiffstats
path: root/sys/syscall_initrd_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/syscall_initrd_file.c')
-rw-r--r--sys/syscall_initrd_file.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/syscall_initrd_file.c b/sys/syscall_initrd_file.c
index 8e34488..904039d 100644
--- a/sys/syscall_initrd_file.c
+++ b/sys/syscall_initrd_file.c
@@ -8,16 +8,17 @@
int
s_syscall_initrd_file_name(
jove_owned_obj_t *initrd_file,
- jove_owned_obj_t *message)
+ jove_owned_obj_t *message,
+ void *message_data)
{
const char *filename = initrd_file_name(initrd_file);
size_t filename_len = strlen(filename);
- size_t bytes_left = message_len(message);
+ size_t bytes_left = 0x1000;
size_t bytes_needed = filename_len + sizeof(struct syscall_initrd_file_name_ret);
CHECK_TOOSMALL(bytes_needed, bytes_left, "Message is too small for file name.");
- struct syscall_initrd_file_name_ret *payload = message_data(message);
+ struct syscall_initrd_file_name_ret *payload = message_data;
payload->len = filename_len;
memcpy(payload->c_str, filename, filename_len);
@@ -34,6 +35,7 @@ int
s_syscall_initrd_file_read(
jove_owned_obj_t *initrd_file,
jove_owned_obj_t *message,
+ void *message_data,
size_t bytes_left,
void *payload_data)
{
@@ -44,7 +46,7 @@ s_syscall_initrd_file_read(
struct syscall_initrd_file_read *payload = payload_data;
bytes_needed = payload->read_size;
- bytes_left = message_len(message);
+ bytes_left = 0x1000;
//Ensure that the message is big enough to hold the read file data.
CHECK_TOOSMALL(bytes_needed, bytes_left,
@@ -67,8 +69,7 @@ s_syscall_initrd_file_read(
return -ETOOBIG;
}
- void *read_data = message_data(message);
- memcpy(read_data, file_data + payload->start_index, payload->read_size);
+ memcpy(message_data, file_data + payload->start_index, payload->read_size);
return 0;
}
@@ -79,7 +80,7 @@ _syscall_handle_initrd_file(syscall_context_t *ctx)
case SYSCALL_INITRD_FILE_NAME:
if(ctx->target.permissions & SYSCALL_PERM_INITRD_FILE_NAME)
return s_syscall_initrd_file_name(
- ctx->target.obj, ctx->message.obj);
+ ctx->target.obj, ctx->message.obj, (void*)ctx->header);
return -EPERM;
case SYSCALL_INITRD_FILE_SIZE:
@@ -90,7 +91,7 @@ _syscall_handle_initrd_file(syscall_context_t *ctx)
case SYSCALL_INITRD_FILE_READ:
if(ctx->target.permissions & SYSCALL_PERM_INITRD_FILE_READ)
return s_syscall_initrd_file_read(
- ctx->target.obj, ctx->message.obj, ctx->bytes_left, ctx->payload);
+ ctx->target.obj, ctx->message.obj, (void*)ctx->header, ctx->bytes_left, ctx->payload);
return -EPERM;
default:
return -EBADCALL;