优化ipc结构,非常精简
This commit is contained in:
@@ -34,7 +34,7 @@ static void log_reg(void)
|
||||
INIT_KOBJ(log_reg);
|
||||
static msg_tag_t log_write_data(log_t *log, const char *data, int len)
|
||||
{
|
||||
for (int i = 0; i < len; i++)
|
||||
for (int i = 0; i < len && data[i]; i++)
|
||||
{
|
||||
putc(data[i]);
|
||||
}
|
||||
@@ -43,10 +43,10 @@ static msg_tag_t log_write_data(log_t *log, const char *data, int len)
|
||||
static void
|
||||
log_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame_t *f)
|
||||
{
|
||||
msg_tag_t tag = msg_tag_init3(0, 0, -EINVAL);
|
||||
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EINVAL);
|
||||
if (sys_p.prot != LOG_PROT)
|
||||
{
|
||||
f->r[0] = msg_tag_init3(0, 0, -EPROTO).raw;
|
||||
f->r[0] = msg_tag_init4(0, 0, 0, -EPROTO).raw;
|
||||
return;
|
||||
}
|
||||
switch (sys_p.op)
|
||||
@@ -54,7 +54,7 @@ log_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame
|
||||
case WRITE_DATA:
|
||||
tag = log_write_data(
|
||||
(log_t *)kobj, (const char *)(&f->r[1]),
|
||||
MIN(ipc_type_create(in_tag.type2).msg_buf_len, WORD_BYTES * 5));
|
||||
MIN(in_tag.msg_buf_len * WORD_BYTES, WORD_BYTES * 5));
|
||||
break;
|
||||
case READ_DATA:
|
||||
printk("don't support read data.\n");
|
||||
@@ -63,7 +63,7 @@ log_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame
|
||||
printk("don't support set flags.\n");
|
||||
break;
|
||||
default:
|
||||
tag = msg_tag_init3(0, 0, -ENOSYS);
|
||||
tag = msg_tag_init4(0, 0, 0, -ENOSYS);
|
||||
break;
|
||||
}
|
||||
f->r[0] = tag.raw;
|
||||
|
||||
Reference in New Issue
Block a user