delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2019/02/22/10:44:00

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:from:subject:to:message-id:date:mime-version
:content-type; q=dns; s=default; b=qp4/TRUOVCjbIav2v9YdDMxRq+Hc4
HcBvKbrHwqKtpm/buYT5OYuqGtZLG9m5lGxATtY/RKilBzZATpYbsdK1jr6PLSYF
vbMN2+W1qS+NO56a+euZHc84cYdcJCRuS041wuD38O/21GpYsyWZEKfihqIRX+kM
3r0enZaxB2w1d8=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:from:subject:to:message-id:date:mime-version
:content-type; s=default; bh=TauSWHVaoskL0N7WMS6Ia2hewg0=; b=X/X
ly9Kb9wjJtowy23+QT3uBPPv7hjW/1OojNtiRWTmotey23ZMGhmIV6vy1A3DPF6o
+H2gz5SbiqilNlpy13GSnVfV9m2/2bF5LthHbdopsn/KmsmcjEKRon2t9yRo1zoo
cGQq27zC4V/1pbksV18PZ1sqPLwjBze5gbxHlo8c=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Authentication-Results: sourceware.org; auth=none
X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=BAYES_00,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=no version=3.3.2 spammy=connect, Hx-languages-length:2623, unaware, transfer
X-HELO: atfriesa01.ssi-schaefer.com
From: Michael Haubenwallner <michael DOT haubenwallner AT ssi-schaefer DOT com>
Subject: A little improvement for setmode(fd, 0)?
Openpgp: preference=signencrypt
To: cygwin AT cygwin DOT com
Message-ID: <5801c977-ad17-6f6e-39db-ad44d202c172@ssi-schaefer.com>
Date: Fri, 22 Feb 2019 16:43:10 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1
MIME-Version: 1.0

--------------C3A93BA6DAD0CAABF2E5A2B8
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

Hi Corinna,

sorry to be annoying, but I'm still not completely happy with the
setmode(fd, 0) API yet:

Using setmode(fd, 0), beyond "I am aware that not everything is binary",
an application's point of view when ported to Cygwin is something like:
"For this (maybe bidirectional) file descriptor, wherever the user does
connect it to (stream, binary mounted fs, text mounted fs, ...), I do
*not need* to transfer binary content.  That is, to stay as POSIXy as
possible, for line breaks I do not want to handle any \r in my text."

Hence, read() should not deliver the \r when reading any line break, and
write(\n) should add the \r only when the target does require that (like
the file on a text mounted fs).

As there is no clean way to ignore \r for reads without forcing \r for
writes, right now a complete-as-possible patch for openssl may look like:
https://gitweb.gentoo.org/repo/proj/prefix.git/tree/dev-libs/openssl/files/openssl-1.1.1a-cygwin-binmode.patch?id=05d897568b21446657001a51660e9a25172474f2

But there still is the difference between readonly and read+write.

Attached is a test script for a collected overview of the behaviour
differences when applications use the setmode() API call.

$ ./setmodetest.sh
Testing behaviour of various setmode() arguments...
---------+--------------------------+--------------------------+
perform: |   read from 0d0a input   |   write the single 0a    |
filesys: | stream | binary |  text  | stream | binary |  text  |
---------+--------+--------+--------+--------+--------+--------+
 default |   0d0a |   0d0a |     0a |     0a |     0a |   0d0a |
O_BINARY |   0d0a |   0d0a |   0d0a |     0a |     0a |     0a |
  0      |   0d0a |   0d0a |     0a |     0a |     0a |   0d0a |
O_TEXT   |     0a |     0a |     0a |   0d0a |   0d0a |   0d0a |
---------+--------+--------+--------+--------+--------+--------+

So what I would like to see is a behaviour like this:
---------+--------------------------+--------------------------+
perform: |   read from 0d0a input   |   write the single 0a    |
filesys: | stream | binary |  text  | stream | binary |  text  |
---------+--------+--------+--------+--------+--------+--------+
  0 ?    |     0a |     0a |     0a |     0a |     0a |   0d0a |
---------+--------+--------+--------+--------+--------+--------+

Even if that would mean that setmode(fd, 0) does not switch back to default
behaviour any more.  But then, isn't the default behaviour designed for
applications that do not use (are unaware of) the setmode() API at all?

Thoughts?

For completion:
$ ./setmodetest.sh --trace
does create the list of commands being executed.

$ ./setmodetest.sh --with-fopen
does use the FILE handle API

Thanks a lot!
/haubi/

--------------C3A93BA6DAD0CAABF2E5A2B8
Content-Type: application/x-shellscript;
 name="setmodetest.sh"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="setmodetest.sh"

IyEgL3Vzci9iaW4vZW52IGJhc2gKClBTND0nKCRMSU5FTk8pKyAnCnNldCAt
ZQoKZGllKCkgewogIFtbIC16ICIkKiIgXV0gfHwgcHJpbnRmICIlc1xcbiIg
IiQqIiA+JjIKICBleGl0IDEKfQoKaGVscCgpIHsKICBjYXQgPDxFT0YKJHsw
fSBbLS10cmFjZV0gWy0td2l0aC1mb3Blbl0KRU9GCn0KCnRlc3RzZXRtb2Rl
X2MoKSB7CiAgbG9jYWwgZmh0eXBlPSdpbnQnCiAgbG9jYWwgaW52YWxpZF9m
aD0nLTEnCiAgbG9jYWwgaW50X2ZkX2Zyb21fZmg9J2ludCBmZCA9IGZoOycK
ICBsb2NhbCBzZXRtb2RlX2ZkX2JpbmFyeT0nc2V0bW9kZShmZCwgT19CSU5B
UlkpJwogIGxvY2FsIHNldG1vZGVfZmRfdGV4dD0nc2V0bW9kZShmZCwgT19U
RVhUKScKICBsb2NhbCByZWFkX2J1Zl9mcm9tX2ZoPSdyZWFkKGZoLCBidWYs
IGJ1ZnNpemUpJwogIGxvY2FsIHdyaXRlX25ld2xpbmVfdG9fZmg9J3dyaXRl
KGZoLCAiXG4iLCAxKScKICBsb2NhbCBzdGRpbmZoPScwJwogIGxvY2FsIHN0
ZG91dGZoPScxJwogIGxvY2FsIG9wZW5fYXJndjNfZm9yX3JlYWQ9J29wZW4o
YXJndlszXSwgT19SRE9OTFkpJwogIGxvY2FsIG9wZW5fYXJndjNfZm9yX3dy
aXRlPSdvcGVuKGFyZ3ZbM10sIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9O
TFksIDA2NDQpJwogIGxvY2FsIGNsb3NlX29wZW5maD0naWYgKG9wZW5maCA+
PSAwKSBjbG9zZShvcGVuZmgpJwogIGlmIFtbICR7V0lUSF9GT1BFTn0gXV07
IHRoZW4KICAgIGZodHlwZT0nRklMRSAqJwogICAgaW52YWxpZF9maD0nTlVM
TCcKICAgIGludF9mZF9mcm9tX2ZoPSdpbnQgZmQgPSBmaCA/IGZpbGVubyhm
aCkgOiAtMTsnCiAgICBzZXRtb2RlX2ZkX2JpbmFyeT0nMCcKICAgIHNldG1v
ZGVfZmRfdGV4dD0nMCcKICAgIHJlYWRfYnVmX2Zyb21fZmg9J2dldGxpbmUo
JmJ1ZiwgJmJ1ZnNpemUsIGZoKScKICAgIHdyaXRlX25ld2xpbmVfdG9fZmg9
J2ZwcmludGYoZmgsICJcbiIpJwogICAgc3RkaW5maD0nZnJlb3BlbihOVUxM
LCBmb3Blbl9tb2RlKGFyZ3ZbMV0sIGFyZ3ZbMl0pLCBzdGRpbiknCiAgICBz
dGRvdXRmaD0nZnJlb3BlbihOVUxMLCBmb3Blbl9tb2RlKGFyZ3ZbMV0sIGFy
Z3ZbMl0pLCBzdGRvdXQpJwogICAgb3Blbl9hcmd2M19mb3JfcmVhZD0nZm9w
ZW4oYXJndlszXSwgZm9wZW5fbW9kZShhcmd2WzFdLCBhcmd2WzJdKSknCiAg
ICBvcGVuX2FyZ3YzX2Zvcl93cml0ZT0nZm9wZW4oYXJndlszXSwgZm9wZW5f
bW9kZShhcmd2WzFdLCBhcmd2WzJdKSknCiAgICBjbG9zZV9vcGVuZmg9J2lm
IChvcGVuZmgpIGZjbG9zZShvcGVuZmgpJwogIGZpCiAgY2F0IDw8RU9GCiNp
bmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRl
IDxpby5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN0cmluZy5o
PgojaW5jbHVkZSA8dW5pc3RkLmg+CgpjaGFyIHRvaGV4KGNoYXIgaGFsZmJ5
dGUpCnsKICBoYWxmYnl0ZSAmPSAweGY7CiAgaWYgKGhhbGZieXRlID49IDB4
YSkKICAgIHJldHVybiAnYScgKyAoaGFsZmJ5dGUgLSAweGEpOwogIHJldHVy
biAnMCcgKyBoYWxmYnl0ZTsKfQoKdHlwZWRlZiAke2ZodHlwZX0gZmh0eXBl
OwoKaW50IGRvc2V0bW9kZShjaGFyIGNvbnN0ICogbW9kZSwgZmh0eXBlIGZo
KQp7CiAgJHtpbnRfZmRfZnJvbV9maH0KICBpZiAoZmQgPCAwKSByZXR1cm4g
LTE7CiAgaWYgKCFtb2RlKSByZXR1cm4gMDsKICBlbHNlIGlmICghc3RyY21w
KG1vZGUsICJkZWZhdWx0IikpIHJldHVybiAwOwogIGVsc2UgaWYgKCFzdHJj
bXAobW9kZSwgImJpbm1vZGUiKSkgcmV0dXJuICR7c2V0bW9kZV9mZF9iaW5h
cnl9OwogIGVsc2UgaWYgKCFzdHJjbXAobW9kZSwgInR4dG1vZGUiKSkgcmV0
dXJuICR7c2V0bW9kZV9mZF90ZXh0fTsKICBlbHNlIGlmICghc3RyY21wKG1v
ZGUsICJudWxtb2RlIikpIHJldHVybiBzZXRtb2RlKGZkLCAwKTsKICBlbHNl
IGlmICghc3RyY21wKG1vZGUsICJ0d29tb2RlIikpIHJldHVybiBzZXRtb2Rl
KGZkLCBPX0JJTkFSWSB8IE9fVEVYVCk7CiAgcmV0dXJuIC0xOwp9CgppbnQg
dGVzdHJlYWQoY2hhciBjb25zdCAqIG1vZGUsIGZodHlwZSBmaCkKewogIGlm
IChkb3NldG1vZGUobW9kZSwgZmgpIDwgMCkKICAgIHJldHVybiAtMTsKCiAg
c2l6ZV90IGJ1ZnNpemUgPSAxMjg7CiAgY2hhciAqIGJ1ZiA9IG1hbGxvYyhi
dWZzaXplKTsKICBpZiAoIWJ1ZikKICAgIHJldHVybiAtMTsKICBzc2l6ZV90
IG4sIGk7CiAgd2hpbGUoKG4gPSAke3JlYWRfYnVmX2Zyb21fZmh9KSA+IDAp
CiAgICBmb3IoaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgIHByaW50ZigiJWMl
YyIsIHRvaGV4KGJ1ZltpXSA+PiA0KSwgdG9oZXgoYnVmW2ldICYgMHhmKSk7
CiAgaWYgKGJ1ZikKICAgIGZyZWUoYnVmKTsKICByZXR1cm4gMDsKfQoKaW50
IHRlc3R3cml0ZShjaGFyIGNvbnN0ICogbW9kZSwgZmh0eXBlIGZoKQp7CiAg
aWYgKGRvc2V0bW9kZShtb2RlLCBmaCkgPCAwKQogICAgcmV0dXJuIC0xOwoK
ICAke3dyaXRlX25ld2xpbmVfdG9fZmh9OwogIHJldHVybiAwOwp9CgppbnQg
aGVscChjaGFyIGNvbnN0ICogYXJndjApCnsKICBmcHJpbnRmKHN0ZGVyciwg
IiVzIDxyZWFkfHdyaXRlPiA8c2V0bW9kZT4gPGZpbGV8LT5cbiIsIGFyZ3Yw
KTsKICByZXR1cm4gMTsKfQoKY2hhciBjb25zdCAqIGZvcGVuX21vZGUoY2hh
ciBjb25zdCAqIGFyZ3YxLCBjaGFyIGNvbnN0ICogYXJndjIpCnsKICBpZiAo
IXN0cmNtcChhcmd2MSwgInJlYWQiKSkKICAgIHsKICAgICAgaWYgKCFzdHJj
bXAoYXJndjIsICJiaW5tb2RlIikpIHJldHVybiAicmIiOwogICAgICBpZiAo
IXN0cmNtcChhcmd2MiwgInR4dG1vZGUiKSkgcmV0dXJuICJydCI7CiAgICAg
IHJldHVybiAiciI7CiAgICB9CiAgaWYgKCFzdHJjbXAoYXJndjEsICJ3cml0
ZSIpKQogICAgewogICAgICBpZiAoIXN0cmNtcChhcmd2MiwgImJpbm1vZGUi
KSkgcmV0dXJuICJ3YiI7CiAgICAgIGlmICghc3RyY21wKGFyZ3YyLCAidHh0
bW9kZSIpKSByZXR1cm4gInd0IjsKICAgICAgcmV0dXJuICJ3IjsKICAgIH0K
ICByZXR1cm4gTlVMTDsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQp7CiAgaWYgKGFyZ2MgPCAzKQogICAgcmV0dXJuIGhlbHAoYXJndlsw
XSk7CgogIGludCByZXQgPSAtMTsKICBmaHR5cGUgb3BlbmZoID0gJHtpbnZh
bGlkX2ZofTsKICBmaHR5cGUgZmggPSAke2ludmFsaWRfZmh9OwogIGlmICgh
c3RyY21wKGFyZ3ZbMV0sICJyZWFkIikpCiAgICB7CiAgICAgIGlmICghc3Ry
Y21wKGFyZ3ZbM10sICItIikpCiAgICAgICAgZmggPSAke3N0ZGluZmh9Owog
ICAgICBlbHNlCiAgICAgICAgb3BlbmZoID0gZmggPSAke29wZW5fYXJndjNf
Zm9yX3JlYWR9OwogICAgICByZXQgPSB0ZXN0cmVhZChhcmd2WzJdLCBmaCk7
CiAgICB9CiAgZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAid3JpdGUiKSkK
ICAgIHsKICAgICAgaWYgKCFzdHJjbXAoYXJndlszXSwgIi0iKSkKICAgICAg
ICBmaCA9ICR7c3Rkb3V0Zmh9OwogICAgICBlbHNlCiAgICAgICAgb3BlbmZo
ID0gZmggPSAke29wZW5fYXJndjNfZm9yX3dyaXRlfTsKICAgICAgcmV0ID0g
dGVzdHdyaXRlKGFyZ3ZbMl0sIGZoKTsKICAgIH0KICBlbHNlCiAgICByZXR1
cm4gaGVscChhcmd2WzBdKTsKICAke2Nsb3NlX29wZW5maH07CiAgcmV0dXJu
IHJldCA8IDAgPyAxIDogMDsKfQpFT0YKfQoKSVNUUkFDRT1mYWxzZQpXSVRI
X0ZPUEVOPQoKdHJhY2UoKSB7CiAgJHtJU1RSQUNFfSB8fCByZXR1cm4gMAog
IHByaW50ZiAiJXNcbiIgIiQqIgp9Cgpmb3IgYXJnIGluICIkQCI7IGRvCiAg
Y2FzZSAke2FyZ30gaW4KICAtLXRyYWNlKSBJU1RSQUNFPTogOzsKICAtLXdp
dGgtZm9wZW4pIFdJVEhfRk9QRU49JHthcmd9IDs7CiAgLS1oZWxwKSBoZWxw
OyBleGl0IDAgOzsKICAtLXRlc3RzZXRtb2RlX2MpIHRlc3RzZXRtb2RlX2M7
IGV4aXQgMCA7OwogIGVzYWMKZG9uZQoKVEVTVERJUj0kKHB3ZCkvc2V0bW9k
ZXRlc3QtJCQKCnRyYWNlICJta2RpciBzZXRtb2RldGVzdC0kJCIKbWtkaXIg
c2V0bW9kZXRlc3QtJCQKdHJhcCAiCiAgc2V0ICtlCiAgdHJhY2UgdW1vdW50
ICcke1RFU1RESVJ9L2JpbmFyeWRpcicKICB1bW91bnQgJyR7VEVTVERJUn0v
YmluYXJ5ZGlyJyAyPi9kZXYvbnVsbAogIHRyYWNlIHVtb3VudCAnJHtURVNU
RElSfS90ZXh0ZGlyJwogIHVtb3VudCAnJHtURVNURElSfS90ZXh0ZGlyJyAy
Pi9kZXYvbnVsbAogIHRyYWNlIHBvcGQKICBwb3BkID4vZGV2L251bGwKICB0
cmFjZSBybSAtcmYgc2V0bW9kZXRlc3QtJCQKICBybSAtcmYgc2V0bW9kZXRl
c3QtJCQKIiAwCgp0cmFjZSAiJDAgJHtXSVRIX0ZPUEVOfSAtLXRlc3RzZXRt
b2RlX2MgPiBzZXRtb2RldGVzdC0kJC90ZXN0c2V0bW9kZS5jIgp0ZXN0c2V0
bW9kZV9jID4gc2V0bW9kZXRlc3QtJCQvdGVzdHNldG1vZGUuYwoKdHJhY2Ug
InB1c2hkIHNldG1vZGV0ZXN0LSQkIgpwdXNoZCBzZXRtb2RldGVzdC0kJCA+
L2Rldi9udWxsCgp0cmFjZSBnY2MgLWcgLW8gdGVzdHNldG1vZGUgdGVzdHNl
dG1vZGUuYwpnY2MgLWcgLW8gdGVzdHNldG1vZGUgdGVzdHNldG1vZGUuYwoK
dHJhY2UgbWtkaXIgcGxhaW5kaXIgYmluYXJ5ZGlyIHRleHRkaXIKbWtkaXIg
cGxhaW5kaXIKbWtkaXIgYmluYXJ5ZGlyCm1rZGlyIHRleHRkaXIKdHJhY2Ug
InByaW50ZiAnXFxuJyB8IHVuaXgyZG9zID4gcGxhaW5kaXIvdG9yZWFkIgpw
cmludGYgJ1xuJyB8IHVuaXgyZG9zID4gcGxhaW5kaXIvdG9yZWFkCnRyYWNl
ICJtb3VudCAtbyBiaW5hcnkgJyQoY3lncGF0aCAtbSAiJHtURVNURElSfS9w
bGFpbmRpciIpJyAnJHtURVNURElSfS9iaW5hcnlkaXInIgptb3VudCAtbyBi
aW5hcnkgIiQoY3lncGF0aCAtbSAiJHtURVNURElSfS9wbGFpbmRpciIpIiAi
JHtURVNURElSfS9iaW5hcnlkaXIiCnRyYWNlICJtb3VudCAtbyB0ZXh0ICAg
JyQoY3lncGF0aCAtbSAiJHtURVNURElSfS9wbGFpbmRpciIpJyAnJHtURVNU
RElSfS90ZXh0ZGlyJyIKbW91bnQgLW8gdGV4dCAgICIkKGN5Z3BhdGggLW0g
IiR7VEVTVERJUn0vcGxhaW5kaXIiKSIgIiR7VEVTVERJUn0vdGV4dGRpciIK
dHJhY2UKCnNldCArZQoKREFTSEVTPSctLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0nCgpzZXRtb2RlZm10PSIlLTguOHMiCnNldG1vZGVzPSgKICAiZGVm
YXVsdDogZGVmYXVsdCIKICAiYmlubW9kZTpPX0JJTkFSWSIKICAibnVsbW9k
ZTogIDAgICAgICIKICAidHh0bW9kZTpPX1RFWFQgICIKIyAidHdvbW9kZTog
IGJvdGggICIKKQoKdGVzdG1vZGVoZWFkZXJmbXQ9IiUyNC4yNHMiICMgbGVu
Z3RoIHRvIGZpdCAic3RyZWFtIHwgYmluYXJ5IHwgIHRleHQgIgp0ZXN0bW9k
ZWZtdD0iJS01LjVzIiAjIGxlbmd0aCB0byBmaXQgInN0cmVhbSB8IGJpbmFy
eSB8ICB0ZXh0ICIKdGVzdG1vZGVzPSgKICAgInJlYWQ6cmVhZCBmcm9tIDBk
MGEgaW5wdXQgICIKICAid3JpdGU6d3JpdGUgdGhlIHNpbmdsZSAwYSAgICIK
KQoKZmlsZW1vZGVmbXQ9IiU2LjZzIgpmaWxlbW9kZXM9KAogICJzdHJlYW06
c3RyZWFtIgogICJiaW5hcnk6YmluYXJ5IgogICAgInRleHQ6IHRleHQgIgop
CgpydW50ZXN0KCkgewogIGxvY2FsIHRyYWNlPTogc2V0bW9kZSB0ZXN0bW9k
ZSBmaWxlbW9kZQogIGxvY2FsIGFyZwogIGZvciBhcmcgaW4gIiRAIjsgZG8K
ICAgIGNhc2UgJHthcmd9IGluCiAgICAtLXRyYWNlKSB0cmFjZT1wcmludGYg
OzsKICAgIC0tc2V0bW9kZT0qKSBzZXRtb2RlPSR7YXJnIy0tc2V0bW9kZT19
IDs7CiAgICAtLXRlc3Rtb2RlPSopIHRlc3Rtb2RlPSR7YXJnIy0tdGVzdG1v
ZGU9fSA7OwogICAgLS1maWxlbW9kZT0qKSBmaWxlbW9kZT0ke2FyZyMtLWZp
bGVtb2RlPX0gOzsKICAgIGVzYWMKICBkb25lCgogIGxvY2FsIGZpbGUgdmFs
dWUKICBjYXNlICR7ZmlsZW1vZGV9OiR7dGVzdG1vZGV9IGluCiAgc3RyZWFt
OnJlYWQpCiAgICAkdHJhY2UgIi4vdGVzdHNldG1vZGUgcmVhZCAke3NldG1v
ZGV9IC0gPCBwbGFpbmRpci90b3JlYWQ7ICMgIgogICAgcHJpbnRmICIlcyIg
IiQoLi90ZXN0c2V0bW9kZSByZWFkICIke3NldG1vZGV9IiAtIDwgInBsYWlu
ZGlyL3RvcmVhZCIpIgogICAgOzsKICBzdHJlYW06d3JpdGUpCiAgICBybSAt
ZiAicGxhaW5kaXIvdG93cml0ZSIKICAgICR0cmFjZSAiLi90ZXN0c2V0bW9k
ZSB3cml0ZSAke3NldG1vZGV9IC0gfCB4eGQgLXA7ICMgIgogICAgLi90ZXN0
c2V0bW9kZSB3cml0ZSAiJHtzZXRtb2RlfSIgLSA+ICJwbGFpbmRpci9zdHJl
YW13cml0ZS0ke3NldG1vZGV9IgogICAgcHJpbnRmICIlcyIgIiQoeHhkIC1w
ICJwbGFpbmRpci9zdHJlYW13cml0ZS0ke3NldG1vZGV9IikiCiAgICA7Owog
ICo6cmVhZCkKICAgICR0cmFjZSAiLi90ZXN0c2V0bW9kZSByZWFkICR7c2V0
bW9kZX0gJHtmaWxlbW9kZX1kaXIvdG9yZWFkOyAjICIKICAgIHByaW50ZiAi
JXMiICIkKC4vdGVzdHNldG1vZGUgcmVhZCAiJHtzZXRtb2RlfSIgIiR7Zmls
ZW1vZGV9ZGlyL3RvcmVhZCIpIgogICAgOzsKICAqOndyaXRlKQogICAgcm0g
LWYgInBsYWluZGlyL3Rvd3JpdGUiCiAgICAkdHJhY2UgIi4vdGVzdHNldG1v
ZGUgd3JpdGUgJHtzZXRtb2RlfSAke2ZpbGVtb2RlfWRpci8ke2ZpbGVtb2Rl
fXdyaXRlLSR7c2V0bW9kZX07ICMgIgogICAgLi90ZXN0c2V0bW9kZSB3cml0
ZSAiJHtzZXRtb2RlfSIgIiR7ZmlsZW1vZGV9ZGlyLyR7ZmlsZW1vZGV9d3Jp
dGUtJHtzZXRtb2RlfSIKICAgIHByaW50ZiAiJXMiICIkKHh4ZCAtcCAicGxh
aW5kaXIvJHtmaWxlbW9kZX13cml0ZS0ke3NldG1vZGV9IikiCiAgICA7Owog
ICopCiAgICBkaWUgImludmFsaWQ6IHJ1bnRlc3QgLS1zZXRtb2RlPSR7c2V0
bW9kZX0gLS10ZXN0bW9kZT0ke3Rlc3Rtb2RlfSAtLWZpbGVtb2RlPSR7Zmls
ZW1vZGV9IgogICAgOzsKICBlc2FjCiAgJHRyYWNlICJcXG4iCn0KCiMgaGVh
ZGVyIGxpbmVzCiMgMDogCiMgMTogLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwojIDI6
IHBlcmZvcm06IHwgICByZWFkIGZyb20gMGQwYSBpbnB1dCAgIHwgICB3cml0
ZSB0aGUgc2luZ2xlIDBhICAgIHwKIyAzOiBmaWxlc3lzOiB8IHN0cmVhbSB8
IGJpbmFyeSB8ICB0ZXh0ICB8IHN0cmVhbSB8IGJpbmFyeSB8ICB0ZXh0ICB8
CiMgNDogLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0t
LS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwoKaGVhZGVyMCgpIHsKICBwcmlu
dGYgIlRlc3RpbmcgYmVoYXZpb3VyIG9mIHZhcmlvdXMgc2V0bW9kZSgpIGFy
Z3VtZW50cy4uLlxuIgp9CgpoZWFkZXIxKCkgewogIHByaW50ZiAiJHtzZXRt
b2RlZm10fS0rIiAiJHtEQVNIRVN9IgogIGZvciB0ZXN0bW9kZSBpbiAiJHt0
ZXN0bW9kZXNbQF19IjsgZG8KICAgIHRlc3RkZXNjPSR7dGVzdG1vZGUjKjp9
CiAgICB0ZXN0bW9kZT0ke3Rlc3Rtb2RlJToqfQogICAgcHJpbnRmICIlcyR7
dGVzdG1vZGVoZWFkZXJmbXR9LSsiICItIiAiJHtEQVNIRVN9IgogIGRvbmUK
ICBwcmludGYgIlxcbiIKfQoKaGVhZGVyMigpIHsKICBwcmludGYgIiR7c2V0
bW9kZWZtdH0gfCIgInBlcmZvcm06IgogIGZvciB0ZXN0bW9kZSBpbiAiJHt0
ZXN0bW9kZXNbQF19IjsgZG8KICAgIHRlc3RkZXNjPSR7dGVzdG1vZGUjKjp9
CiAgICB0ZXN0bW9kZT0ke3Rlc3Rtb2RlJToqfQogICAgcHJpbnRmICIgJHt0
ZXN0bW9kZWhlYWRlcmZtdH0gfCIgIiR7dGVzdGRlc2N9IgogIGRvbmUKICBw
cmludGYgIlxcbiIKfQoKaGVhZGVyMygpIHsKICBwcmludGYgIiR7c2V0bW9k
ZWZtdH0gfCIgImZpbGVzeXM6IgogIGZvciB0ZXN0bW9kZSBpbiAiJHt0ZXN0
bW9kZXNbQF19IjsgZG8KICAgIHRlc3RkZXNjPSR7dGVzdG1vZGUjKjp9CiAg
ICB0ZXN0bW9kZT0ke3Rlc3Rtb2RlJToqfQogICAgZm9yIGZpbGVtb2RlIGlu
ICIke2ZpbGVtb2Rlc1tAXX0iOyBkbwogICAgICBmaWxlZGVzYz0ke2ZpbGVt
b2RlIyo6fQogICAgICBmaWxlbW9kZT0ke2ZpbGVtb2RlJToqfQogICAgICBw
cmludGYgIiAke2ZpbGVtb2RlZm10fSB8IiAiJHtmaWxlZGVzY30iCiAgICBk
b25lCiAgZG9uZQogIHByaW50ZiAiXFxuIgp9CgpoZWFkZXI0KCkgewogIHBy
aW50ZiAiJHtzZXRtb2RlZm10fS0rIiAiJHtEQVNIRVN9IgogIGZvciB0ZXN0
bW9kZSBpbiAiJHt0ZXN0bW9kZXNbQF19IjsgZG8KICAgIHRlc3RkZXNjPSR7
dGVzdG1vZGUjKjp9CiAgICB0ZXN0bW9kZT0ke3Rlc3Rtb2RlJToqfQogICAg
Zm9yIGZpbGVtb2RlIGluICIke2ZpbGVtb2Rlc1tAXX0iOyBkbwogICAgICBm
aWxlZGVzYz0ke2ZpbGVtb2RlIyo6fQogICAgICBmaWxlbW9kZT0ke2ZpbGVt
b2RlJToqfQogICAgICBwcmludGYgIiVzJHtmaWxlbW9kZWZtdH0tKyIgIi0i
ICIke0RBU0hFU30iCiAgICBkb25lCiAgZG9uZQogIHByaW50ZiAiXFxuIgp9
CgphbGx0ZXN0cygpIHsKICBsb2NhbCB0cmFjZT1mYWxzZQogIGxvY2FsIGFy
ZwogIGZvciBhcmcgaW4gIiRAIjsgZG8KICAgIGNhc2UgJHthcmd9IGluCiAg
ICAtLXRyYWNlKSB0cmFjZT06IDs7CiAgICBlc2FjCiAgZG9uZQogIGZvciBz
ZXRtb2RlIGluICIke3NldG1vZGVzW0BdfSI7IGRvCiAgICBzZXRkZXNjPSR7
c2V0bW9kZSMqOn0KICAgIHNldG1vZGU9JHtzZXRtb2RlJToqfQogICAgJHt0
cmFjZX0gfHwgcHJpbnRmICIke3NldG1vZGVmbXR9IHwiICIke3NldGRlc2N9
IgogICAgZm9yIHRlc3Rtb2RlIGluICIke3Rlc3Rtb2Rlc1tAXX0iOyBkbwog
ICAgICB0ZXN0ZGVzYz0ke3Rlc3Rtb2RlIyo6fQogICAgICB0ZXN0bW9kZT0k
e3Rlc3Rtb2RlJToqfQogICAgICBmb3IgZmlsZW1vZGUgaW4gIiR7ZmlsZW1v
ZGVzW0BdfSI7IGRvCiAgICAgICAgZmlsZWRlc2M9JHtmaWxlbW9kZSMqOn0K
ICAgICAgICBmaWxlbW9kZT0ke2ZpbGVtb2RlJToqfQogICAgICAgIGlmICR7
dHJhY2V9OyB0aGVuCiAgICAgICAgICAjIHByaW50ZiAic2V0bW9kZSgke3Nl
dGRlc2N9KSwgJHt0ZXN0bW9kZWZtdH0gJHtmaWxlbW9kZWZtdH0gZmQ6ICIg
IiR7dGVzdG1vZGV9IiAiJHtmaWxlbW9kZX0iCiAgICAgICAgICBydW50ZXN0
IC0tdHJhY2UgIi0tc2V0bW9kZT0ke3NldG1vZGV9IiAiLS10ZXN0bW9kZT0k
e3Rlc3Rtb2RlfSIgIi0tZmlsZW1vZGU9JHtmaWxlbW9kZX0iCiAgICAgICAg
ZWxzZQogICAgICAgICAgcHJpbnRmICIgJHtmaWxlbW9kZWZtdH0gfCIgIiQo
cnVudGVzdCAiLS1zZXRtb2RlPSR7c2V0bW9kZX0iICItLXRlc3Rtb2RlPSR7
dGVzdG1vZGV9IiAiLS1maWxlbW9kZT0ke2ZpbGVtb2RlfSIpIgogICAgICAg
IGZpCiAgICAgIGRvbmUKICAgIGRvbmUKICAgIHByaW50ZiAiXFxuIgogIGRv
bmUKfQoKaWYgJHtJU1RSQUNFfTsgdGhlbgogIGFsbHRlc3RzIC0tdHJhY2UK
ZWxzZQogIGhlYWRlcjAKICBoZWFkZXIxCiAgaGVhZGVyMgogIGhlYWRlcjMK
ICBoZWFkZXI0CiAgYWxsdGVzdHMKICBoZWFkZXI0CmZpCgpleGl0IDAK


--------------C3A93BA6DAD0CAABF2E5A2B8
Content-Type: text/plain; charset=us-ascii


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

- Raw text -


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