From patchwork Fri Jan 15 16:04:22 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 8042891 Return-Path: X-Original-To: patchwork-qemu-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id E6D8E9F716 for ; Fri, 15 Jan 2016 16:06:52 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 303ED2041A for ; Fri, 15 Jan 2016 16:06:52 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6028B2040F for ; Fri, 15 Jan 2016 16:06:51 +0000 (UTC) Received: from localhost ([::1]:47791 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK6tm-0002lL-N5 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 15 Jan 2016 11:06:50 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59096) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK6rr-0007kv-ER for qemu-devel@nongnu.org; Fri, 15 Jan 2016 11:04:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aK6rl-0003IP-Ff for qemu-devel@nongnu.org; Fri, 15 Jan 2016 11:04:51 -0500 Received: from mail-wm0-x22b.google.com ([2a00:1450:400c:c09::22b]:35781) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK6rl-0003IF-5Z for qemu-devel@nongnu.org; Fri, 15 Jan 2016 11:04:45 -0500 Received: by mail-wm0-x22b.google.com with SMTP id f206so26183608wmf.0 for ; Fri, 15 Jan 2016 08:04:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=eyJ2QIZ9kjY/5/J6X8iwExBzvGmYb2EW+ge3ljiMpcc=; b=RJRrgZj2NaWI2+G/BSGfMg6PBLICTYtmG3VAqKhYwMjJL9KFrfZ3wkR22cRZyiAwEe dZzzaXOb4b1iH+hh6nnc5JKp3SKrMj9oLZTErOxsTwokrZiWszgvTWrNdNEsnIsBtAC6 ZA3f1NJV5FE5JEU01mDH21NBrFjuAIbnttyUHol7us2fvBsBf/kfR1yh+GQuCYDoZkT8 k0CfWxhQ0NdelZ2EFpJ/oV+VOYPey/R80dxJdkiSFAg2UEijcWcagQNRxgFBBM0hRq6+ cVH7qotPNwuDBMiIw01W7wlaOO9vWeXI2RIzvUZoPGV/Z5X1GpuRiwY3xk7Z/itHAthZ 2rEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=eyJ2QIZ9kjY/5/J6X8iwExBzvGmYb2EW+ge3ljiMpcc=; b=d9JG+uEHZTB5euUvPRZuWJW+bNZjqkf6GGFfIdNLhuWvU58OaZAIbUYjK/6gpqydpO jD63wwfPHoWDZHWCxEP14YZhDMYUKHJJWoepFujR/lwzeXhrvx4DE0XQVdHjsasf8qEO jD3OIKiKs9OvaQu6qLANr/xv3EDSIz9c7FbGINwsTWI5NrEDz369QeU60rUnfhvKYTLH JfY7193En7M6HwT96wR5W/r1/vUMv2B2aZDd0zE0QmFvBOBpDh4YlilLnrsKDrvdpna1 68KPlE5qYzAbZrk/Vr32OCE3/jMdYfstKb7M1zstpwcTewckDr5Uy9tMcuLdeJYYg39f yJAA== X-Gm-Message-State: AG10YOTW1/10tqaN21uzcyaX+1OB/2mPFnKPlQOACiWl4hAe4SDhF5k0vdfRaL94efPIuA== X-Received: by 10.28.175.209 with SMTP id y200mr4069246wme.70.1452873884547; Fri, 15 Jan 2016 08:04:44 -0800 (PST) Received: from 640k.lan (94-39-195-126.adsl-ull.clienti.tiscali.it. [94.39.195.126]) by smtp.gmail.com with ESMTPSA id c15sm3103036wmd.19.2016.01.15.08.04.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Jan 2016 08:04:43 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 15 Jan 2016 17:04:22 +0100 Message-Id: <1452873871-138914-8-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1452873871-138914-1-git-send-email-pbonzini@redhat.com> References: <1452873871-138914-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::22b Subject: [Qemu-devel] [PULL 06/15] qemu-char: delete send_all/recv_all helper methods X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: "Daniel P. Berrange" The qemu-char.c contains two helper methods send_all and recv_all. These are in fact declared in sockets.h so ought to have been in util/qemu-sockets.c. For added fun the impl of recv_all is completely missing on Win32. Fortunately there is only a single caller of these methods, the TPM passthrough code, which is only ever compiled on Linux. With only a single caller these helpers are not compelling enough to keep so inline them in the TPM code, avoiding the need to fix the missing recv_all on Win32. Signed-off-by: Daniel P. Berrange Message-Id: <1450879144-17111-1-git-send-email-berrange@redhat.com> Signed-off-by: Paolo Bonzini --- hw/tpm/tpm_passthrough.c | 29 ++++++++++++++++++-- include/qemu/sockets.h | 2 -- qemu-char.c | 71 ------------------------------------------------ 3 files changed, 27 insertions(+), 75 deletions(-) diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c index be160c1..ab526db 100644 --- a/hw/tpm/tpm_passthrough.c +++ b/hw/tpm/tpm_passthrough.c @@ -83,12 +83,37 @@ static void tpm_passthrough_cancel_cmd(TPMBackend *tb); static int tpm_passthrough_unix_write(int fd, const uint8_t *buf, uint32_t len) { - return send_all(fd, buf, len); + int ret, remain; + + remain = len; + while (len > 0) { + ret = write(fd, buf, remain); + if (ret < 0) { + if (errno != EINTR && errno != EAGAIN) { + return -1; + } + } else if (ret == 0) { + break; + } else { + buf += ret; + remain -= ret; + } + } + return len - remain; } static int tpm_passthrough_unix_read(int fd, uint8_t *buf, uint32_t len) { - return recv_all(fd, buf, len, true); + int ret; + reread: + ret = read(fd, buf, len); + if (ret < 0) { + if (errno != EINTR && errno != EAGAIN) { + return -1; + } + goto reread; + } + return ret; } static uint32_t tpm_passthrough_get_size_from_buffer(const uint8_t *buf) diff --git a/include/qemu/sockets.h b/include/qemu/sockets.h index 2e7f985..c1a81fa 100644 --- a/include/qemu/sockets.h +++ b/include/qemu/sockets.h @@ -40,8 +40,6 @@ int socket_set_nodelay(int fd); void qemu_set_block(int fd); void qemu_set_nonblock(int fd); int socket_set_fast_reuse(int fd); -int send_all(int fd, const void *buf, int len1); -int recv_all(int fd, void *buf, int len1, bool single_read); #ifdef WIN32 /* Windows has different names for the same constants with the same values */ diff --git a/qemu-char.c b/qemu-char.c index 00a7526..d7be185 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -696,77 +696,6 @@ static CharDriverState *qemu_chr_open_mux(const char *id, } -#ifdef _WIN32 -int send_all(int fd, const void *buf, int len1) -{ - int ret, len; - - len = len1; - while (len > 0) { - ret = send(fd, buf, len, 0); - if (ret < 0) { - errno = WSAGetLastError(); - if (errno != WSAEWOULDBLOCK) { - return -1; - } - } else if (ret == 0) { - break; - } else { - buf += ret; - len -= ret; - } - } - return len1 - len; -} - -#else - -int send_all(int fd, const void *_buf, int len1) -{ - int ret, len; - const uint8_t *buf = _buf; - - len = len1; - while (len > 0) { - ret = write(fd, buf, len); - if (ret < 0) { - if (errno != EINTR && errno != EAGAIN) - return -1; - } else if (ret == 0) { - break; - } else { - buf += ret; - len -= ret; - } - } - return len1 - len; -} - -int recv_all(int fd, void *_buf, int len1, bool single_read) -{ - int ret, len; - uint8_t *buf = _buf; - - len = len1; - while ((len > 0) && (ret = read(fd, buf, len)) != 0) { - if (ret < 0) { - if (errno != EINTR && errno != EAGAIN) { - return -1; - } - continue; - } else { - if (single_read) { - return ret; - } - buf += ret; - len -= ret; - } - } - return len1 - len; -} - -#endif /* !_WIN32 */ - typedef struct IOWatchPoll { GSource parent;