From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by sourceware.org (Postfix) with ESMTPS id A0C83386F037 for ; Thu, 14 May 2020 02:32:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A0C83386F037 Received: by mail-ed1-x52a.google.com with SMTP id g9so1094120edw.10 for ; Wed, 13 May 2020 19:32:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=v1YIwNRRdePhMCmonZAJG/7QA6nJNJKbudw1tftubec=; b=m+veN89cnT/X6PstuZyEhkj5/ZAhfyln5UI8EB27w7ChLj3gpxRDlIbw1SlE79aZ3C 9EBRH3cpZbA6Al0D+8Z9CY2putwjj5KUjO3p5D5zPvTZBNSc4wshLm0aRpdf+Lv5UhyD xx/h0jHVVG3zK68ZdPrTBnBNC1sHQOupZ09VEZShIzDgD7n8ie+f9L1cVAdKPCcGThAY oKtwVNhf7GJOUeprnaj1owpWYwyCcjGj+znDIk4qwgdFGFZsxMMn9n1ygrSnr5JNIOzV 6OmQFpI63IZqhFIWOflZWzptnNry8udxtsTWi+3Qhi1z42nvMUT2VHQZ6SVXidD8DuXY eNIw== X-Gm-Message-State: AOAM5303ZK+DMtBwsWzcyyWIlfCMS9A/VK9wPkgai2qm7T6iiJXTdYo+ bK4KhY/YOBzGpXctF9N7yFv1x3CA9hRyyXyCTn3TkhZF X-Google-Smtp-Source: ABdhPJzN8BDfAstiXBAPsQHxnM3TU3P/ptEDTavq5bhRuCX3wEeeI6QpFy8FDjnRopvZk1qYu6hL4RLYXbZRXwvNWxg= X-Received: by 2002:a50:8749:: with SMTP id 9mr2109568edv.164.1589423557137; Wed, 13 May 2020 19:32:37 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Jason Gross Date: Wed, 13 May 2020 22:32:06 -0400 Message-ID: Subject: Re: patch command incorrectly capitalizes filenames that live on external USB flash drives To: cygwin , Marco Atzeri , Thomas Wolff , Brian Inglis X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, KAM_EXEURI, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USB_DRIVES autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: cygwin@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 May 2020 02:32:41 -0000 By the way, when I run the same script on the same flash drive from WSL, it works fine, and does not capitalize the filename. So this does seem to be a cygwin-patch specific issue... On Wed, May 13, 2020 at 8:31 PM Jason Gross wrote: > Sorry for the late reply; I can see replies to my messages at > https://cygwin.com/pipermail/cygwin/2020-April/244660.html, but > somehow I'm not receiving them in Gmail. I've tried (re?)subscribing > to the cygwin mailing list, hopefully this fixes the problem. > > Thomas Wolff wrote: > > You are throwing a puzzle into the mailing list and if you are lucky, > > someone may like to solve it. > > But perhaps: can you try to minimize your test case, please. > > Something like: touch Makefile; ls (if that's it). > > I think there's some sort of misconception here. touch and cat create > correctly capitalized files, and sed -i doesn't change capitalization, > even on my FAT32 drive. patch is the only command I've found so far > which capitalizes filenames when modifying files. I can try to dig > into the source code of patch and figure out a minimal C program that > breaks casing on files, but, come on, the fact that patch seems to > capitalize the file name of every file it modifies, and no other > utility does this, that seems like a pretty minimal test-case to me. > And anyway, the cygwin patch sources (version 2.7.4) are impossible to > compile, because safe.c can't find sys/resource.h and passing > -I/usr/include via CFLAGS hits an internal bug in patch's configure > script (search.h: present but cannot be compiled; sys/timeb.h: present > but cannot be compiled; fcntl.h: present but cannot be compiled). (I've > emailed > bug-patch@gnu.org as requested by the configure script, but so far > https://lists.gnu.org/archive/html/bug-patch/ isn't showing anything > newer than January.) > > Brian Inglis wrote: > > That might be expected with FAT32, which is normally the default format > for > > flash drives, for maximum compatibility with microcontrollers, which may > not > > create VFAT Long File Names when file names are <= 8.3, so they appear > as upper > > case. > > This does not explain why `ls` displays "Makefile" as "Makefile" > before I run `patch`, but displays the filename as "MAKEFILE" after I > run `patch`. Nor does it explain why this happens to patch-modified > files, but not to files modified via sed -i. > > Marco Atzeri wrote: > > use a flash driver with NTFS and check the difference > > Indeed, I can confirm that this issue occurs when it's FAT or FAT32, > and does not occur under NTFS nor exFAT. > > > I doubt it is a patch issue > > Do you have another utility that you suggest I try that you think will > display the same problem as patch? So far, `| tee -a`, `sed -i`, > `touch`, `>`, and `>>` all do not display this issue, while `patch` > does. > > > -Jason > > > > > On Tue, Apr 28, 2020 at 3:27 PM Jason Gross wrote: > > > > Consider the following script in foo.sh: > > ``` > > #!/usr/bin/env bash > > > > set -ex > > > > cd "$1" > > rm -rf foo > > mkdir foo > > cd foo > > cat > Makefile < > a > > b > > c > > d > > e > > EOF > > cat > diff < > diff --git a/Makefile b/Makefile > > index 9405325..86d2f8c 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -1,5 +1,5 @@ > > a > > b > > -c > > +ccc > > d > > e > > EOF > > patch -p1 -i ./diff > > ls > > ``` > > > > If I run `./foo.sh /cygdrive/c/`, I get, as expected, > > ``` > > + cd /cygdrive/c/ > > + rm -rf foo > > + mkdir foo > > + cd foo > > + cat > > + cat > > + patch -p1 -i ./diff > > patching file Makefile > > + ls > > diff Makefile > > ``` > > > > If I instead run `./foo.sh /cygdrive/h/`, I get > > ``` > > + cd /cygdrive/h/ > > + rm -rf foo > > + mkdir foo > > + cd foo > > + cat > > + cat > > + patch -p1 -i ./diff > > patching file Makefile > > + ls > > diff MAKEFILE > > ``` > > > > My C drive is an internal SSD (NTFS), my H drive is an external flash > > drive (FAT32). I installed cygwin with the commands: > > ``` > > powershell -Command "(New-Object > > Net.WebClient).DownloadFile('http://www.cygwin.com/setup-x86_64.exe', > > 'setup-x86_64.exe')" > > SET CYGMIRROR=http://mirror.easyname.at/cygwin > > SET CYGROOT=H:\cygwin64 > > SET CYGCACHE=%CYGROOT%\var\cache\setup > > setup-x86_64.exe -qnNdO -R %CYGROOT% -l %CYGCACHE% -s %CYGMIRROR% -P > > rsync -P patch -P diffutils -P make -P unzip -P m4 -P findutils -P > > time -P wget -P curl -P git -P > > > mingw64-x86_64-binutils,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,mingw64-x86_64-pkg-config,mingw64-x86_64-windows_default_manifest > > -P > mingw64-x86_64-headers,mingw64-x86_64-runtime,mingw64-x86_64-pthreads,mingw64-x86_64-zlib > > -P python3 > > ``` > > > > Running `patch -v` says `GNU patch 2.7.4`. Note that this happens > > regardless of whether I install cygwin itself on my external flash > > drive or on my internal HD. > > > > This came up when trying to run `opam install findlib` (which fails > > when the home directory is on an external USB drive). > > > > -Jason >