delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2024/12/17/10:36:33

DMARC-Filter: OpenDMARC Filter v1.4.2 delorie.com 4BHFaXdI023371
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 4BHFaXdI023371
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=vhnN1aNZ
X-Recipient: archive-cygwin AT delorie DOT com
DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D95C23858D35
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com;
s=default; t=1734449789;
bh=jKNm8adQ+R9GFZyVmiEHJ10s4pC6bxEpuur6SR856/E=;
h=Date:Subject:To:References:In-Reply-To:List-Id:List-Unsubscribe:
List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:
From;
b=vhnN1aNZMdkoZ22KfmGs9Sv19XzgwozENSdCbAiSTaSH0ymnDUToPaZExNSqJ8qbG
ffvH+Dv9yFUYjDZIWOrhAKl1M+Q5nFyTPfMkiesJfW0RJNPx55zEqc4uO1/rAgOksc
wTjk6mDsyoHipPy/UKxEQtUvKRN16EI/c5c8Y5Cg=
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E4EF03858D28
ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E4EF03858D28
ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1734449668; cv=pass;
b=rd0Ph8lPYnyqLP6RajTWujf7SAVxnPKR50TiHG6Pt46F8ayV8pwHfGN3uPnVeEIrsaj39v9KeqKbAwWGpKaRmmOMbh+wQ46EHakms25/7Iir1QO3yepuPEWjJGTY0csTyhdJ27IHCrkslIv9X6spymUfqveXrYvx7sS51F/9jtc=
ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key;
t=1734449668; c=relaxed/simple;
bh=cQJ3IaryYQyxCD/DjoKVnenYneRJV4PEHLqPXW6M/Wg=;
h=DKIM-Signature:Message-ID:Date:Subject:To:From:MIME-Version;
b=Fr+abjDpalDZtufYxXw24TW+j1/9Ekp+9jRxfqHszfKzDaRz0vUjdRP2YbQHoKtAYD0GqynOUaPokItuBO1oIqp1VJZtgRtH8PW7MN7xIfxdD927rPmqI9yn9fL0DsFyIUQ7B3c0z2G34fYGmHqJhbGcw7guzDSul2tYNd3dK4U=
ARC-Authentication-Results: i=2; server2.sourceware.org
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=N+rprbGOFwcy/o+yNONnj8ByQBy0xo3dqapa/+EWwY3CH7RF45ZMskvoWGctVae4cJdJEotl5u4m2BtUvM0mcWNtc0f46CKSwLlel41c+k8BuUvVyCGY/uyd5JrxEK1CO+5zko+z7v0zRqP4MTmMhwmUecayfmBexqJoSK8JuvBo2+P9MU33M+IIi9r8RccOwz016ErSvC3SnNHzF8YQBS/oeM4/MXUMfFGGbf/Afw6SUvWSs//ZZcNxrQdp8SGpjyFNjhWeYbuIJE3b7n2Qj3jEoGULHIuA2XxdPHQIa1XAXkRvAclEDLMKcEqO2KkDOfaNzcAqBp9bqp7EI9yPWQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector10001;
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=OMaS1/mM7WkbdQI4Q5udbyihBoSfvTwA1AmV21DpoaE=;
b=oFQjvVwDEufuGex8ibofn+u27YPTe9WLcsQNrPWA/S2VkyWetqDLmSShkqhzb3MpGEfrChXJ1PsHKRiRX2VyMkFX37vt7msfCA6QfklLqB6DQQvy0ft3ePed560AEZnSQD2dacNuTUga7Of7t7sfV0jOYHpN1oYsfowBB68Te3vIlunBJjjpcSom3Rzz2sBKA5DUkPuT16P/XrYWXUn+0YNx2ZP/+bMBQHCAh2E9gywrhnLQKOspYEHMJeiCtRdg5M/FSzYPKg+yuWz8kZBa0rwhde/PZ5Q2kpu03li++EmK34qJG/e4MLdsqzgjZ5ROEwI1OLg2eAYixBbBQ1d2Jw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=cornell.edu; dmarc=pass action=none header.from=cornell.edu;
dkim=pass header.d=cornell.edu; arc=none
Message-ID: <bb796c13-c2b7-48a0-899b-cc7485fee783@cornell.edu>
Date: Tue, 17 Dec 2024 10:34:21 -0500
User-Agent: Mozilla Thunderbird
Subject: Re: Atomic mmap replacement
To: cygwin AT cygwin DOT com
References: <66bf4f86-4618-b9a3-3e33-2c240b9204d0 AT cornell DOT edu>
<20180219090042 DOT GC3417 AT calimero DOT vinschen DOT de>
<e6b3bd42-f981-405e-b65b-529693598735 AT cornell DOT edu>
<d84f7f6c-5527-4f39-83a5-1aa16d8e451f AT cornell DOT edu>
<Z2AsCg7Oo4FyHFjG AT calimero DOT vinschen DOT de>
<b7564609-6a87-4691-b5ec-1f56b51543df AT cornell DOT edu>
In-Reply-To: <b7564609-6a87-4691-b5ec-1f56b51543df@cornell.edu>
X-ClientProxiedBy: BN9PR03CA0369.namprd03.prod.outlook.com
(2603:10b6:408:f7::14) To BL0PR04MB5140.namprd04.prod.outlook.com
(2603:10b6:208:56::10)
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: BL0PR04MB5140:EE_|SJ0PR04MB7774:EE_
X-MS-Office365-Filtering-Correlation-Id: 9f97b712-20d9-4950-a52f-08dd1eb04912
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016;
X-Microsoft-Antispam-Message-Info: =?utf-8?B?VEFnZzJZY211elBxdERLb3RpamR3Z2wzdTFmVW45VFRkeFBpUXZiaFZkTjFZ?=
=?utf-8?B?a3oxOE9nZ29PNXFmZlJ1ZTZCSmVWR0JRbXN5WWc1OVMwRUY0K0VwYmtIQlJw?=
=?utf-8?B?OU1aZFVBSEhjTDBQcXRrOEh5TmhrQitGTzJ5S2RaRlRETXh6TlIyQnREaFRJ?=
=?utf-8?B?UGhCTi9nZDNyVHorWVQ4QWRCbE91SlBaeXZMbEdJSUF5OFQ1bHE1aUNJWVI4?=
=?utf-8?B?WGRrL1c0ME13ajBxdlJVRU1mdk8zOXFJOFY0UTZCVkVublkybHFqSXRqVmRo?=
=?utf-8?B?eXdVeTJ1L2pYenY3S01nbk5rZ1QranMwcEt4QUM5VnlYdnFMdjR6Z2FaTHRD?=
=?utf-8?B?YlNpSnMrTlAybkNqRTlCZVpPMWtpQ05mTlc0N2xPc2hMK2FZMHhBVXp5ekZv?=
=?utf-8?B?MkdyM1hHL0hZMkVlcmpIWE14WUs1b3NRdkZWK21jUVI0dkE5S1pnVmRTckxr?=
=?utf-8?B?MXpUWGFweXhCZHJyRTVrdEEraHZLcDM4Uy9ia1lyZ0U0bTdvdFVWT1BpN09I?=
=?utf-8?B?OWFWMThzZ1M4WVNXVE5hYmxHZThqMUw1R1hyaDlINC94N0RmTGp3UEdBWjdq?=
=?utf-8?B?V1N1MjdweFFUWVhUTndzc1kxZjBlTnh5RWM3TW5hSWplb0dxdjNsU0g2bzFJ?=
=?utf-8?B?WnEzSk04NEZ3YllvU0lNelVvRGt5WWpwd3k5NlJtWjJBMmVPL2xwNlQxUTRa?=
=?utf-8?B?MVFiR1VQRDRSY00raFVsek9xMWhwVkdwdTY3dWFRaytWNHF4UDhBZ1lUVFY0?=
=?utf-8?B?bmJlaFZqSEZYQTA5TnFsOWtYbzZlMWtZUlByYU0xbW9vUXlFdmJLdDJNb1N2?=
=?utf-8?B?cGpzSXR2K3dNbGZPamliRW8xMm91T3BLNFpscWQwellyT3UwMEpMa3VXK1ZG?=
=?utf-8?B?SmE1UGZVcnJ2K2xBNnVPdU9aaVVSMWJPcDlzZkhVako0dDFEcU40S1NaMDcy?=
=?utf-8?B?TDNMZjJTbnZzWWtNU0JWeDZCdWc1TmZMUnQ1ODMyVVRQc1YwbkN4MUxVYmho?=
=?utf-8?B?SlFqS0ZldGw3Q0E5UFRXVnJJZWEzdWp0UVhYVXYwdDBTNXVNdkxuRlB0V0Zs?=
=?utf-8?B?VktpeDBuMFZVSnZHWEJ5T005NU9nNHhYMFZuMU9mN2NJakxNTHFrQmY0c3Jh?=
=?utf-8?B?NWtXSVIydGs0ODVMUTFtRnowU2FRQUorRGUyRUFHeVUvRHRWUTc5TGZBVDZV?=
=?utf-8?B?OHY0cmRzclg5UkR5QlAvUDJxZjB4aVJRdjBZMUxmMS94NFgyQ3pXcVJKbkZJ?=
=?utf-8?B?K04wSnFlT1lSWHg0ODBEQ0crUXdTZkY5WGR3eUNPTk9MSFdEdU5xQngxRlJG?=
=?utf-8?B?by8xRmozaDhMY2MzcnFxelM3MzF5WjZyZTZ3V3BTWVNZWGpwSmk4V1RYWGoz?=
=?utf-8?B?MWlUN2lpL3hDelBYZ3ZtTEtEa2wvdFpnNkk1b2FIQXFtcEdMdUo5K2RTcndL?=
=?utf-8?B?Z2FjV3pBRERaUjE5Y3cwbEhGUEI4eDR6RGVBQ0twbTVXRkhGZy9yNUE4djlj?=
=?utf-8?B?Y1RzdXg0TDBlNFpkRUtTdUFvM0NDdnlwZlRaSXFKbEFiZjRrUGNrdnVzZjRh?=
=?utf-8?B?Njc2QnZSeU9jbUhRTGx2UWttcS9nYzZ0VmRxd0x4MUU5eWVnQytBemwyRjJS?=
=?utf-8?B?RXR3YWlCVkJ5bFRpTnVjb3Q4Wk80NjNmZFl4OXQwcUNyTDViTmcxTzIwVFZZ?=
=?utf-8?B?NC9SZXQzd2dyVGtGeVNWSjAraGlvMUlybFZEVjd1WlRIUUxieldLRHFJcWdV?=
=?utf-8?B?cHI3dzkvUkhsallxWHNHdkVQdnFKWWxWM2tqTDA1Y21hcnRIUXBBeUYwRFRI?=
=?utf-8?B?N3NZaEl3Sy9jZVBZS25rcW1nQk9EV2xwY2l1VDhxWTFwbWkwa2xKaXZKTTRC?=
=?utf-8?Q?1lBSNkmZbC0EY?=
X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
IPV:NLI; SFV:NSPM; H:BL0PR04MB5140.namprd04.prod.outlook.com; PTR:; CAT:NONE;
SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1102;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cHYzUC96NDdEYjBWRkNwb1NlbEVXUGYvODZuSGtjK3hQQjlOZVIvQnlQaGJ3?=
=?utf-8?B?VGw2OEs0dnhEU1BWUjRKRTNYZlBTZkVLSTRIU2dYVitZR3hsNG14N3BQTFhG?=
=?utf-8?B?RTRGdC9FblVBcTZxUDJzYTZJL1pua1hsMFd1dzE5TnlHRmZUOWtCcnpNdTkx?=
=?utf-8?B?WU1HVEc2V1N5NG9DUzVlYTlxbUt5d2hhdGdhMEwvV1pLQk9seEJ0WU8vbEtk?=
=?utf-8?B?WW9teXl4cU8xUnRxMENoR3c5MjErUjREb3h5dzFCSWJBTS90RC9qU2NON3p5?=
=?utf-8?B?VWNMNGpTWkZ3NlEzTmRpK0dZeXk2WDFGWW1kY2k3S0xkSGgvODRPS0srNm5S?=
=?utf-8?B?WmlEeFN5RXhoN2VmL3BOaVQ5dzFzdXJIMlN0Sm1HcDNJc1RSN094Sm9rMEtl?=
=?utf-8?B?MEV3M3IyQmZzUitQM2E5SWorb1hQRkxDMXZRMGVFM2JyRXJhOWhuTnZZdHJE?=
=?utf-8?B?OTVaQVl3VFpWMk9zZXpYZVFOMFJJeFNOMTJBRTlzMEJlb0hxaVJPZzlrbVJy?=
=?utf-8?B?djJWdXI2U2VyWnBseVpGeDRpaUVkYXZ5ZXRTekRPY1g3TlJTN0Q3L0pvZWdW?=
=?utf-8?B?aFpMMThUUUtMRFNqanduS3luZG5tOUcvekpabWE2bVo4WXhIekx2ZTFrdkt5?=
=?utf-8?B?ZlRTejBVU2RvdHlhemlUSHl1N0cvcWtTM3lGbWNLOVlxRmt2Y1d2eEFuUjBy?=
=?utf-8?B?YkR3TkdJcVlFUWIxc1ptUFJ3bC9Udm5mbkNLRVRkK2JBS1pBTHlEdURhemNM?=
=?utf-8?B?NzAxd1gxRVJxTXU1WlhvM0ZGSG05QjllY3JLTWRvQUFxa3pVTEFpSHpDN1pG?=
=?utf-8?B?MXA1cEp2Zy80bkVQL1lDWFVCZm1LSzZYbUxtWGFMZkNUR0VFQ0E5WVh2R0ow?=
=?utf-8?B?bHhZQTBMN1dwamY3dFYwVjFDWkJvSVR2cXZSMFZqWnd6Ky93eHMxMGdPWldz?=
=?utf-8?B?bzJ0V2pyK1M0OXpubkxCRnNlTjd2bVAvZnRlbmxxNzBrckcrelBITmEwM3hJ?=
=?utf-8?B?VXNNWnRiSGJBeHIzMlpUYVFhTTJoZ2VqeWo5YkhHSzI2NC9DYXZRdzJwYUhK?=
=?utf-8?B?Q2xkUWdrNUJLa1VYMTIyRW5zVkRtQlRjMkhBSVJpS0FWOFJ4YjQ5d0tGYVVq?=
=?utf-8?B?bC9mSXhTRWdqZCtxaDVBTDhUaGpmaCtWOS80LzVwektia1lEY3lMSVhJZE5U?=
=?utf-8?B?Y1RRN0h1N1lENG9EMVkxS2VRdjV2cTZ2eUNSOXdNN3ZaNEI4L0pUa0ZiK3pm?=
=?utf-8?B?SDhQNzZxSytRRGRqZHpzWldJSzJVRnhZNURnN2dISlZuOTNaMW9wVHp3TExX?=
=?utf-8?B?THgxZktlZG54YXFpT0pJU29RTDN6Z2NOL3lQSzlvampKaXE0blpOVjlqbnJr?=
=?utf-8?B?T09SaWZ3WjRxM1J6Y2xpeWFKQTdzbEF0WDZGV25STzl1dzN2K2ppM2w4TlpG?=
=?utf-8?B?SVh3SjZ2NlV6dUxTUkNhZUh3c2F3cmZuUXAvaXJ3cWdxNVNVbXdHZzAxQkdu?=
=?utf-8?B?YUh0bEFDSUszOWJiaEtWZlNKSkRTenA3TGZWNlRoT2VwdXpXeVRKRjNqYldk?=
=?utf-8?B?Nys5eWhCaXdZellzNElvMmFYY1lHT3NLOG1OZ0xOSmhqWXU0RFpGRy96OE1B?=
=?utf-8?B?ZmEwcFBzNzh1Q3cyd1hJZVIwYlViTEkrVkVXOEpBTEN1K3hYK3hXMlM3VXk0?=
=?utf-8?B?aUtVTDVkSmU4Wk1Sai9ZWHRWQ1FFbDJ0VFV1a2xRUEJSUW56cGdSOFExNm9T?=
=?utf-8?B?ajBzK0VXOFBUcmRTVzZtN1hUVVMwZENOVmtzVWwwMmJPKzVZMm8wMFU2aXVu?=
=?utf-8?B?RndVLzR0REZIdUZNblJrcG1HOTc3Z05hSGlFNnFBK1huZjBXQmIrK1hKVi9H?=
=?utf-8?B?eTFraGc2OTk0M1VIYmYwUGIva2NWczIvTnhqVjZxOGJGTXlwK1ZwNGNpMVpy?=
=?utf-8?B?U2VHTUp6VDcxRFRkUnB2ZHZldGdVOUFzaktPS1FCTDBoWURKbVN5OTN3cjNq?=
=?utf-8?B?QjFaMFNMWVZhY3RRNkg0c2s5RUo3Z2VFNGY2RU5KUW93VVVlYUJMNm5MekZF?=
=?utf-8?B?RW53QlcyZkMzUm01YW1FUHZMaExZdWFJa0xkSUJhTmxueGtJcnJWcDQ0UGFz?=
=?utf-8?Q?h1d9sMiG3vECmCmLdD4YIMTBk?=
X-OriginatorOrg: cornell.edu
X-MS-Exchange-CrossTenant-Network-Message-Id: 9f97b712-20d9-4950-a52f-08dd1eb04912
X-MS-Exchange-CrossTenant-AuthSource: BL0PR04MB5140.namprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2024 15:34:25.2249 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 5d7e4366-1b9b-45cf-8e79-b14b27df46e1
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: JaOzW+0enGW4BNYjcd6d1yJHxxHNLPSlTBAjvBYYO5Wz+BLe+GH6dVUzvefIFK2/Th2QyAF9A1DAd3bE6D+ONw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR04MB7774
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.30
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Unsubscribe: <https://cygwin.com/mailman/options/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
From: Ken Brown via Cygwin <cygwin AT cygwin DOT com>
Reply-To: Ken Brown <kbrown AT cornell DOT edu>
Errors-To: cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com
Sender: "Cygwin" <cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com>
X-MIME-Autoconverted: from base64 to 8bit by delorie.com id 4BHFaXdI023371

On 12/16/2024 2:58 PM, Ken Brown via Cygwin wrote:
> On 12/16/2024 8:32 AM, Corinna Vinschen via Cygwin wrote:
>> Right now, mmaping with PROT_NONE and then re-mmaping with PROT_WRITE
>> doesn't work.  Cygwin implements PROT_NONE not as MAP_RESERVE, but as
>> MEM_COMMIT with PAGE_NOACCESS.  mmap() doesn't check if the requested
>> pages are already allocated with PAGE_NOACCESS and then succeeds while
>> in fact just changing the page protection.  This is basically what
>> you want.  Right now, you'd have to call mprotect() instead.
>>
>> With anonymous mappings only, this is all just adding a bit of code to
>> mmap() to do what mprotect() does in this case.
> 
> [...]
> 
>> So only anonymous mappings would be possible, assuming we tweak mmap()
>> to check if the old mapping was anonymous either and then allow to
>> just change the page protection, as if mprotect has been called.
>>
>> And, funny enough, something pretty similar already exists in mmap().
>> See mmap.cc, line 1051 and the mmap_list::try_map() method.  Right
>> now it only checks if an anonymous mapping has been partially unmapped
>> and can be recycled.  But it could be improved by allowing to recycle
>> the anonymous mapping either way, as long as the new mapping is also
>> anonymous and the SHARED/PRIVATE flags match.
> Thanks!  This looks doable.  I hope to get back to you with a patch in 
> the not-too-distant future.
While looking at this, I came across a bug in the use of 
mmap_list::try_map(): On success, the recycled pages are given the same 
protection they had as part of the original mmap_record instead of the 
protection requested in the mmap call.  This is done in 
mmap_record::map_pages.  Here's a test case:

$ cat test.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>

const size_t page_size = 64 * 1024;

#define BUF_SIZE 10

int
main ()
{
    void *mem = mmap (NULL, 2 * page_size, PROT_NONE,
                      MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
    if (mem == MAP_FAILED)
      {
        perror ("mmap");
        exit (1);
      }

    if (munmap (mem, BUF_SIZE) == -1)
      {
        perror ("munmap");
        exit (2);
      }

    void *res = mmap (mem, BUF_SIZE, PROT_READ | PROT_WRITE,
                      MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
    if (res == MAP_FAILED)
      {
        perror ("mmap");
        exit (3);
      }

    if (printf ("Current string = %s\n", (char *) res) < 0)
      {
        perror ("printf");
        exit (4);
      }
    strncpy (res, "Hello", BUF_SIZE - 1);
    if (printf ("New string = %s\n", (char *) res) < 0)
      {
        perror ("printf");
        exit (5);
      }
}

$ gcc -o test test.c

$ ./test

$ echo $?
0

So it seems that reading and writing to the recycled pages fails 
silently.  On Linux, we get the expected output:

Current string =
New string = Hello

Would you like a separate patch to fix this, or should I just fix it as 
part of the bigger project?

Ken

-- 
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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019