From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 9985543490 for ; Mon, 13 Jun 2022 17:47:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3535968B5B0; Mon, 13 Jun 2022 20:47:15 +0300 (EEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10olkn2068.outbound.protection.outlook.com [40.92.41.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9230C68ABCF for ; Mon, 13 Jun 2022 20:47:08 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dtgJsb1IKzsDXysPKUVeBq1osivPsvAB9RUj+IxfdkcYVnKOGv1vAUPvG6iOidPf3QeXnPiXd9BajINpp5FufLHDyXGzpLcSaeS7MzAJy5tXZGAAjeENvCyXfO2izgdhnFIGi6TjyOVVpNwOxNCynJin7uRPZA3XtHd6FyffTVc549dTg1zU5V5Ucs9s4X4j27k0emcEnmS/0K8DIa04nHZzTYJ3NJDCyJdVyD2z3IKjoI15jNEiqvhZepLTYsZ9sZghwNlxakLDU1ZXoHNZIg1gAfVQPf86QtVnC5T2tOCzUOESZ8TYtuzMFuco+ITAkDY0T3cl+J2fJJHOQ8OSgA== 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=Oro0F5pLZzFEUsyiPAdwWZMaYu0CeiRUjWk6S6pb4J8=; b=oHjrxwIFQyJZbywe7VgarWqGYzbdJ/lLql/l9mcodEgyU+TNmbFL6I8T4q8LSRn9lI68Y06GWYGJS9G98s1YZP8IUQmTzhdpVNZCrsbvLW5R21gpT/+yoLXnhAk9ahHpKRHNN2a0Oyp0zJp/EjbcPEtjHsPkLCCrc3GPiYQcubTCaSS3irN+S6wzXPksL4c/dmlLO5d44M0n8wH+UDUgAdsUCEqoRTpm6PQOn24xre932c0Rt44E/Oj7UAz+po5OoQwbhcBtSVyWNvjJagfkC9QP2tIyyrUXIb5bNUE8XIBmGcpkBYM4tF9xfERKVkQUQTEdzG8M9nH3NiMz0Ai+UA== 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=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Oro0F5pLZzFEUsyiPAdwWZMaYu0CeiRUjWk6S6pb4J8=; b=g8tj5GCvFl2n9xdAGoIr8vXavMKnkxdfbbCPmsD2kQDuNnlCO7AUiox8MGllp2oWcflB1vsuzycqKMgNgcuceG1pdXHFz9K0Ef2XaA7odAD6oDhduhtz1C7W6leSebim1HX+X3L5VMrtNQKz+e0U6VTcT6ZxCFVreXYbLdZEKHbhCYHDu22pHbJLr1b1+XjliPzXvcdtUy9JfRfpC5iT1pOUZrCNgYY04hLxX7TwiCnncvtLt6K4r3ungnJblZ4y4CM6LwpFGdWGMmwBMXAnRJbJauZJL5Eq9ZcWHt9lZe4NRyS9d6TNH+AMRDnn0J2hkudV/PAysYQ3Q4AxwbZZ/Q== Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:b::20) by BN0P223MB0117.NAMP223.PROD.OUTLOOK.COM (2603:10b6:408:147::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.14; Mon, 13 Jun 2022 17:47:04 +0000 Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::f144:21f9:cdb1:5c8a]) by DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::f144:21f9:cdb1:5c8a%9]) with mapi id 15.20.5332.021; Mon, 13 Jun 2022 17:47:04 +0000 From: Soft Works To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH v14 4/5] libavformat: Remove MAX_PATH limit and use UTF-8 version of getenv() Thread-Index: AQHYf0J4/HS9JaG/JUO4k628ixaVQ61NkYpw Date: Mon, 13 Jun 2022 17:47:04 +0000 Message-ID: References: <20220613162626.11541-1-nil-admirari@mailo.com> <20220613162626.11541-4-nil-admirari@mailo.com> In-Reply-To: <20220613162626.11541-4-nil-admirari@mailo.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-tmn: [0yiK69trlHMNwUnBdrHZ8bcdupazJ8PZ] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 858f1ff6-0783-4274-3519-08da4d64ba6e x-ms-traffictypediagnostic: BN0P223MB0117:EE_ x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LH1sgBb2yCUqp8SZg+HvgMALShFRLLlYAndJn26sSi8PnFwpBJ4YB/NBfgBIahChz8+nA4d8btUT0lOQqf+vKNIVnn+nDIjMi/1eaSFX5o1k7tehu129JWwFQy3t43K9/3g+iMaKypWPvzKRdni/4sguwgDjdFq9nlge0HvlYrO/Pk2ptA8jqvQpaJ+4DOz9mI2nzMTQVl/zIdeUQfkDIPI458n+YZEC1rR0KuHQsI7SUWAYC3OWaDVDIDuCeK51QAxIwTv4MbkPy4V7kQ+Slc9Cxbz5GMmkic0oktgB/Xko2WBfXny60FAUk1cEApgz5btts4711fzwAPrjsgSMPEBLARRJRPKjNlSRTrLXuIrVcTtEDzmRsZvEXI8hxebGFKuo0WKpYEvEQvrNlKUPDp1mry8xs3s56zLK570X6Xpm1QBsboZeulioJzro1R/OcOWmVlX6ip0/hL4DPd5SLmRN8YOknjoGJJw53cvfwAJa7r/syx835Zy42pyAy+K7OLgOSBPw25Il3iqpWW2LHfN4OHobtFY1jlYdUmhmF6RtZxTeku/OpLT7Hq1wO/lfH2fhEvY0X2Cq40w24GzdAQ== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VmxQWXVjSExFYVRtT1VhdGZGaFJJdHE5VlRoalFvSDRNemZtdDN4eVMrOXJm?= =?utf-8?B?YVY0S3I2MVJ4WkZSbllLSHpXR05CVTZ0a0Izd1dhVjA4eHJTWlFDWmZuSm5p?= =?utf-8?B?bGpnK1pYODhMWmNEVEdiWjlVRjRES1B3Ulk4RnpVeWgzdXk1MXg0S1pJUHk4?= =?utf-8?B?NW9QYnc0WlZDUnRiSThZbVFVTUcvejhHRHhpZXNSNWlkRFA0WnRqMHVSV1pm?= =?utf-8?B?VUtTT1pPejFvQWNtWmFTQkQzd1J3UzF4TDdHY0xDS0ZDa0p6YStpR1JjZjFs?= =?utf-8?B?YVZJK1UrNjlBOGVCTkpJY0NoeWVIN0VqVVplODBGUER0T0twS3pmWFYzT2pW?= =?utf-8?B?eDhxYTdrLy9IQ2pjeUNETWdwQnBkdytSNVA5dVptMmNGUG9XaVB5ZVlIaXcv?= =?utf-8?B?dmVOWk55c0k3a3ZYTXZwQVNIeVFRMm90Yk5Id2xMSk8vZGpORnNiSWZLQmdB?= =?utf-8?B?L29aUVF5R0pLRTZnUmlyRzN5aVlhWHFPeWtBWWFzVEVIVlppMHNIN3I1T2Ev?= =?utf-8?B?R0JGUWxiZ2NHUmhueTRadU1kTGE5L3h1cENGM0JEeU5zRHhtYW82R0FkdHRh?= =?utf-8?B?WFJRcUpsKzNiK1VRU0tpOGEzOVg2ekxpMTVBZmVhNXZWUGV0UXVMZ3d0YkZk?= =?utf-8?B?NDh6ei91VWpJQjFTM2xGSzFFQWpVTHRXdXZsVFZld2E4R3Nic3ZhMUFGejBn?= =?utf-8?B?UGQ4N3ZuWVZLamVySFkyb3p1VFJLbWtHdW56dWdPZ1hPSk00dGFDKzVJWlBq?= =?utf-8?B?Ly9LL1dGTm9SMGhXK1lTeENxSSthMmxtaEoreUYzYzFzOVdscVVTRHpzNVJv?= =?utf-8?B?R3VGZStodzgvcENYcU9lc0NjWXJzbWIxdEh3cEJNOFNIclJ5QnlTZlVtUmRr?= =?utf-8?B?RFFiRlJZOXNpdzdxSkd0eWVKNTduMWsrYVJRbmx4T0g4Q2RlQWRRZy96djZY?= =?utf-8?B?cVN0c1QvdzRiR0c3elJwKytvanZTU0tucDBuc2xBdENuRExVLzdJTUtteVoz?= =?utf-8?B?cDl4dEFxaGFQaTNhTCtQc0JyV2hTU0FjNzY0a0JYOTlXRlJ4U1A4UW10OWZ5?= =?utf-8?B?cHdDTnZ3MWlGaW5objc2N0llcVFpNGJaUk11c1h2Sk5JUUc1N0prbkZaV2J4?= =?utf-8?B?VUhWYm4vNVpTWlZuZUFtanRHTS9pZFI0dWxDMUg4azlWWWZDdzg0d01ta0RW?= =?utf-8?B?VnptWVpteld0eHdmQVRRR0xwNjVzTDFOTkRiT1pMRFVUOVJoZWpBN3BjY2xx?= =?utf-8?B?anQ0Y3M2ejduMnBWM0hUbXVLZmFLZVpNNGRyOTBFUnppSkJVUXhVd2RVOFJV?= =?utf-8?B?RlVhV3EvVkNGSXRZcVpyYXZBRWdGM2pYNHozQkdMMGpjSnZZcTdSa1pyaXlS?= =?utf-8?B?NEdHOStWbmFFbVhKczNTdjFxVUdPVk4raHlsZjFnUlExWndkSk9VWGVseURF?= =?utf-8?B?R21mV1FrUHRNc3E4QncwaCtFRTZycU53Q0wrN3FYMUoyQlVjaTY2Nk5TTXdJ?= =?utf-8?B?NVhkaE5TTmxFb3pPZWhhNjFBYUs0OUZDcU1ISmdSMkwxVktybUdHeCtWTDFJ?= =?utf-8?B?OFloRVNKR2dMZ0Y3SllvTkFOSEllNitMdDBsaXF3TFBXYlhMaDFnVlN3TFNt?= =?utf-8?B?cC85ckhwSjJxcVYybzliUmZQN0phK0E1SjZKVEJkU2tpRkFJUUtTTlUraWxw?= =?utf-8?B?QnhOZnEzQS9Ua1VURTh3V3p3blc1UUxqb1ptaHBCdldPdzVTL1crVmtqUml0?= =?utf-8?B?bGpYZllwRkNML3poVDlacVRycFNMQWU4OG5WMlYzZ2RBU0JkdWdUNlphRGZm?= =?utf-8?B?bjkyY29HQzZKRGxBbGhydXdUSFRrVkdEaHpXTVR3NDh1eGpIdFhqWjU1UjdD?= =?utf-8?B?eTJjbngyVDg3alByQ3BzM3JuUkg5MnpYSTBSNXhtSUo1Z0ltZ0xhanBCeXBk?= =?utf-8?Q?E94DueED8Es=3D?= MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-1ff67.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 858f1ff6-0783-4274-3519-08da4d64ba6e X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jun 2022 17:47:04.5887 (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: BN0P223MB0117 Subject: Re: [FFmpeg-devel] [PATCH v14 4/5] libavformat: Remove MAX_PATH limit and use UTF-8 version of getenv() 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: > -----Original Message----- > From: ffmpeg-devel On Behalf Of Nil > Admirari > Sent: Monday, June 13, 2022 6:26 PM > To: ffmpeg-devel@ffmpeg.org > Subject: [FFmpeg-devel] [PATCH v14 4/5] libavformat: Remove MAX_PATH > limit and use UTF-8 version of getenv() > > 1. getenv() is replaced with getenv_utf8() across libavformat. > 2. New versions of AviSynth+ are now called with UTF-8 filenames. > 3. Old versions of AviSynth are still using ANSI strings, > but MAX_PATH limit on filename is removed. > --- > libavformat/avisynth.c | 39 +++++++++++++++++++++++++++---------- > -- > libavformat/http.c | 20 +++++++++++++------- > libavformat/ipfsgateway.c | 35 +++++++++++++++++++++++------------ > libavformat/tls.c | 11 +++++++++-- > 4 files changed, 72 insertions(+), 33 deletions(-) > > diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c > index 8ba2bdead2..a97d12b6b6 100644 > --- a/libavformat/avisynth.c > +++ b/libavformat/avisynth.c > @@ -34,6 +34,7 @@ > /* Platform-specific directives. */ > #ifdef _WIN32 > #include "compat/w32dlfcn.h" > + #include "libavutil/wchar_filename.h" > #undef EXTERN_C > #define AVISYNTH_LIB "avisynth" > #else > @@ -56,6 +57,7 @@ typedef struct AviSynthLibrary { > #define AVSC_DECLARE_FUNC(name) name ## _func name > AVSC_DECLARE_FUNC(avs_bit_blt); > AVSC_DECLARE_FUNC(avs_clip_get_error); > + AVSC_DECLARE_FUNC(avs_check_version); > AVSC_DECLARE_FUNC(avs_create_script_environment); > AVSC_DECLARE_FUNC(avs_delete_script_environment); > AVSC_DECLARE_FUNC(avs_get_audio); > @@ -137,6 +139,7 @@ static av_cold int avisynth_load_library(void) > > LOAD_AVS_FUNC(avs_bit_blt, 0); > LOAD_AVS_FUNC(avs_clip_get_error, 0); > + LOAD_AVS_FUNC(avs_check_version, 0); > LOAD_AVS_FUNC(avs_create_script_environment, 0); > LOAD_AVS_FUNC(avs_delete_script_environment, 0); > LOAD_AVS_FUNC(avs_get_audio, 0); > @@ -807,26 +810,38 @@ static int > avisynth_create_stream(AVFormatContext *s) > static int avisynth_open_file(AVFormatContext *s) > { > AviSynthContext *avs = s->priv_data; > - AVS_Value arg, val; > + AVS_Value val; > int ret; > -#ifdef _WIN32 > - char filename_ansi[MAX_PATH * 4]; > - wchar_t filename_wc[MAX_PATH * 4]; > -#endif > > if (ret = avisynth_context_create(s)) > return ret; > > + if (!avs_library.avs_check_version(avs->env, 7)) { I like the version check. I don't know about all the derivatives of AviSynth, but I assume you have checked that it's valid for the common ones (or at least the original non-Plus variant)? > + AVS_Value args[] = { > + avs_new_value_string(s->url), > + avs_new_value_bool(1) // filename is in UTF-8 > + }; > + val = avs_library.avs_invoke(avs->env, "Import", > + avs_new_value_array(args, 2), > 0); > + } else { > + AVS_Value arg; > #ifdef _WIN32 > - /* Convert UTF-8 to ANSI code page */ > - MultiByteToWideChar(CP_UTF8, 0, s->url, -1, filename_wc, > MAX_PATH * 4); > - WideCharToMultiByte(CP_THREAD_ACP, 0, filename_wc, -1, > filename_ansi, > - MAX_PATH * 4, NULL, NULL); > - arg = avs_new_value_string(filename_ansi); > + char *filename_ansi; > + /* Convert UTF-8 to ANSI code page */ > + if (utf8toansi(s->url, &filename_ansi)) { Two ideas came to my mind how this could be done better. What's actually needed here is not a string conversion, we need a valid and usable filename, and the function could be more something like "get_ansi_filename()". The first thing that this function could do is to convert the the filename to ANSI and right back to UTF-8, then compare the UTF-8 result with the original UTF-8 string. When both are equal, we know that the conversion is safe, otherwise we know that it won't work. Then, we can use the win32 API GetShortFileName(). Which returns file and directory names in 8.3 notation which (IIRC) contains only letters which are valid in the ANSI code page. 8.3 file names do not always exist (depending on system config), but it's always worth trying. Should both of these procedures fail, we could at least output a useful message, explaining why it doesn't work. Let me know what you think. sw _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".