From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by sourceware.org (Postfix) with ESMTPS id C1A693851C2E for ; Thu, 14 May 2020 00:32:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C1A693851C2E Received: by mail-ed1-x535.google.com with SMTP id d16so936609edq.7 for ; Wed, 13 May 2020 17:32:00 -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=GskpVNsSXnWAm1iVQF0uxT9IQqQ3fKtIG77F55A6Pgc=; b=eLfARf4xmgk/kroCVdH6ugdlUsFOlIoBUX90Pte4o6T3DzhNK286wBmdZdqfZaqRpg Bl+NXs1HfMsVufWICl/RhOL0TF+VCKghe/RU5o0O/aET8Yp4D+b4eV09yc86Xhj0GaqH H4viU2n9nU9U6LriDHrNp7BWsTM0RcM8SrfgC5GXXb+SPu3LTKY7JBcBCNzlDqHEfFne HZWPOeYrP99K49pwPHC6r0MQw3pXi1FhzC29m1JruRNVvhHOy84X94Y1jYoZcL0mT/bp fQjafGjeqTfgcMbjy7cB1SQxo5iKAvQjuW4pBXwQlzpE+8AhOqu/NEmpPVzVBJfUs8+t kiOw== X-Gm-Message-State: AOAM5330ai6ihlmxcqVOuk2zoJFtHGoe1MQb5WOfP1qhu6w/dqFLtWVr wUd1liuWljmP0xc2s790dh+xN1Sd0DQmPb1Qp44hXGyyHEI= X-Google-Smtp-Source: ABdhPJy9iIptFXrruhoQJiiB3RXHv443KSWjBmrjRqmB0spPfvZEzLZPkc5vGOlKD28RIkk/915Hvc/fFxH1aiABzvU= X-Received: by 2002:aa7:c606:: with SMTP id h6mr1907801edq.265.1589416319133; Wed, 13 May 2020 17:31:59 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Jason Gross Date: Wed, 13 May 2020 20:31:31 -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 Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-11.4 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, 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 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 00:32:18 -0000 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