DMARC-Filter: OpenDMARC Filter v1.4.2 delorie.com 612CQ16E3128160
Authentication-Results: delorie.com; dmarc=pass (p=none dis=none) header.from=cygwin.com
Authentication-Results: delorie.com; spf=pass smtp.mailfrom=cygwin.com
DKIM-Filter: OpenDKIM Filter v2.11.0 delorie.com 612CQ16E3128160
Authentication-Results: delorie.com;
	dkim=pass (1024-bit key, unprotected) header.d=cygwin.com header.i=@cygwin.com header.a=rsa-sha256 header.s=default header.b=e+HKZJ1p
X-Recipient: archive-cygwin@delorie.com
DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 401F14BB5927
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com;
	s=default; t=1770035159;
	bh=rAjt2eyR3FcdJJSAVmnjmPJXgsQExaerKn3hIoN2CWA=;
	h=References:In-Reply-To:Date:Subject:To:List-Id:List-Unsubscribe:
	 List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:
	 From;
	b=e+HKZJ1pQrX9lPx5KUWNkxoKf6F+vOJz6a3dd0zu0Y8DECgjkfZS/M+rjtHuZ7wYY
	 e9BO+g/wKMwY/c+mXxg3LTLtsm1BjKN1nDLkAQqze5GFigBidrQjVgKf23da1qSZsV
	 pRj/CMuqgEU+4qSVk9l+okxUvyJake5zdpBzrsHI=
X-Original-To: cygwin@cygwin.com
Delivered-To: cygwin@cygwin.com
DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 334BD4BA9035
ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 334BD4BA9035
ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1770035109; cv=pass;
 b=EuzNagpfrXdZpIcIXIOrgTaDZQTOxD4IP6GaYi0r/KKU/1Iwxeiz3kdb9iMPYCr9KX5aIduOtAHZtEhwuWhpjW3XXRtMSb6U6nFvO8JTIxcytbsWmC9/g/q9VbtTebc7aXrMh0s6Deho8yhXotqept8nfpiWExsKXFZT4b5Mchw=
ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key;
 t=1770035109; c=relaxed/simple;
 bh=IxSQx/p/OZBxuKfBnZHf32ZJwAH4JzEG5R9bHtF/iOo=;
 h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To;
 b=wQsj8Zt5W99SubQ49YL7OIDy+hq4rZqJ6T6cEOX/x41ksVCy6+GrPcb9za93fbh/nSgh1ye4Z/w6V0R9+vQnyk1xAWIkdLIa0u040KpQ3xaXCGre4J35K/xhBMahOnRvoh8+0XU1WD7Dfc87ShOgWQ0cSelp+XXp3pGzRPYxHik=
ARC-Authentication-Results: i=2; server2.sourceware.org
DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 334BD4BA9035
ARC-Seal: i=1; a=rsa-sha256; t=1770035108; cv=none;
 d=google.com; s=arc-20240605;
 b=C4fEvlEpzLAYc9J0Ps7hcSXWg3JgETuFg4Yag9MIEUz4buy8u8gVhiEbUjP3lUHHNY
 cOPBNdX54GI60Hu7biUVIyITSGmfVk5ZtEyrcGtFYVF5aEoPTF1kxw3DX/VFAlwI4UuU
 5Di/JcJ0Q5BCvkBj75cRy3qbm4A4j9epIi+xrcSQ/D3MJH18usX2pWBcErVdmlUwpw+M
 0hnxYrRWrqyucZIFrNg6fo2y9lnlYLXLbeiEsusMoG2Gr9EO+30RTQshSFreW329SOuK
 UkFJAI754dkAO/iyy63wbEZj79Xxxgmt1O41mtH1VF4YfXEBA0XQAwKO7nXBh+kdBD9k
 XOvw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
 s=arc-20240605; 
 h=to:subject:message-id:date:from:in-reply-to:references:mime-version
 :dkim-signature;
 bh=kTIK+VbYKiNF/9R7UXv2KkyzFuHKkB42TQ/7vb+XSaw=;
 fh=UKNFaOBO97U3RYl3PEse//nArTqr7SLJjCCEBz281Ew=;
 b=gnowo4hO6Swg3VX/42pVH3UGtI/Ex8Drab6/eG7m6qagLx0K26HpPXx29eb038oCiZ
 dNr8NxOyyW/TEfTP14mnMRVYQ+bHNXVowF1aUPylrv05OAxdAqvTnlsTdYXKXIKzxney
 JGUVeugiJDMl/z3hC35PJb0QPLxTSObxvECBHHRe6eIcAqqXn1UN7ls4c3HPrjZhK7T5
 YaFngO7l3O8w0gDk8uG5kJ2ryWKNrNuErAwDVBXhPSRcyNiyYVAiBZKlo08+uIx7HLIM
 Ea9kwsZpfTJjcKr1zZRjH/mYpYHVBMn+CrzmzHJdD1k90bN2k1urIp037EzKYz/Lbhm6
 5ReQ==; darn=cygwin.com
ARC-Authentication-Results: i=1; mx.google.com; arc=none
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1770035108; x=1770639908;
 h=to:subject:message-id:date:from:in-reply-to:references:mime-version
 :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=kTIK+VbYKiNF/9R7UXv2KkyzFuHKkB42TQ/7vb+XSaw=;
 b=YtvvG6Cs0oWeZGCFas0DtXhcjrKrt78dFZku3AsdcWEiiOsCoCtK0QBIezx6K59SX8
 HK9w3u+p0a7knOC1muNelppIzat/THBl9FeR9344h+YIHHt6gZCdxlOuthEu/TVGpl6W
 W55VQMInfczaI/GSVZJrZ6rd98nsmAeppnrjBVsX70yfg2dtOFYRvKYzZ+MQQmc5JYu4
 aimmhlm2HJPP9Hx48AEUeceZveUzHnpxArGSBJK32dpOHTV/jPhBuSNpxP20oLAqadzx
 Szkurn17wKwEhkXTGjtjggZOgnSFcDl+e6149dIGujXOXbKBZmXL/M9Yzt9aM1gR4Hrl
 O4LQ==
X-Gm-Message-State: AOJu0YxGwqOXLEd7ZLdst5k5reOYnWVLqaL8vV/SECE1cmT5JWuu8Gab
 Yken8yUmlHNJCsLeeHPhSMx0oRDxpRkMpTI3C5biRKMe5vem9WKg/slLFvQTHmU2V2Kt0x2MizZ
 pGgpZqFN60tR41JpEqCsrEPzsYOxnRHlJ4EifwwE=
X-Gm-Gg: AZuq6aJSN3FGUEzhoeBMe+BmjMgEN9iTMES6yYOzABJYSJ1M3liYULdVxJODqBr7hkF
 CtlqACEiqHwS5MlffncpJ9AvLNnwYIM8G780EpbqWk3LD1iLnDnyIEJ+58Aet8rk/+qOba3QJsf
 Dtvgn5TuXpM3+miU8ymwGZs45O5H8LpcsZrW8t3rK1Azdy1Hs1ciPaHpSv4x+cGcxRRvpN8f6TX
 U5R8MMNMOKNwbjt+4sDQlEMM3WEWnik6Gy2G5yQnS+4J8AxY+B7TyMcR4I97zoXbEDPfaF77zuP
 EXk+XA==
X-Received: by 2002:a05:6512:61a5:b0:59e:3041:8a2b with SMTP id
 2adb3069b0e04-59e30418afcmr67265e87.46.1770035107304; Mon, 02 Feb 2026
 04:25:07 -0800 (PST)
MIME-Version: 1.0
References: <CAAvCNcDzoq3skCwRuYa2LLTTA3xsnK+eDLB8_SegJZinatMUSg@mail.gmail.com>
 <fc1bdd5b-7732-4430-a130-70ef662acd36@dronecode.org.uk>
In-Reply-To: <fc1bdd5b-7732-4430-a130-70ef662acd36@dronecode.org.uk>
Date: Mon, 2 Feb 2026 13:24:31 +0100
X-Gm-Features: AZwV_Qh2hwXB8GsoVS3C0CXf-qpWmGuT4oikgk_bdm4WucMSnHhi1M3Ie6imyfE
Message-ID: <CAAvCNcAAoJeX470QBp9x+A=zSupb_5TpVDeqnbsJS9dtd-oXQg@mail.gmail.com>
Subject: Re: git fsck complains about error:
 refs/tags/.cyg000000000559e25517156b51cf219f51/libgcj-2.95.0:
 badRefName: invalid refname format?!
To: cygwin@cygwin.com
X-BeenThere: cygwin@cygwin.com
X-Mailman-Version: 2.1.30
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-request@cygwin.com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
 <mailto:cygwin-request@cygwin.com?subject=subscribe>
From: Dan Shelton via Cygwin <cygwin@cygwin.com>
Reply-To: Dan Shelton <dan.f.shelton@gmail.com>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: "Cygwin" <cygwin-bounces~archive-cygwin=delorie.com@cygwin.com>

On Sun, 1 Feb 2026 at 18:08, Jon Turney <jon.turney@dronecode.org.uk> wrote:
>
> On 31/01/2026 18:42, Dan Shelton via Cygwin wrote:
> > Hello, on Cygwin 3.6.6-1.x86_64 on CYGWIN_NT-10.0-19045/Win10 I get
> > these errors from git fsck when working on a clean clone of the
> > gcc.git repro:
> >
> > git fsck
> > error: refs/tags/.cyg000000000559e25517156b51cf219f51/libgcj-2.95.1:
> > badRefName: invalid refname format
> > error: refs/tags/.cyg000000000559e25517156b51cf219f51/libgcj-2.95.0:
> > badRefName: invalid refname format
> > error: refs/tags/.cyg000000000559e25817156b51cf219f51/libf2c-0.5.22:
> > badRefName: invalid refname format
> > error: refs/tags/.cyg000000000559e25817156b51cf219f51/libf2c-0.5.21:
> > badRefName: invalid refname format
> >
> > git fsck then exits with error code 8, breaking our scripts.
> >
> > Is this a Cygwin bug or feature running wild?
> Yes.
>
> These .cygXXX files are made by the cygwin DLL (I think it's something
> like a hardlink to the running executable so we can fork even if it's
> deleted, but I might well be misremembering the details) and are
> supposed to get automatically removed.
>
> Obviously, 'git fsck' objects to their presence, but it is safe to
> remove them.

I'm not sure whether the Cygwin code is correct. I did a peek with a
kernel debugger, and I see that FILE_RENAME_INFORMATION.RootDirectory
is always NULL if a file gets renamed to .cyg000000000xxxx. But if I
try that with NTFS or SMB, the NtSetInformationFile() to set
FileRenameInformation always fails.

I think this bug is there since a LONG time, and only bothers
filesystems which are not NTFS.

I made this testcase:
-x-x-x-x-x-x-x-x-x-x-x-x-
#include <windows.h>
#include <wchar.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>

#ifdef _MSC_VER
#pragma comment(lib, "ntdll.lib")
#endif

typedef LONG NTSTATUS;
#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
#endif

typedef struct _IO_STATUS_BLOCK {
    union { NTSTATUS Status; PVOID Pointer; } DUMMYUNIONNAME;
    ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

typedef enum _FILE_INFORMATION_CLASS {
    FileRenameInformation = 10
} FILE_INFORMATION_CLASS;

typedef struct _FILE_RENAME_INFORMATION {
    BOOLEAN ReplaceIfExists;
    HANDLE  RootDirectory;
    ULONG   FileNameLength;
    WCHAR   FileName[1];
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;

#ifdef __cplusplus
extern "C" {
#endif
NTSTATUS NTAPI NtSetInformationFile(HANDLE, PIO_STATUS_BLOCK, PVOID,
ULONG, FILE_INFORMATION_CLASS);
ULONG NTAPI RtlNtStatusToDosError(NTSTATUS);
#ifdef __cplusplus
}
#endif

static HANDLE OpenForRenameW(const wchar_t* fullDosPath)
{
    DWORD share  = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;
    DWORD flags  = FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT;
    return CreateFileW(fullDosPath, GENERIC_READ | DELETE |
SYNCHRONIZE, share, NULL, OPEN_EXISTING, flags, NULL);
}

int wmain(int ac, wchar_t *av[])
{
    wchar_t *srcfile = av[1];
    wchar_t *dstfile = av[2];

    if (ac != 3) {
        fwprintf(stderr, L"%ls: Usage: renametest <srcfile>
<dstfile>\n", av[0]);
        return 2;
    }

    HANDLE srch = OpenForRenameW(srcfile);
    if (srch == INVALID_HANDLE_VALUE) {
        fwprintf(stderr, L"%ls: Cannot open srcfile, lasterr=%d\n",
av[0], (int)GetLastError());
    }

    PFILE_RENAME_INFORMATION fri;
    size_t fri_len = sizeof(FILE_RENAME_INFORMATION) +
(wcslen(dstfile)+1)*sizeof(wchar_t);

    fri = calloc(1, fri_len);
    if (fri == NULL) {
        fwprintf(stderr, L"%ls: Out of memory\n", av[0]);
        return 2;
    }
    fri->ReplaceIfExists = TRUE;
    fri->RootDirectory = NULL;
    fri->FileNameLength = (wcslen(dstfile)+1)*sizeof(wchar_t);
    memcpy(&fri->FileName[0], dstfile, fri->FileNameLength);

    IO_STATUS_BLOCK isb = { 0 };

    NTSTATUS status = NtSetInformationFile(srch, &isb, fri, fri_len,
FileRenameInformation);
    printf("ntstatus=0x%lx\n", (long)status);

    CloseHandle(srch);

    return EXIT_SUCCESS;
}
-x-x-x-x-x-x-x-x-x-x-x-x-

Dan
-- 
Dan Shelton - Cluster Specialist Win/Lin/Bsd

-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple
