From patchwork Tue May 24 08:43:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 34727 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp426954pzj; Tue, 24 May 2022 01:43:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyHfRbFOVg5HDIX/WJOSKEKKbPbhAiOU+Zf9IgaHg+8BWnGLCDpos+j1ptH6K/D0/VgfkYn X-Received: by 2002:a05:6402:50ca:b0:42b:e01:a199 with SMTP id h10-20020a05640250ca00b0042b0e01a199mr22406463edb.300.1653381823504; Tue, 24 May 2022 01:43:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653381823; cv=none; d=google.com; s=arc-20160816; b=H6uwM9tv6okvHj02achT3XjrDj70NWLED+xUxX9v6BAeP9T6R5vsOLqgvYiZe3Bz/x M5EyAn+AxjYBWaKf89bynvWG+nK6JVhZ0UJdMXgryI3y/RPFF+qmAK5t1c6pUNxXeSv+ ddAk+DT4/enXsT4AAnNuAMJfkoisHinzEFW56H1zpofp4/FS3lTwXKHUDDppFCPG2wuT bQac+YOrAvqfKLgE4P0hRpFPrVqXq4mTyQl6wFLp+LX37zKlryI/CaVbyLtnjao+LDTd fV3sBAEeNBXJpEaUtQZGdwMfcrJg2VuxUnzj4j/XmihUNBB1E4mN6XSB/L+jFet49XdL Ncgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:to:mime-version:fcc:date:from:references :in-reply-to:message-id:dkim-signature:delivered-to; bh=nOS6LccvIsSNe6lFF7kW0bh7S/jjzNgH3M6VEPMXoiM=; b=MGcC/jBGLi1pRcuXEUUtnxZfjyNbHlqf3F4HjMWREiNQq4Dm59eTuZToUOfi/IapfI j9i4MYpxknZuALr3KdF/3KPdVN0f4lp6dD5JTRXumTqHZn7hljmpyqfZmA4ZQZM+FYHL BZZT3pAXP7jEC9B3uiklU/+RyeXpKgb2uqbi3SO/5hIwg06mmDqg4GOMQ3oalI5j7E8K 8EWSFPuK4Zk13MqBTLvlorNXzZO/XQxzfEkquYSe6wVF1KdKjuOsfoIaczQpOxngOMkz bikEaKsl2lmAjhXEoCWu1VZvPOhu6rE5bBt72CScJp2iAUZ9uDQrGH82Dj+GVi4Izl3P rntg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=mKdBHZBC; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hc33-20020a17090716a100b006ff05cc7140si1314339ejc.255.2022.05.24.01.43.42; Tue, 24 May 2022 01:43:43 -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=@gmail.com header.s=20210112 header.b=mKdBHZBC; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5559368B51A; Tue, 24 May 2022 11:43:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B6F7268B1F7 for ; Tue, 24 May 2022 11:43:31 +0300 (EEST) Received: by mail-pl1-f173.google.com with SMTP id s14so15281517plk.8 for ; Tue, 24 May 2022 01:43:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=iuhZ7BIQDkp8XhvGGC0+AEmj83fLGO9rDk6L/to3ufg=; b=mKdBHZBCgDJHSOjDxujkTzpILBXoKMmrsTKinTiR+aEHS2nEvf7SKTaBFnHaWWs+J2 M1OdE86yYdymw1RwlBeu5SqJDEqXRIUwVrI6Z9FZFc4ST5ZZrDrnNYEbfQrFvr8XdVmz 0yoaVHRiseJCXuCYXzbhJMH9SIKTSYvqoAMfkZDttKyODDqgzfoStjR6YmM/DHJggJ4p LzvCEctbV1QEdaJP6JIaa6YgGUGwoA4s6bmYJt8oJTqYl0VGLV9bRen8n4khWifkRehK 5UlxhPpp6S0lQMvA+dA+3n4bT9lBBjv5nl/0J/ERswutqge2B/FtXUWT5eiaKcofwi1u 1EcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=iuhZ7BIQDkp8XhvGGC0+AEmj83fLGO9rDk6L/to3ufg=; b=5kdIltMUdAHU08ERPipSQkHCZVPOwbmF0bZrad6f/aSJMxBBcI/kBAeM4c/w9O4el9 cUHmHoXt/Zxe00Bxtyln1kwM1djrj+WNAbbik1MVVf1K7MMjMo/1JXeZQqtBiomsjICs oTYoteVuIfe3cVSN+SYYykNjLELC+4EEGgIlNqrkT0505yDs6daETLtKbQsizBYtOScz v4uZjFKzZWO6O3617WzTUa1BELkwIKOocd/nYhWlRrthppGYiAVMH2PZUFWaMzsMfjxV 58p+foTPMZuI8mzz25TqOIhnjyvn2lmtE3lddG078oeXfXiCP1PNaKy1uu4M3JWwibQa xEDQ== X-Gm-Message-State: AOAM533Yf1dCPyYtJ+Mm1pRM+GeFW64fpiLa6B0KtPBmTtP4hQxrjhqJ L9pw0vUcI8HZ5Se+sFFJ3VPlIsknVKqSGg== X-Received: by 2002:a17:902:da8c:b0:162:33b5:6aa1 with SMTP id j12-20020a170902da8c00b0016233b56aa1mr5351855plx.75.1653381809970; Tue, 24 May 2022 01:43:29 -0700 (PDT) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id w5-20020a170902e88500b0015e8d4eb201sm6708417plg.75.2022.05.24.01.43.28 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 May 2022 01:43:29 -0700 (PDT) Message-Id: In-Reply-To: References: From: ffmpegagent Date: Tue, 24 May 2022 08:43:26 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v5 0/2] Support long file names on Windows 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: softworkz , Hendrik Leppkes Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +dY7Nyoo2CCf This patchset adds support for long file and directory paths on Windows. The implementation follows the same logic that .NET is using internally, with the only exception that it doesn't expand short path components in 8.3 format. .NET does this as the same function is also used for other purposes, but in our case, that's not required. Short (8.3) paths are working as well with the extended path prefix, even when longer than 260. Successfully tested: * Regular paths wth drive letter * Regular UNC paths * Long paths wth drive letter * Long paths wth drive letter and forward slashes * Long UNC paths * Prefixed paths wth drive letter * Prefixed UNC paths I have kept the individual functions separate on purpose, to make it easy to compare with the .NET impl. (compilers should inlinie those anyway) v2 * wchar_filename: Improve comments and function documentation * os_support: adjust defines to use win32_stat v3 * removed length check in path_is_extended() * added path_is_device_path() check in add_extended_prefix() * add_extended_prefix(): clarified doc and add checks * clarified string allocation length calculation * replaced 260 with MAX_PATH * removed redundant checks after normalization v4 * rebased. no changes v5 * resolved the ugly struct duplication * compatible with _USE_32BIT_TIME_T softworkz (2): avutil/wchar_filename,file_open: Support long file names on Windows avformat/os_support: Support long file names on Windows libavformat/os_support.h | 16 ++-- libavutil/file_open.c | 2 +- libavutil/wchar_filename.h | 166 +++++++++++++++++++++++++++++++++++++ 3 files changed, 178 insertions(+), 6 deletions(-) base-commit: 6076dbcb55d0c9b6693d1acad12a63f7268301aa Published-As: https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-28%2Fsoftworkz%2Fsubmit_long_filenames-v5 Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-28/softworkz/submit_long_filenames-v5 Pull-Request: https://github.com/ffstaging/FFmpeg/pull/28 Range-diff vs v4: 1: 13118dc1fa = 1: 13118dc1fa avutil/wchar_filename,file_open: Support long file names on Windows 2: 252ed89499 ! 2: 5313aeec0e avformat/os_support: Support long file names on Windows @@ libavformat/os_support.h + + struct win32_stat + { -+ _dev_t st_dev; -+ _ino_t st_ino; -+ unsigned short st_mode; -+ short st_nlink; -+ short st_uid; -+ short st_gid; -+ _dev_t st_rdev; -+ __int64 st_size; -+ __time64_t st_atime; -+ __time64_t st_mtime; -+ __time64_t st_ctime; ++ struct _stati64; + }; + # ifdef fstat