From e6d02b3a8b82e3ee22db243932162b85ebc9e893 Mon Sep 17 00:00:00 2001 From: beveloper Date: Wed, 11 Sep 2002 12:25:47 +0000 Subject: [PATCH] fixed a few bugs git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1013 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/core/port.c | 45 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/kernel/core/port.c b/src/kernel/core/port.c index a13d40369a..1c83bb10bb 100644 --- a/src/kernel/core/port.c +++ b/src/kernel/core/port.c @@ -170,40 +170,42 @@ create_port(int32 queue_length, const char *name) int state; sem_id sem_r, sem_w; port_id retval; + int name_len; char *temp_name; - void *q; + struct port_msg *q; team_id owner; if (ports_active == false) return B_BAD_PORT_ID; - // check & dup name - if (name) { - int name_len = strlen(name); - - temp_name = (char *)kmalloc(min(name_len + 1, SYS_MAX_OS_NAME_LEN)); - if(temp_name == NULL) - return ENOMEM; - strncpy(temp_name, name, SYS_MAX_OS_NAME_LEN-1); - temp_name[SYS_MAX_OS_NAME_LEN-1] = 0; - } else { - temp_name = (char *)kmalloc(sizeof("default_port_name")+1); - if(temp_name == NULL) - return ENOMEM; - strcpy(temp_name, "default_port_name"); - } - - // check queue length & alloc + // check queue length if (queue_length < 1) return EINVAL; if (queue_length > MAX_QUEUE_LENGTH) return EINVAL; - q = (void *)kmalloc( queue_length * sizeof(struct port_msg) ); + + // check & dup name + if (name == NULL) + name = "unnamed port"; + + name_len = strlen(name) + 1; + name_len = min(name_len, SYS_MAX_OS_NAME_LEN); + temp_name = (char *)kmalloc(name_len); + if (temp_name == NULL) + return ENOMEM; + strlcpy(temp_name, name, name_len); + + // alloc queue + q = (struct port_msg *)kmalloc( queue_length * sizeof(struct port_msg) ); if (q == NULL) { kfree(temp_name); // dealloc name, too return ENOMEM; } + // init cbuf list of the queue + for (i=0; i