From patchwork Mon Aug 29 14:43:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Neil Roberts X-Patchwork-Id: 37560 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp1987480pzh; Mon, 29 Aug 2022 07:43:41 -0700 (PDT) X-Google-Smtp-Source: AA6agR5yzL3mjyYB8vPPWnG14nzTbbtOS/0gbbdTdgfyHuVkUtonE17Hsi1la21ezeuZnLnB/0QS X-Received: by 2002:a17:906:491:b0:73d:c060:7cef with SMTP id f17-20020a170906049100b0073dc0607cefmr13932503eja.111.1661784221767; Mon, 29 Aug 2022 07:43:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661784221; cv=none; d=google.com; s=arc-20160816; b=MJK4CS/RyuiGY5f2VzKj+e1nxMDmbqPR+xoZq3rKIcLAVTu1I9IzKBuJ3oVNmyYRnI ljhmF1ybFS8dFwt/dqP3EttwYU0Q0FNPmqTletlPpAxgMsCN7YGbPcO1rQiJwvYa+HL8 pQnfNV58O/0fQsH+bBe+5tpRdi/lI2Nb2eP1JE2oDzJ7QThV8dPpSWIqIhDGjtOS6+UG Dtoi77PQ5u852CsPnBJA95A6yw8PG2sCouMvz/Z99jLpxAPRCSdKMeQX0vh7n3PuH7L2 TxIvwvaQzKf8aZOB1qDLwI1fGi1jR/sWtZQleb/w4G3TAOtgAcOuaeTXkvE4NtjN6Lve IMlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:references:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=X7WPSVYe6m4Zj7BwAH6iADK4PVYtYwG5PV+vmX/0dVE=; b=aem1pwmGtdq9V/AMn3er+GodSZbHhKGmVbxrsgYKTSUAwUMSm+8vUxEc+LA1MiHIEr PxuwyaRjHLjSCqfjEjP5JLI5dzi2El456qRIUiV4MK+KJ4nl+u8vtUWEYMSkpuyDs+xk zLx9THyyA1Tdz9pX4Z9LKouMMT3KUdEIgpajPbzd+QoAnGZU2mbaYpMrauJF10VvLM58 vd00JWVaHCJpfS+Kga//eBJOxMeOtZv4HrIT+uaTnHbPEhsc3xv0YgFUzTYpSuUrtrDP KlkB1LojewJeRUoip2QisJoNApOa56EHvAZsw8tOmZo6QKP2agc6uup0JyR8jhboqVxO iFhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@yahoo.co.uk header.s=s2048 header.b=cchNYHVx; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id bx17-20020a0564020b5100b0043b59c69ac9si6204190edb.65.2022.08.29.07.43.41; Mon, 29 Aug 2022 07:43:41 -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=@yahoo.co.uk header.s=s2048 header.b=cchNYHVx; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7EEC868BABE; Mon, 29 Aug 2022 17:43:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from sonic307-54.consmr.mail.ir2.yahoo.com (sonic307-54.consmr.mail.ir2.yahoo.com [87.248.110.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DE16B68BA30 for ; Mon, 29 Aug 2022 17:43:31 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1661784210; bh=rGyAT19d1WFJTvEP6REKOmSu48SeBNg2XEbfAuhQTi0=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=cchNYHVx4o/FhjeCkvRcSmAIBnQe6Xg0tj10DsLoYcFeOZWYF2PpRw3Z3RhvMrf1Xm/YpYYmqjbqKYOAPiiXsryF40YjVn7zETpP2XruT06fnqunjpZZd0sKvdFjFqZJ36fAR1Oxl7cEI4LuZOevRCqOxjsM5LEyj9g+4hP+dGpobwhtN5NeHiRM4vZ0rgEab4hLFhLCY+5YUsZ0CVG7cEDp99ctL8ROqRW9C/1gVCcTJvLeI3VPhqsIVxICRBESlWhP1zcWVqR+dcMqWqNjEmM2V9JMMAbO8vcNLuutNojdkSc0eX+Ve53JLwEy0Jm+AZcrDRaow3QCt4fNkDVd0A== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1661784210; bh=Ji69PvFYnwbT+mSi7X8oXjPJ1HmYyhYaYOewgTC25CM=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=E4bclQ0hBTUe8zHPXj057Kd0Fh1w0t8V17W2eCGdibtKSlGZLKWSpXgZlS9GWQ/NjiZCzXRFI2IlBi8tHZoZQXy/uFNtOO/rAbCR5ayFxiTKoYKTI+qxa5bdt3I/gyF+or0ONCkRhbC/mi9HTWq9aTYEO2aNl024HsY5UW1hHaEHsJLN1uDU5S/eLGOkaf/GXL7ka9t6MAoovzvNQ/aQo5G15G04gDSqw3zI37lWVD6xb4esJ+MY7opnjMFOBxbkYf7LgjkGa8vQPnIoipg1GF4YHsJvnfsaewxyiUH1l0IWvsN7ygIlWgYP91P8iVxhQyQyPA4CFOq6amkgTcaEYw== X-YMail-OSG: mBxT0EAVM1leqBHDFupK70tGyLwLU00l7FrAoM8MBPj5rAD7W2.vGsPHN7OStb0 kkZteTWmnLZYD1FSV1RdgNByd.Hr3stM2PPZdEBvGoWXAyHeXAexvZ4Nf_5I5aZzfFuXWDeA9_69 RSloijVLPZmNQ22SFd7BzznxtibaX.o8ePPNn3KYlGzt_suKTcs2bAtNC5va8wIxkSTv85TE9ZEt wPRlI7K52S22qx8YejhcBfhwsx5AsQGQxKihPA6y4nFtBG6RQsl29zpNUB3G0oA32UYIUgKxNYoz 1y5jFYoquzck5z80LTJLsBXZoyYJxWdDT.jyeR7Enn0LqSnJRjqbGUKavPtBN9QlDeL5zlWHUepT Ptx_nffHgBk4j7YrhAL5VDvrYo5tkuJ_EC9EBHgIHMLg8d_xVEqqLikDreYPqdKGruvyE1cGokgX BHcp1qiYVnF_J7k.0qfYlFTY.9gS6DPFxBprxMSDdF0caselDCe.f2O.DxRFeAnxl8cy8lrGuPUr DE4HrIiz0cftkqu9zRFkkg_cZC5AaGGELPHNNpHKJsZAgfYTX5GwqzqnUgC2ifQB.lM2nEyhhROd KHBUu9I.4JY6WRgi9BGN7mU_O7pzh9ZHs7b9t_rmBvqgzjzEWzAd6qDxT7qCCFdrNfWGdvu4JXh_ kXire0KfEgQQNPjraGwhTP0CHQImYyv99WLPWH__kw4GJAHIJZ_.CAdHydJIC38JXnszo_yDTGcg W_h1XLqD_rmv5lbDPRxmcrkHSvvSQvC5aGLVCeCv8N2vbzsHHPNXk4wdE1J.L3sKtA3hbp4JBCCB K.1igxXoEgCBIrKV0TK1D3IO74S4ozTrjRFWg9Tj4ChfM7OZbU0.2ZNkq5lakB5V6p3o5jzADzCE sdYF1uJ479h0uCFNxjFG.m6uMbJwMQOcDR03zZ1mUiJqfijRdSRebiL7_bop9eSlrHNUHchn.cXp ZkF7Mp1kl4x3VlT_i6m5NyDXC7crjzzO6tIEOG1iPJ0NMfEHBZgPYrAaxlFZwlpKtruZ3eGQ3NXm 4MOj3S6fcDMTj9_pLhrMdfGr8fa0ZpLNhDRLucS00dLHiLJX7HbWwwJmzx9SUp1HxBn2ny7Sr_ws 7m9yHkuOHGIU2gacBr1g1C2IW3zcWRx4Vxe4qRe.mG.ZyXBK_H_AScJ7itBV1kv0HML6xO0Sp2mS y9tS1J9KC.hIim5tnQ0dAu4qOadSAwHwxLqwjpcsXCkxWL6yq_emwDpqGkoLSL2N9Q.d6508sLM7 YyhGhQp.Xpy3dMz_18WXt3Tyr0vwwixm0msHESQfm9ObT.9B5ay8rCe14kA50ZR5R2TUhbLJa0Cu 9BoGVkR7NTl2Or4WTugelhmZ2ye1NT7Q3dcHkMUAQ5UoKYpuLrjDnB_uj98nmaSCQG4hmCJmHBCE 2zIDp01qQgE_J_ideIcrJY3FOqJgYz89n1nBgET03K5xtBM5.0a3lOSwzh5ES_EVtE13dD1sgcFQ UwNEWWMJ9zYKSQyh1YkNVNXnbBHWSJj3GIK6GNbkhp.5kiny7Ungsy49ehXXfH7rDsB5.GX3tgzR VNLEp99W7KUGOnMCtg9wwZcredtmCpXnAGAdN4YtrmDleSLDR4FENASb7ZRg_MgWbO6VR1UIZIjk LjAp8.izvFJLzgpMjKw.f0CWtT9o6aDsd7Pr2NT9_yDO6OFWCDOe5F.oDbYwUv3WKIBOx0zYcxAs ajIa0h.3ahQTlvlTsPMaviPurApr3ysrLNVAUo25a3idBv0D.u9tLqtH8PVd93.4rwNSF.3Ph4l. lmB4ic0o3amlw4F8JniVCVSIkxFuEeJizUFQWpuqah76_sXH.FCb8KIbovyrG1CXc9D7zIKXA7NR xQvuvxqEoL6mE9BaHrgPPe2ETaknjCiO8m_UEcnLdi.Ino6Wo.8rHK2CHTR7nWNL4vnYG010Xciq WJ1y.zlJZ.iqAoFM5oXIFph6JUw-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic307.consmr.mail.ir2.yahoo.com with HTTP; Mon, 29 Aug 2022 14:43:30 +0000 Received: by hermes--canary-production-ir2-f74ffc99c-69tgx (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID a515125bacac5bd0f04669fb91073577; Mon, 29 Aug 2022 14:43:28 +0000 (UTC) From: Neil Roberts To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Aug 2022 16:43:19 +0200 Message-Id: <20220829144320.330685-1-bpeeluk@yahoo.co.uk> X-Mailer: git-send-email 2.37.2 MIME-Version: 1.0 References: <20220829144320.330685-1-bpeeluk.ref@yahoo.co.uk> Subject: [FFmpeg-devel] [PATCH 1/2] avformat/file: Add a specialized url_check callback for pipe protocol 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: eX1M94wP6Q9C Using file_check for the pipe protocol doesn't make sense. For example, for a URL like “pipe:0” it would end up checking whether the “pipe:0” file exists. This patch instead makes it check the access modes on the corresponding file descriptor using fcntl. Signed-off-by: Neil Roberts --- libavformat/file.c | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/libavformat/file.c b/libavformat/file.c index 98c9e81bcb..f17d219cb2 100644 --- a/libavformat/file.c +++ b/libavformat/file.c @@ -375,9 +375,8 @@ const URLProtocol ff_file_protocol = { #if CONFIG_PIPE_PROTOCOL -static int pipe_open(URLContext *h, const char *filename, int flags) +static int pipe_get_fd(const char *filename, int flags) { - FileContext *c = h->priv_data; int fd; char *final; av_strstart(filename, "pipe:", &filename); @@ -390,6 +389,14 @@ static int pipe_open(URLContext *h, const char *filename, int flags) fd = 0; } } + + return fd; +} + +static int pipe_open(URLContext *h, const char *filename, int flags) +{ + FileContext *c = h->priv_data; + int fd = pipe_get_fd(filename, flags); #if HAVE_SETMODE setmode(fd, O_BINARY); #endif @@ -398,13 +405,40 @@ static int pipe_open(URLContext *h, const char *filename, int flags) return 0; } +static int pipe_check(URLContext *h, int mask) +{ + int fd = pipe_get_fd(h->filename, mask); + int status_flags = fcntl(fd, F_GETFL); + int access; + + if (status_flags == -1) + return AVERROR(errno); + + switch (status_flags & O_ACCMODE) { + case O_RDONLY: + access = AVIO_FLAG_READ; + break; + case O_WRONLY: + access = AVIO_FLAG_WRITE; + break; + case O_RDWR: + access = AVIO_FLAG_READ | AVIO_FLAG_WRITE; + break; + default: + access = 0; + break; + } + + return access & mask; +} + const URLProtocol ff_pipe_protocol = { .name = "pipe", .url_open = pipe_open, .url_read = file_read, .url_write = file_write, .url_get_file_handle = file_get_handle, - .url_check = file_check, + .url_check = pipe_check, .priv_data_size = sizeof(FileContext), .priv_data_class = &pipe_class, .default_whitelist = "crypto,data" From patchwork Mon Aug 29 14:43:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Roberts X-Patchwork-Id: 37561 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp1987574pzh; Mon, 29 Aug 2022 07:43:50 -0700 (PDT) X-Google-Smtp-Source: AA6agR4nYR2cj8TTF/DaoYIsKUayqfJKZgY2pv83cgyLqCRb8EaGE3J3mtBW8LsFfYVGdubK3qqw X-Received: by 2002:a05:6402:5211:b0:448:ab5d:3b84 with SMTP id s17-20020a056402521100b00448ab5d3b84mr917741edd.130.1661784230655; Mon, 29 Aug 2022 07:43:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661784230; cv=none; d=google.com; s=arc-20160816; b=E/7A6JCj3QBn6tTmvMnR0ZMNdVXWk0AI21rpCx9maWuCcD7VC0Cg/C8en0GS5dYcoE jVe8bSmdREEL/U5gKX8b+CxL/6oal+5qLEzbGbTBJd0kcr9wfzGnUFBZ08Hg/4CLeAsd DyhaX7DKVeKhe3zdqncjMd1974+jwSlVUVidjUS+1MyNezT2YehZrIKpZPoEIr/NkYUx HeMqUQHRO+UK1HB0qR+DlCk8/48zT4xbjaNSd/SVyJu6kuxVRVMW0f5Z2Zi6p5/RSmOJ pJEKWTm8o1lRWHbqnplAFefTx8Ml7dKwQ1Cw509kOD5z/DecJJ1gRKxh8ou9hbLo8Bwp M4vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=OiC3c+yf+CY9X9XhVbOjd3QRHS3ENEIHqjjhNcMDlws=; b=oB2UcTuriS/ZEMn1nSe7bcLlre5nPCavrlTqOd/rMPVZjeytwWiSdJZxEnDW/PgMSG tlz2zScZqsZI2zYdBFtLcsNwc87Rm5It8V2BQeBWZO8jhcFrHnpebWoqT6euh3zIaZWQ 7Rg7X4N4PD2rnegZKlRzKR/XAoI+IFw+/q3dPS00PgtePvEGiyWRBrd70wOgEO5cPy1U t+CT26BrCB1PAAVsIE5LrCoR7kUnRGHJg1f+ik2xzdj9d7asfL3XHeOrJpS6iP2JZEHg VfI4+xlv3RKHx0qWsYNEdEyJ6/oX1ZI4ldA9I1whx6kbEeTRHWwk2HkLhmdPhvKYVjjU +EMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@yahoo.co.uk header.s=s2048 header.b=QP1R0p+u; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l15-20020a170906794f00b00734804bb362si7219179ejo.568.2022.08.29.07.43.50; Mon, 29 Aug 2022 07:43:50 -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=@yahoo.co.uk header.s=s2048 header.b=QP1R0p+u; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8631168BA31; Mon, 29 Aug 2022 17:43:43 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from sonic314-21.consmr.mail.ir2.yahoo.com (sonic314-21.consmr.mail.ir2.yahoo.com [77.238.177.147]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6E1E668BA31 for ; Mon, 29 Aug 2022 17:43:36 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1661784215; bh=RyakTCqZ2BJ1RE3ny6y90YB+NfCZXTi023RB4K/9GcE=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=QP1R0p+uhxdp6TOCL8N/Ay6+6RB4xEssw7t4zoGF8bamROpYrCFRQPlx8BiJzliPHXpkjAU1v0m3rXeKSorO0PT4veFpAgjEoRezZ1Y2vIgvZVfCvE1IMaaB4iCceIbsDJZmMWaQRIlP1+1pZFjvo2tImoDUJ4KvTUaOVsF6QAoNTSgKYDK75JMe2YNf0HI/YUqXPcoIjohCz1ol8maFt5XY+zsJTyV5O9X+MyDbF9NOgzz95W4e0eFxR36wuY6MYXEvniVZQz3X2jnvPlCDX0YqjNBV8DZnRJJUqqLg4xtlVbCh6HC900/fRr8zs9fA3etM9Wi6OK8vRElA2kQhsg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1661784215; bh=s5IHdq7Nla7j7bG0J6mVPk/kutPQm1W+ppVemRUTl7A=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=O3eHSxGPTNgPi86A3thW6LAOun7xL5yMkF9FUhfYUrhiLZ9g0nsNGzy49faSTThvIVrotHb+SK3z3YFqCf9jeeU8Ktyr7Q5sG7Va0uejP3znouw7iiq6540GJtftTIwRUSxUsbCgYesSJFz6IajPv/r8X6xf5uGbGp1PFyjsDLoesQT04fi1VAJRl9oLMdMvdiQ3cf/m8U/vvUT7tjeKKFyCWfL+2FkVztDGlgfNBrJt08uQkbji+2jP6ZnQvNKqy4/5uTaeYk4gRMw98+3+tas5fDKp8KEDXhnYGin8yLim8R0kML2CrgqtqvXFIBoriI4+H5nsJgmAcWgNNopA+w== X-YMail-OSG: Yyzhh3IVM1lqgO51mUseOc7s36QiwGE6kp0nStPEPp.dht8AJqAduhXVIWIFEUK MP9hy6MThyDo.ZmAUjUfYU5kCkQ8eunthU3SDAGEg7fVR6nuXFTtOq0KahfQc1OU6XVL6tQxTsfC EJBZCo3GXhtg13elY.jInGEou.VMv3WfVmXv6eKrK1AxEjbpHWdBwsAWN8WDNBsRdoqaZ.kil008 vo2mxHwQAKTDs8YkCBXmmL_xX3PGBE.7S5gMrecwDH5QKXrzWkdbDmqcrqm96TLT4SvcuF4MRtGy jfOz7lJ4YnMYSURB3g8F24FD8_isTKpNV3GeXRI.JzfA1vOESOfb3X2atigWbApebGl_xuf2I4MQ UY6PA2jZEpcj9Yj7k1c_Da1u3u81gao73QEk3vXd0w83pPoP_hAA1SRiSXhTct8lySGi99Smnjca Zy82bZTIbnvDuoibFsH9V3lJSV25D7Dupj5I3UK2EcnJe2WFzmA7PYB0KnwFFbYc7baGnDuIRo_R aJ2HNV4DnxXhrs0COnHQCKIxuyOpYcNe63m3DPZ5sQscG.XmxIfKtPug9SMDxwCdNiGz8sFcSxau QYBnVLYx02TLwoR.8t1hdv2E5tOHUmIVfDVCYlKsirEzhFmknNes9xs0xIkomNbfs81pEChBWbTq klq3laWMeEzaeKBEMlXjjD2OqmZ3qaI2FcN.M2k.e_7J0uz19ty7GOCHoMIzy0zLmiTrP1oO6pn0 aU4IrelA7u5C68QOnl80P8rxLeVaD5sXifb4F6taKxloj0sV65AUUqRz_ztdYnbdORcm0tLv1LHT fH_PTl.u2.84M.eqSXCwG_s5zd1uB_kr1W53Ks575QjGDCmaTcc3yBXdM2w7zLk3g21PLK66lDUA lc6tKWsYFbCZamtF2cVBgWWmp7fmzdAsGjOqdPGOVAl6Y75CD24wjCLjnnOuFlAdJLSEERmBpBAd Z9yFdSRBMeqwyFpiTFEu2mjoAWbqMwGIyHDwKCJNQwBGtegC9f_L61ggVcKDHRC1yfWUcvaeVBvW Bhdc5BhCmNgXtKZPk6W6JUvVvFFPI.siGMqT7_rshxbene6CZQAsFouwgCybZa2_mwte3LcErzda G663DF1zf0NOLVCrfKwgJMApL4k.GlghtEbpzIJ4Z0MvXJBiWM2WUXBJvlx29YiYVjd2F2Jy4KwL T5Z1QvyZjWi.ouPt65SNIEzbRX9V1UW_0QqmZ3w.hGQB6b6kx38HBxLKYd2jDF91gEJfaL0_HPTS Acdu3mO629EnWqFJjGEyshk2sAnYkdQMWQcvoq95_ZYlSAd_8PUetm33WkIWMoRq6NstXZC_ihwz v.zIBRdcUbEQ4N2DNoUYlF6d8HW3bKv1HUw82uYhsEZwLmd__lz9JtqqePF_vrz4_uLQO0sqcV.P CMc2rTqJ6nFsQ5zS0flObYrCd6kVK7lHJ1CEyixtxs44rQqcr6jHhTpSpRU_P0ZCibeEyDuErfRn 7eHOvlbXrPeEKChiShrZivF_Zjyf67OA6Z2wgecAHzDJO0QAmqA_6lzLoIi6IudWWbIf960g5kJf B4WhV3Tw5y.3eDxJytuuq2nJ0QEE8kRHQlgSiDjyO6t_CKBYBod.9COi17WTd9jAzefcIaP1wWEV qK8UBXAwU2DU39uNX87kWMWlD4NLkm_Bxx4TtAOpIxZb8ZUS0OULfjqDc.XFTR8UTujM_ZXRM3aZ S6SzMVxOHpPtd4wI.R_ukw0zlOeXL.nBJY1HgwF_IujJn8cj1oqRRQCvnbB9YiFv2OzM90NX1OQl 3n_3tek9JP4mxeHPsGiLy.pyBaidewgTY8bNha4FeYCMGqwdUGZcZ3TP7FDyKbdIfek9II8Cz66f xtygHehILXZ6_QxpGPkGK7rPqVne4eZmp3uLJXHhoTHTC8fbcdbQ4E62QqOsWKboJlrGG2PXOtai YD_gtfA7KSx63Ifw7uIW77aEEOd91xiU0bLkcXw8piAkczZ__o3xiixp2TqamHMuqnjD_a98OrRN DZg7Tr2XeN5SoypdbP_ie6ZVpW9XQf14knxQQb9czgPlCyu9Zmh9gfyhNeC5oOuY_YgL5vbO8cC5 C798QH35YZO3qeaTlJc01E2TJBMcAuYDXnYTo48AZOCd2uRgQouWWAnB5muLseZxsxP93bBVItwl 3sfi.12mMsi8ym2p4GODZLjbyrK5F.AX3SH3mNFH1LIDi2EkBedQ1j3c2Ju1LyUyzUzGmuLfBfA_ L21wilqO3xDg3njnQiXDhsHAuY5Kuaw-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic314.consmr.mail.ir2.yahoo.com with HTTP; Mon, 29 Aug 2022 14:43:35 +0000 Received: by hermes--canary-production-ir2-f74ffc99c-69tgx (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 952163389a1e8e316fbe0b3a8fba821c; Mon, 29 Aug 2022 14:43:30 +0000 (UTC) From: Neil Roberts To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Aug 2022 16:43:20 +0200 Message-Id: <20220829144320.330685-2-bpeeluk@yahoo.co.uk> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220829144320.330685-1-bpeeluk@yahoo.co.uk> References: <20220829144320.330685-1-bpeeluk@yahoo.co.uk> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avformat/tests: Add a test for avio_check with the pipe protocol 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: FtRmLls27iVN Creates a UNIX pipe and then verifies that avio_check returns the right access flags for the two ends of the pipe. Signed-off-by: Neil Roberts --- libavformat/Makefile | 1 + libavformat/tests/.gitignore | 1 + libavformat/tests/pipe.c | 101 +++++++++++++++++++++++++++++++++++ tests/fate/libavformat.mak | 5 ++ 4 files changed, 108 insertions(+) create mode 100644 libavformat/tests/pipe.c diff --git a/libavformat/Makefile b/libavformat/Makefile index f67a99f839..9c681c58c5 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -732,6 +732,7 @@ TESTPROGS-$(CONFIG_MOV_MUXER) += movenc TESTPROGS-$(CONFIG_NETWORK) += noproxy TESTPROGS-$(CONFIG_SRTP) += srtp TESTPROGS-$(CONFIG_IMF_DEMUXER) += imf +TESTPROGS-$(CONFIG_PIPE_PROTOCOL) += pipe TOOLS = aviocat \ ismindex \ diff --git a/libavformat/tests/.gitignore b/libavformat/tests/.gitignore index cdd0cce061..567d6f9e40 100644 --- a/libavformat/tests/.gitignore +++ b/libavformat/tests/.gitignore @@ -7,3 +7,4 @@ /srtp /url /seek_utils +/pipe diff --git a/libavformat/tests/pipe.c b/libavformat/tests/pipe.c new file mode 100644 index 0000000000..68540c1a8c --- /dev/null +++ b/libavformat/tests/pipe.c @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2022 Neil Roberts + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include "libavformat/avio.h" +#include "libavutil/error.h" + +static int check_pipe(const char *url, int mask, int expected) +{ + int flags = avio_check(url, mask); + + if (flags < 0) { + fprintf(stderr, + "avio_check for %s with mask 0x%x failed: %s\n", + url, + mask, + av_err2str(flags)); + return 0; + } + + if (flags != expected) { + fprintf(stderr, + "Wrong result returned from avio_check for %s with mask 0x%x. " + "Expected 0x%x but received 0x%x\n", + url, + mask, + flags, + expected); + return 0; + } + + return 1; +} + +int main(int argc, char **argv) +{ + int ret = 0; + int pipe_fds[2]; + char read_url[20], write_url[20]; + int check_invalid_ret; + + if (pipe(pipe_fds) == -1) { + fprintf(stderr, "error creating pipe: %s\n", strerror(errno)); + return 1; + } + + snprintf(read_url, sizeof(read_url), "pipe:%d", pipe_fds[0]); + snprintf(write_url, sizeof(write_url), "pipe:%d", pipe_fds[1]); + + if (!check_pipe(read_url, + AVIO_FLAG_READ | AVIO_FLAG_WRITE, + AVIO_FLAG_READ)) + ret = 1; + + if (!check_pipe(write_url, + AVIO_FLAG_READ | AVIO_FLAG_WRITE, + AVIO_FLAG_WRITE)) + ret = 1; + + /* Ensure that we don't get flags that we didn't ask for */ + if (!check_pipe(read_url, AVIO_FLAG_WRITE, 0)) + ret = 1; + + close(pipe_fds[0]); + close(pipe_fds[1]); + + /* An invalid fd should return EBADF */ + check_invalid_ret = avio_check(read_url, AVIO_FLAG_READ); + + if (check_invalid_ret != AVERROR(EBADF)) { + fprintf(stderr, + "avio_check on invalid FD expected to return %i " + "but %i was received\n", + AVERROR(EBADF), + check_invalid_ret); + ret = 1; + } + + return ret; +} diff --git a/tests/fate/libavformat.mak b/tests/fate/libavformat.mak index d2acb4c9e0..7a22f54c04 100644 --- a/tests/fate/libavformat.mak +++ b/tests/fate/libavformat.mak @@ -26,6 +26,11 @@ FATE_LIBAVFORMAT-$(CONFIG_IMF_DEMUXER) += fate-imf fate-imf: libavformat/tests/imf$(EXESUF) fate-imf: CMD = run libavformat/tests/imf$(EXESUF) +FATE_LIBAVFORMAT-$(CONFIG_PIPE_PROTOCOL) += fate-pipe +fate-pipe: libavformat/tests/pipe$(EXESUF) +fate-pipe: CMD = run libavformat/tests/pipe$(EXESUF) +fate-pipe: CMP = null + FATE_LIBAVFORMAT += fate-seek_utils fate-seek_utils: libavformat/tests/seek_utils$(EXESUF) fate-seek_utils: CMD = run libavformat/tests/seek_utils$(EXESUF)