From 76047bed25ea5a9f32f5ec03ff627c9f703266d0 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Fri, 26 Mar 2021 10:52:35 +0100 Subject: [PATCH] Cleaned up clipboard file fd handling --- winpr/libwinpr/clipboard/posix.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/winpr/libwinpr/clipboard/posix.c b/winpr/libwinpr/clipboard/posix.c index e46269ba6..5862642e9 100644 --- a/winpr/libwinpr/clipboard/posix.c +++ b/winpr/libwinpr/clipboard/posix.c @@ -95,6 +95,7 @@ error: free(file); return NULL; } +static UINT posix_file_read_close(struct posix_file* file, BOOL force); static void free_posix_file(void* the_file) { @@ -103,14 +104,7 @@ static void free_posix_file(void* the_file) if (!file) return; - if (file->fd >= 0) - { - if (close(file->fd) < 0) - { - int err = errno; - WLog_WARN(TAG, "failed to close fd %d: %s", file->fd, strerror(err)); - } - } + posix_file_read_close(file, TRUE); free(file->local_name); free(file->remote_name); @@ -1017,12 +1011,12 @@ error: return ERROR_READ_FAULT; } -static UINT posix_file_read_close(struct posix_file* file) +UINT posix_file_read_close(struct posix_file* file, BOOL force) { if (file->fd < 0) return NO_ERROR; - if (file->offset == file->size) + if ((file->offset >= file->size) || force) { WLog_VRB(TAG, "close file %d", file->fd); @@ -1057,12 +1051,9 @@ static UINT posix_file_get_range(struct posix_file* file, UINT64 offset, UINT32 if (error) goto out; - error = posix_file_read_close(file); - - if (error) - goto out; - out: + + posix_file_read_close(file, FALSE); return error; }