From c5a3ed4fb1b56a2bdb1182f2a04e82c0decf3618 Mon Sep 17 00:00:00 2001 From: JerryH Date: Wed, 2 Mar 2022 14:23:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E6=A3=80=E8=A7=86?= =?UTF-8?q?=E5=87=BA=E6=9D=A5=E7=9A=84=E4=BB=A3=E7=A0=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit close #I4VY0A Signed-off-by: JerryH Change-Id: I3bc2d3da95ecae53b3d124d086b8296ea4608d3a --- kal/posix/src/pipe.c | 33 +++++++++++++++++---------------- kal/posix/src/poll.c | 4 ++++ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/kal/posix/src/pipe.c b/kal/posix/src/pipe.c index 0aa10a8d..a5d59a73 100644 --- a/kal/posix/src/pipe.c +++ b/kal/posix/src/pipe.c @@ -174,7 +174,7 @@ STATIC size_t PipeRingbufferRead(struct PipeDev *dev, VOID *buf, size_t len) } } nbytes = (nbytes > len) ? len : nbytes; - (VOID)memcpy_s((char *)buf, len, dev->ringBuffer + dev->readIndex, nbytes); + (VOID)memcpy_s(buf, len, dev->ringBuffer + dev->readIndex, nbytes); dev->readIndex += nbytes; if (dev->readIndex >= dev->bufferSize) { dev->readIndex = 0; @@ -184,7 +184,7 @@ STATIC size_t PipeRingbufferRead(struct PipeDev *dev, VOID *buf, size_t len) return nbytes; } -STATIC size_t PipeRingbufferWrite(struct PipeDev *dev, VOID *buf, size_t len) +STATIC size_t PipeRingbufferWrite(struct PipeDev *dev, const VOID *buf, size_t len) { size_t nbytes; @@ -220,7 +220,6 @@ STATIC INT32 PipeDevRegister(CHAR *devName, UINT32 len) return -ENODEV; } - struct PipeDev *devTemp = NULL; struct PipeDev *dev = LOS_MemAlloc(OS_SYS_MEM_ADDR, sizeof(struct PipeDev)); if (dev == NULL) { ret = -ENOMEM; @@ -230,7 +229,7 @@ STATIC INT32 PipeDevRegister(CHAR *devName, UINT32 len) (VOID)snprintf_s(dev->devName, PIPE_DEV_NAME_MAX, PIPE_DEV_NAME_MAX - 1, "%s%d", PIPE_DEV_PATH, num); (VOID)memcpy_s(devName, len, dev->devName, strlen(dev->devName)); - devTemp = PipeDevFind(dev->devName); + struct PipeDev *devTemp = PipeDevFind(dev->devName); if (devTemp != NULL) { ret = -EEXIST; goto ERROR; @@ -389,22 +388,15 @@ INT32 PipeOpen(const CHAR *path, INT32 openFlag, INT32 minFd) dev->ringBuffer = LOS_MemAlloc(OS_SYS_MEM_ADDR, PIPE_DEV_BUF_SIZE); if (dev->ringBuffer == NULL) { PIPE_DEV_UNLOCK(dev->mutex); + PipeDevFdFree(fd); errno = ENOMEM; - goto ERROR; + return -1; } dev->bufferSize = PIPE_DEV_BUF_SIZE; } PIPE_DEV_UNLOCK(dev->mutex); return (fd + minFd); -ERROR: - if (dev->ringBuffer != NULL) { - (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dev->ringBuffer); - dev->ringBuffer = NULL; - } - - PipeDevFdFree(fd); - return -1; } STATIC INLINE struct PipeFdDev *PipeFdDevGet(INT32 fd) @@ -448,9 +440,7 @@ INT32 PipeClose(INT32 fd) PIPE_DEV_LOCK(dev->mutex); if (openFlag == O_RDONLY) { dev->readerCnt--; - } - - if (openFlag == O_WRONLY) { + } else if (openFlag == O_WRONLY) { dev->writerCnt--; } @@ -676,8 +666,19 @@ int pipe(int filedes[2]) return -1; } + struct PipeDev *dev = PipeDevFind(devName); filedes[0] = open(devName, O_RDONLY); + if (filedes[0] < 0) { + (VOID)PipeDevUnregister(dev); + return -1; + } + filedes[1] = open(devName, O_WRONLY); + if (filedes[1] < 0) { + (VOID)PipeDevUnregister(dev); + (VOID)close(filedes[0]); + return -1; + } return 0; } diff --git a/kal/posix/src/poll.c b/kal/posix/src/poll.c index 18c2fd94..2bf82e08 100644 --- a/kal/posix/src/poll.c +++ b/kal/posix/src/poll.c @@ -128,6 +128,10 @@ VOID PollNotify(struct PollWaitQueue *waitQueue, PollEvent event) UINT32 intSave; struct PollWaitNode *waitNode = NULL; + if (waitQueue == NULL) { + return; + } + intSave = LOS_IntLock(); LOS_DL_LIST_FOR_EACH_ENTRY(waitNode, &waitQueue->queue, struct PollWaitNode, node) { if (!event || (event & waitNode->table->event)) {