From patchwork Sun Sep 10 10:07:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43674 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4e27:b0:149:dfde:5c0a with SMTP id gk39csp1518749pzb; Sun, 10 Sep 2023 03:21:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG/+lRyLDN4WLPy6bTzF3Yt09lh0ipWvQXtQTQ/3SC4r4VyeanHXRRkAnsn8I+WhWmUS4Mn X-Received: by 2002:a05:651c:102a:b0:2bb:b626:5044 with SMTP id w10-20020a05651c102a00b002bbb6265044mr5583209ljm.6.1694341262541; Sun, 10 Sep 2023 03:21:02 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ja8-20020a170907988800b00992ac6d8893si5249899ejc.792.2023.09.10.03.21.02; Sun, 10 Sep 2023 03:21:02 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=AZAoiUOh; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2C38968C8A1; Sun, 10 Sep 2023 13:20:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01olkn2077.outbound.protection.outlook.com [40.92.64.77]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 678DA68C6D5 for ; Sun, 10 Sep 2023 13:20:52 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JnnlB36GW/rfmOMncyjjWks2EsvtkYmwoLNZ5CeQswEhnF2evXV4gELNjIK8KVJoSViG2hkEq8VztP9AIRv8y1VuPovGTvM+oJeAY/kkjB0fJYtStEof1FU8meX1j1a9WRR1SWMrypNHcXGSf5kAF1IyDsAvebgEiJg/R8REf9vo3iDrwGLQsUaxjiDVjW04eB8N/Om7vTPU4c0qQvMcKBjY1qdRXCtLAgKWXquPjfHbv+rfO5yRtfeSb2V9at+KwPwZ9T8v0LRSItCLhZ0Uswm+EVbHKCQJJTFIgYEfuG7HSFB1U9JCuZX7uINt3vuSnP7AlJXP8zpFLvX31WoyOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6E5qMUn1COXCXWS1crFvx7OtIIO7KClHfz9MbakUoGo=; b=C665oeDx/BTk8lDMbrMLiiIwLGO57CKZOTrpasYMXGLsEZZu+DSLy+no/6KIRWsQ3otCQoYHqlj/GE3hIaq9DEmh6GWmIPDOULpK9OyXQHkX4ITK7vE56b1oud/gbpZ+0ZSt9wDunUzeDe0w3X9gUWByUBpT/H3N03zE9gVDYVbdaDtHFTrkG1VigLFlcoOp86OJXua7fm//liLuMIJzJop4H8vEu4wd8OjV+6q+Mm51fnsz6l7oCkc5MgfOHbv9K/pRz33Q+X/acfPh1qNcLiR1hO6Uk978nZvtEoTkJQjemaGFUgYLF/7Mk+3V0XnijRmn8mRmDeW40eqZLUtDoQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6E5qMUn1COXCXWS1crFvx7OtIIO7KClHfz9MbakUoGo=; b=AZAoiUOhJw1qmfU+W/xTMNnM9+CncNm28Ylc0zVv5lii0NHuk1R9cInm7CtCCL1rtnZwdxmy47AgCazJXEELuoRJxAhwd4ZUDsgUppikhqrZNLY92pf9aG+TUy/+Cy7WcXHnv2172Wzckuab7mHoRRQMm3eYXmgY65p2dE839ZNelu7ZSUJFhVxh+IkoXCTHQ6BVHGMf9+Xn8I9kg53U0+J2faYfsK/g9YzrmJelSNwOx7OdlSMl6xP+8iaYjJd17Dz97LNCqFPBMaxbYoYdPaBtosMSlV2/+cHMF3ZmbLaz6LTgg8W9YRo994O17g8WIo4Q5ytzFJIVEhkJ6ThjUA== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0305.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:17c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.34; Sun, 10 Sep 2023 10:05:49 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6768.029; Sun, 10 Sep 2023 10:05:49 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 10 Sep 2023 12:07:00 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: <7cf28856-6611-ab55-256-f834ea24bc5@passwd.hu> References: <7cf28856-6611-ab55-256-f834ea24bc5@passwd.hu> X-TMN: [RNsbj6cXfmELWS+tzmctJ82HRwsaCObh] X-ClientProxiedBy: FR0P281CA0212.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:ac::11) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230910100700.2528183-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PR3P250MB0305:EE_ X-MS-Office365-Filtering-Correlation-Id: d8318f9e-b0d1-47dc-3a0e-08dbb1e581e0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9+yebUdr/5DVArxA1OSxS37mNLj0NbtIOff224w6PKqmfiSGem0zuWvm3Dqx8fU6l/KBq860CFc017/Q99ltmzDapiUAIEoPeAY3SEPBfTntVj+xlnsN7mteeQU8uRystu3MQv4fDshFr2CJaBNwWs73XSGwQ7WZyXJ9SMZxhkUjNyTKoceJOa7V0RRewaa8xlE+0iUQjaPRLqPsRDln4xuHk45rs2QQvaLepv2PrWA372/HDWJ87Uao7lwG0OOVSSMdxRkflITW2pkALOxXu+7hfQmEJKRxh/HaHTXJ5FQRYPEAKbyBINwS0HQmga7n76MkDm1awNVqA7z/3wIiFK2Ctk+ZwCGFayiL3P77ytuN12nvyTs3h+sXs43UUdYaiZNByP3cH/wCPZd4jfxEIDePX9ME1nZEitdmJKR4kq876xa/9CjQ9QXhxxu0WFzsy5d67U1C6D/os7/LwSkvsvBVtiy+hmQL+1j9W/ca24kwGoUVTbqhGUs0awdnfHEC2BWxVHOjFhsNbWUuggNUVWx4USo5KUu0v6oMMoVfws4KzQ0IN58xltt6ooU7MzeeimNnEpdTSkgZyFMH4N3cJe5KkBrgfLLRizfBoTiuQb1BubjqPSwCthlMjz7gzR4m X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KEYjURcD46b7CsV+bcAAkKMVCARQ/dJsDzfs3minpxzgkDhDP9aaV7w33yWLXodvHcnFp+qEjvO6fZCybGPpb6mEvf4PwiXWTNkuqT135BGKHMeuQ0Xivg3jmEQ1g+XFZ2yCTAH8sTIl40vbMZI7Xv4UUOgiWIJp4XXmRmEqM+MAawAaJdb2k1XCzyynTjprlokuboNPiszktz2WB0KZLrEhpbw+vOML7wkDt/FBgqaqGMhjcNA9chZnQl23P5IpYwPtEoVzL908Rnp8wl09Kw3XEMUVZyJyTWkohiVn7VE48iTtZDBulw5rLUJD9PAo5V7dj4vXxY0TylL+0XrHGVnc06mOYhTIAEKvdcdp4aETXx3E4kal0UTRyzT/ut8C19c1stpPLw5aFTy3OeDPVdJ72qMlk8OLwtiKx9xNt1Q1WNN1i2aHJ2+pVYfajWhOxy1Xc76cpBbNdApuGG8y12VRbpIKUN0/b7Lig2ZjBIjrKJpHZkJRpelHOit+ZWp4srkqryn2GHJ0EXUi/UF3NDgICpA5L+/pkMEaVLV7IZT5Ft9GIusvthPclc6Ztj88SQCjLL/bxcpK61rLMI0Fo6IweX0+DIsP0GQC/pvR2JdtLp4hzvdYa2Ac46apJO5x1aRYpnvZFBiVVS68bQbe072wsIMXSbzUxnXc0KubVDW2ZbjWivDT4I27xVY/1GMsijHgyRmNMO1mzKGgWinvj7P0RGM+vh6DA9hPf56V4kDSIN4QO8FW0OqmuQL73QjgDH8JWo7688Bd1cSqEYqAP8uQDYnGzKXYX116Rm6LAZpcngjKyncuL0HkS1WuGbqfE5qc4i4dbXvQ/7u0wfH7f6FLgW/eH4VFDirdAEfeGjwkzrNWueUawdqwr79Bpqw3P4HvDJSjEwV49ADdcy9mTrzUPPHvzNII+Z8kdt5wrCpaohOH2XwZaPhz1JOqwyit5JXEmRFEAQPyscNIoh+4IW8HPkXJCiuO8IYSqQskbzZrnPprn76lXotK6LHN/3YozfJ/jhGZdJr48jhBLALKvIOX8ZqimnbJVfPI/fuz829QOpAn/fqbAFb6HnaLviYkOVLVMdhtWWT6z6btJTVxtARhMsU4xgNPMOWcOoqbSt6RhogZPDaVplCNyT1drqdbmU4/EMD6BWQhaYkq3SVwKo0RvfH7xYPW/H7UlV0danW1/BuLaypqSjj9PtjXu+G9HkpSgQ8VizSOMEDQP0p5HUSfGl/g9uEa7vkoTPGIbhywQVqfjNs2SvWriztfvRv8 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d8318f9e-b0d1-47dc-3a0e-08dbb1e581e0 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2023 10:05:49.0466 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3P250MB0305 Subject: [FFmpeg-devel] [PATCH v2] avformat/avio: Don't use incompatible function pointer type for call X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1bK+vfWTqhzv It is undefined behaviour even in cases where it works (it works because it is only a const uint8_t* vs. uint8_t* difference). Instead use a macro to produce two functions with the required types to be const-correct and type-safe. Signed-off-by: Andreas Rheinhardt --- libavformat/avio.c | 98 +++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 48 deletions(-) diff --git a/libavformat/avio.c b/libavformat/avio.c index ab1c19a58d..9783cb1881 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -353,63 +353,67 @@ fail: return ret; } -static inline int retry_transfer_wrapper(URLContext *h, uint8_t *buf, - int size, int size_min, - int (*transfer_func)(URLContext *h, - uint8_t *buf, - int size)) -{ - int ret, len; - int fast_retries = 5; - int64_t wait_since = 0; - - len = 0; - while (len < size_min) { - if (ff_check_interrupt(&h->interrupt_callback)) - return AVERROR_EXIT; - ret = transfer_func(h, buf + len, size - len); - if (ret == AVERROR(EINTR)) - continue; - if (h->flags & AVIO_FLAG_NONBLOCK) - return ret; - if (ret == AVERROR(EAGAIN)) { - ret = 0; - if (fast_retries) { - fast_retries--; - } else { - if (h->rw_timeout) { - if (!wait_since) - wait_since = av_gettime_relative(); - else if (av_gettime_relative() > wait_since + h->rw_timeout) - return AVERROR(EIO); - } - av_usleep(1000); - } - } else if (ret == AVERROR_EOF) - return (len > 0) ? len : AVERROR_EOF; - else if (ret < 0) - return ret; - if (ret) { - fast_retries = FFMAX(fast_retries, 2); - wait_since = 0; - } - len += ret; - } - return len; +#define RETRY_TRANSFER_WRAPPER(RW, CONST) \ +static inline int retry_ ## RW ## _wrapper(URLContext *h, CONST uint8_t *buf, \ + int size, int size_min, \ + int (*RW ## _func)(URLContext *h, \ + CONST uint8_t *buf, \ + int size)) \ +{ \ + int ret, len; \ + int fast_retries = 5; \ + int64_t wait_since = 0; \ + \ + len = 0; \ + while (len < size_min) { \ + if (ff_check_interrupt(&h->interrupt_callback)) \ + return AVERROR_EXIT; \ + ret = RW ## _func(h, buf + len, size - len); \ + if (ret == AVERROR(EINTR)) \ + continue; \ + if (h->flags & AVIO_FLAG_NONBLOCK) \ + return ret; \ + if (ret == AVERROR(EAGAIN)) { \ + ret = 0; \ + if (fast_retries) { \ + fast_retries--; \ + } else { \ + if (h->rw_timeout) { \ + if (!wait_since) \ + wait_since = av_gettime_relative(); \ + else if (av_gettime_relative() > wait_since + h->rw_timeout) \ + return AVERROR(EIO); \ + } \ + av_usleep(1000); \ + } \ + } else if (ret == AVERROR_EOF) \ + return (len > 0) ? len : AVERROR_EOF; \ + else if (ret < 0) \ + return ret; \ + if (ret) { \ + fast_retries = FFMAX(fast_retries, 2); \ + wait_since = 0; \ + } \ + len += ret; \ + } \ + return len; \ } +RETRY_TRANSFER_WRAPPER(read, ) +RETRY_TRANSFER_WRAPPER(write, const) + int ffurl_read(URLContext *h, unsigned char *buf, int size) { if (!(h->flags & AVIO_FLAG_READ)) return AVERROR(EIO); - return retry_transfer_wrapper(h, buf, size, 1, h->prot->url_read); + return retry_read_wrapper(h, buf, size, 1, h->prot->url_read); } int ffurl_read_complete(URLContext *h, unsigned char *buf, int size) { if (!(h->flags & AVIO_FLAG_READ)) return AVERROR(EIO); - return retry_transfer_wrapper(h, buf, size, size, h->prot->url_read); + return retry_read_wrapper(h, buf, size, size, h->prot->url_read); } int ffurl_write(URLContext *h, const unsigned char *buf, int size) @@ -420,9 +424,7 @@ int ffurl_write(URLContext *h, const unsigned char *buf, int size) if (h->max_packet_size && size > h->max_packet_size) return AVERROR(EIO); - return retry_transfer_wrapper(h, (unsigned char *)buf, size, size, - (int (*)(struct URLContext *, uint8_t *, int)) - h->prot->url_write); + return retry_write_wrapper(h, buf, size, size, h->prot->url_write); } int64_t ffurl_seek(URLContext *h, int64_t pos, int whence)