delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2014/04/30/12:59:01

X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f
X-Recipient: djgpp-workers AT delorie DOT com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20120113;
h=mime-version:in-reply-to:references:date:message-id:subject:from:to
:content-type;
bh=sG3qli2pZ0sAj6np/0BONJIJgihTLMhI39gv0h0GOTc=;
b=N+9wLIm92hpna+YEWj0hvYjpIsAoOKgM70UIAX1Qt06m5fkDeg5jQYFr7pEmvH2acw
IxuZfmlzDnkjr/2nLyBzsjARNVvWcG3b8LUgpzYePUkETC7d8p7HMDaMJfbQPENmasuM
4QSLYQFyMPM4/VI8LAqHngvK4fW7lv3J/w8mpVMhu+hpX4YV4/iA3FWsXYIbPGLtWXTp
zGIUvH1qhY8xq0GE9FKjimpxdcC23LwJgeQTRtsSdRfQYd9Lu9vGZy1PyTRfHd3XMIc6
IasHL+Igq/SHBoft+HHrXsqJKWIVX6aNc5ONxdfb5kAlU0HrroV+SIuj4uV0Uvt6sjfZ
ZlYg==
MIME-Version: 1.0
X-Received: by 10.50.49.44 with SMTP id r12mr39555356ign.41.1398876630258;
Wed, 30 Apr 2014 09:50:30 -0700 (PDT)
In-Reply-To: <CAA2C=vBWH49B_zu-1rAqxBvHoxKzZL+pqOANTE0H3MPQ2OkROg@mail.gmail.com>
References: <CAA2C=vBuWHmVNrRAcGDSXYLc8Eg_xsyMVszPzrxqHGrpVq2vmw AT mail DOT gmail DOT com>
<83wqeh9pwq DOT fsf AT gnu DOT org>
<CAA2C=vD_97x3-A0Y52JDfbmmFiuVzF_Ufub6imhmuhTsdsNr4w AT mail DOT gmail DOT com>
<83vbu19o4f DOT fsf AT gnu DOT org>
<CAA2C=vDAWcPpCex4koZXSdorEid7w1=QTAWip7t0n-exMH+vrQ AT mail DOT gmail DOT com>
<83r44p9mjr DOT fsf AT gnu DOT org>
<CAA2C=vBWH49B_zu-1rAqxBvHoxKzZL+pqOANTE0H3MPQ2OkROg AT mail DOT gmail DOT com>
Date: Wed, 30 Apr 2014 19:50:29 +0300
Message-ID: <CAA2C=vD-a_Tx+ZzseEuZU_-U7eJYEsLFNwWVdKLmm85_7_N9qA@mail.gmail.com>
Subject: Re: [PATCH] break xstat.c into pieces
From: Ozkan Sezer <sezeroz AT gmail DOT com>
To: djgpp-workers AT delorie DOT com
Reply-To: djgpp-workers AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: djgpp-workers AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

--047d7bdc1750a1bc4604f8455812
Content-Type: text/plain; charset=UTF-8

On 4/22/14, Ozkan Sezer <sezeroz AT gmail DOT com> wrote:
> On 4/22/14, Eli Zaretskii <eliz AT gnu DOT org> wrote:
[...]
> OK, leaving things to you guys.
>

PING:

If there is still interest in this, I've been using the two patches
inlined below (also attached) for some time and they work well for
me.


* mkdir.c: replace access() call with _chmod(). this loses the extra
_fixpath()+remote rootdir check done by access(), but it shortens
things by not pulling in extra dependencies.

Index: src/libc/posix/sys/stat/mkdir.c
===================================================================
RCS file: /cvs/djgpp/djgpp/src/libc/posix/sys/stat/mkdir.c,v
retrieving revision 1.7
diff -u -p -r1.5 mkdir.c
--- src/libc/posix/sys/stat/mkdir.c	2 Oct 2011 02:40:11 -0000	1.7
+++ src/libc/posix/sys/stat/mkdir.c	24 Apr 2014 07:51:10 -0000
@@ -73,7 +73,8 @@ do_mkdir:
     {
       /* see if the directory existed, in which case
          we should return EEXIST - DJ */
-      if (access(mydirname, D_OK) == 0)
+      if ((attr = _chmod(dir_name,0,0)) != (unsigned)-1
+          && (attr & 0x10))
         errno = EEXIST;
       else
         errno = save_errno;


* move _djstat_fail_bits and _djstat_flags out of xstat.c into new
statbits.c, so that, e.g. mkdir() doesn't pull in unnecessary
dependencies such as ctime.o.

Index: src/libc/posix/sys/stat/makefile
===================================================================
RCS file: /cvs/djgpp/djgpp/src/libc/posix/sys/stat/makefile,v
retrieving revision 1.5
diff -u -p -r1.5 makefile
--- src/libc/posix/sys/stat/makefile	8 Mar 2003 00:41:17 -0000	1.5
+++ src/libc/posix/sys/stat/makefile	24 Apr 2014 07:51:10 -0000
@@ -16,6 +16,7 @@
 SRC += mkfifo.c
 SRC += st_loss.c
 SRC += stat.c
+SRC += statbits.c
 SRC += umask.c
 SRC += xstat.c

Index: src/libc/posix/sys/stat/xstat.c
===================================================================
RCS file: /cvs/djgpp/djgpp/src/libc/posix/sys/stat/xstat.c,v
retrieving revision 1.8
diff -u -p -r1.8 xstat.c
--- src/libc/posix/sys/stat/xstat.c	10 Mar 2012 18:03:11 -0000	1.8
+++ src/libc/posix/sys/stat/xstat.c	24 Apr 2014 07:51:10 -0000
@@ -32,40 +32,6 @@

 static int xstat_count = -1;

-/* Some fields of struct stat are expensive to compute under DOS,
-   because they require multiple disk accesses.  Fortunately, many
-   DOS programs don't care about these.  To leave both pedants (like
-   me) and performance-oriented guys happy, a variable is provided
-   which controls which expensive fields should be computed.  To get
-   the fastest stat() for your program, clear the bits for only those
-   features you need and set the others.
-
-   This improvement was suggested by Charles Sandmann
-   <sandmann AT clio DOT rice DOT edu> and DJ Delorie <dj AT delorie DOT com>.  */
-
-/* Please see the header file sys/stat.h for the definitions of _STAT_*. */
-
-/* Should we bother about executables at all? */
-#define _STAT_EXECBIT       (_STAT_EXEC_EXT | _STAT_EXEC_MAGIC)
-
-/* By default, all the bits are reset (including as yet unused ones), so
-   people who don't care will transparently have the full version.  */
-unsigned short _djstat_flags;
-
-/* As we depend on undocumented DOS features, we could fail in some
-   incompatible environment or future DOS versions.  If we do, the
-   following variable will have some of its bits set.  Each bit
-   describes a single feature which we tried to use and failed.
-   The function _djstat_describe_lossage() may be called to print a
-   human-readable description of the bits which were set by the last
-   call to f?stat().  This should make debugging f?stat() failures
-   in an unanticipated environment a lot easier.
-
-   This improvement was suggested by Charles Sandmann
-   <sandmann AT clio DOT rice DOT edu>.  */
-
-unsigned short _djstat_fail_bits;
-
 /* ----------------------------------------------------------------------- */

 /* Convert file date and time to time_t value suitable for

--- /dev/null
+++ src/libc/posix/sys/stat/statbits.c	24 Apr 2014 07:51:10 -0000
@@ -0,0 +1,42 @@
+/* Copyright (C) 2012 DJ Delorie, see COPYING.DJ for details */
+/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */
+/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
+
+#include <libc/stubs.h>
+#include <sys/stat.h>
+#include "xstat.h"
+
+/* Some fields of struct stat are expensive to compute under DOS,
+   because they require multiple disk accesses.  Fortunately, many
+   DOS programs don't care about these.  To leave both pedants (like
+   me) and performance-oriented guys happy, a variable is provided
+   which controls which expensive fields should be computed.  To get
+   the fastest stat() for your program, clear the bits for only those
+   features you need and set the others.
+
+   This improvement was suggested by Charles Sandmann
+   <sandmann AT clio DOT rice DOT edu> and DJ Delorie <dj AT delorie DOT com>.  */
+
+/* Please see the header file sys/stat.h for the definitions of _STAT_*. */
+
+/* Should we bother about executables at all? */
+#define _STAT_EXECBIT       (_STAT_EXEC_EXT | _STAT_EXEC_MAGIC)
+
+/* By default, all the bits are reset (including as yet unused ones), so
+   people who don't care will transparently have the full version.  */
+unsigned short _djstat_flags;
+
+/* As we depend on undocumented DOS features, we could fail in some
+   incompatible environment or future DOS versions.  If we do, the
+   following variable will have some of its bits set.  Each bit
+   describes a single feature which we tried to use and failed.
+   The function _djstat_describe_lossage() may be called to print a
+   human-readable description of the bits which were set by the last
+   call to f?stat().  This should make debugging f?stat() failures
+   in an unanticipated environment a lot easier.
+
+   This improvement was suggested by Charles Sandmann
+   <sandmann AT clio DOT rice DOT edu>.  */
+
+unsigned short _djstat_fail_bits;
+

--
O.S.

--047d7bdc1750a1bc4604f8455812
Content-Type: text/plain; charset=US-ASCII; name="djxstat.diff"
Content-Disposition: attachment; filename="djxstat.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: file0

SW5kZXg6IHNyYy9saWJjL3Bvc2l4L3N5cy9zdGF0L21ha2VmaWxlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvZGpncHAvZGpncHAvc3JjL2xpYmMvcG9zaXgvc3lzL3N0YXQvbWFrZWZpbGUsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IG1ha2VmaWxlCi0tLSBzcmMv
bGliYy9wb3NpeC9zeXMvc3RhdC9tYWtlZmlsZQk4IE1hciAyMDAzIDAwOjQxOjE3IC0wMDAwCTEu
NQorKysgc3JjL2xpYmMvcG9zaXgvc3lzL3N0YXQvbWFrZWZpbGUJMjQgQXByIDIwMTQgMDc6NTE6
MTAgLTAwMDAKQEAgLTE2LDYgKzE2LDcgQEAKIFNSQyArPSBta2ZpZm8uYwogU1JDICs9IHN0X2xv
c3MuYwogU1JDICs9IHN0YXQuYworU1JDICs9IHN0YXRiaXRzLmMKIFNSQyArPSB1bWFzay5jCiBT
UkMgKz0geHN0YXQuYwogCkluZGV4OiBzcmMvbGliYy9wb3NpeC9zeXMvc3RhdC94c3RhdC5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvZGpncHAvZGpncHAvc3JjL2xpYmMvcG9zaXgvc3lzL3N0
YXQveHN0YXQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjggeHN0
YXQuYwotLS0gc3JjL2xpYmMvcG9zaXgvc3lzL3N0YXQveHN0YXQuYwkxMCBNYXIgMjAxMiAxODow
MzoxMSAtMDAwMAkxLjgKKysrIHNyYy9saWJjL3Bvc2l4L3N5cy9zdGF0L3hzdGF0LmMJMjQgQXBy
IDIwMTQgMDc6NTE6MTAgLTAwMDAKQEAgLTMyLDQwICszMiw2IEBACiAKIHN0YXRpYyBpbnQgeHN0
YXRfY291bnQgPSAtMTsKIAotLyogU29tZSBmaWVsZHMgb2Ygc3RydWN0IHN0YXQgYXJlIGV4cGVu
c2l2ZSB0byBjb21wdXRlIHVuZGVyIERPUywKLSAgIGJlY2F1c2UgdGhleSByZXF1aXJlIG11bHRp
cGxlIGRpc2sgYWNjZXNzZXMuICBGb3J0dW5hdGVseSwgbWFueQotICAgRE9TIHByb2dyYW1zIGRv
bid0IGNhcmUgYWJvdXQgdGhlc2UuICBUbyBsZWF2ZSBib3RoIHBlZGFudHMgKGxpa2UKLSAgIG1l
KSBhbmQgcGVyZm9ybWFuY2Utb3JpZW50ZWQgZ3V5cyBoYXBweSwgYSB2YXJpYWJsZSBpcyBwcm92
aWRlZAotICAgd2hpY2ggY29udHJvbHMgd2hpY2ggZXhwZW5zaXZlIGZpZWxkcyBzaG91bGQgYmUg
Y29tcHV0ZWQuICBUbyBnZXQKLSAgIHRoZSBmYXN0ZXN0IHN0YXQoKSBmb3IgeW91ciBwcm9ncmFt
LCBjbGVhciB0aGUgYml0cyBmb3Igb25seSB0aG9zZQotICAgZmVhdHVyZXMgeW91IG5lZWQgYW5k
IHNldCB0aGUgb3RoZXJzLgotCi0gICBUaGlzIGltcHJvdmVtZW50IHdhcyBzdWdnZXN0ZWQgYnkg
Q2hhcmxlcyBTYW5kbWFubgotICAgPHNhbmRtYW5uQGNsaW8ucmljZS5lZHU+IGFuZCBESiBEZWxv
cmllIDxkakBkZWxvcmllLmNvbT4uICAqLwotCi0vKiBQbGVhc2Ugc2VlIHRoZSBoZWFkZXIgZmls
ZSBzeXMvc3RhdC5oIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgX1NUQVRfKi4gKi8KLQotLyogU2hv
dWxkIHdlIGJvdGhlciBhYm91dCBleGVjdXRhYmxlcyBhdCBhbGw/ICovCi0jZGVmaW5lIF9TVEFU
X0VYRUNCSVQgICAgICAgKF9TVEFUX0VYRUNfRVhUIHwgX1NUQVRfRVhFQ19NQUdJQykKLQotLyog
QnkgZGVmYXVsdCwgYWxsIHRoZSBiaXRzIGFyZSByZXNldCAoaW5jbHVkaW5nIGFzIHlldCB1bnVz
ZWQgb25lcyksIHNvCi0gICBwZW9wbGUgd2hvIGRvbid0IGNhcmUgd2lsbCB0cmFuc3BhcmVudGx5
IGhhdmUgdGhlIGZ1bGwgdmVyc2lvbi4gICovCi11bnNpZ25lZCBzaG9ydCBfZGpzdGF0X2ZsYWdz
OwotCi0vKiBBcyB3ZSBkZXBlbmQgb24gdW5kb2N1bWVudGVkIERPUyBmZWF0dXJlcywgd2UgY291
bGQgZmFpbCBpbiBzb21lCi0gICBpbmNvbXBhdGlibGUgZW52aXJvbm1lbnQgb3IgZnV0dXJlIERP
UyB2ZXJzaW9ucy4gIElmIHdlIGRvLCB0aGUKLSAgIGZvbGxvd2luZyB2YXJpYWJsZSB3aWxsIGhh
dmUgc29tZSBvZiBpdHMgYml0cyBzZXQuICBFYWNoIGJpdAotICAgZGVzY3JpYmVzIGEgc2luZ2xl
IGZlYXR1cmUgd2hpY2ggd2UgdHJpZWQgdG8gdXNlIGFuZCBmYWlsZWQuCi0gICBUaGUgZnVuY3Rp
b24gX2Rqc3RhdF9kZXNjcmliZV9sb3NzYWdlKCkgbWF5IGJlIGNhbGxlZCB0byBwcmludCBhCi0g
ICBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgYml0cyB3aGljaCB3ZXJlIHNldCBi
eSB0aGUgbGFzdAotICAgY2FsbCB0byBmP3N0YXQoKS4gIFRoaXMgc2hvdWxkIG1ha2UgZGVidWdn
aW5nIGY/c3RhdCgpIGZhaWx1cmVzCi0gICBpbiBhbiB1bmFudGljaXBhdGVkIGVudmlyb25tZW50
IGEgbG90IGVhc2llci4KLQotICAgVGhpcyBpbXByb3ZlbWVudCB3YXMgc3VnZ2VzdGVkIGJ5IENo
YXJsZXMgU2FuZG1hbm4KLSAgIDxzYW5kbWFubkBjbGlvLnJpY2UuZWR1Pi4gICovCi0KLXVuc2ln
bmVkIHNob3J0IF9kanN0YXRfZmFpbF9iaXRzOwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAv
KiBDb252ZXJ0IGZpbGUgZGF0ZSBhbmQgdGltZSB0byB0aW1lX3QgdmFsdWUgc3VpdGFibGUgZm9y
CgotLS0gL2Rldi9udWxsCisrKyBzcmMvbGliYy9wb3NpeC9zeXMvc3RhdC9zdGF0Yml0cy5jCTI0
IEFwciAyMDE0IDA3OjUxOjEwIC0wMDAwCkBAIC0wLDAgKzEsNDIgQEAKKy8qIENvcHlyaWdodCAo
QykgMjAxMiBESiBEZWxvcmllLCBzZWUgQ09QWUlORy5ESiBmb3IgZGV0YWlscyAqLworLyogQ29w
eXJpZ2h0IChDKSAxOTk2IERKIERlbG9yaWUsIHNlZSBDT1BZSU5HLkRKIGZvciBkZXRhaWxzICov
CisvKiBDb3B5cmlnaHQgKEMpIDE5OTUgREogRGVsb3JpZSwgc2VlIENPUFlJTkcuREogZm9yIGRl
dGFpbHMgKi8KKworI2luY2x1ZGUgPGxpYmMvc3R1YnMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5o
PgorI2luY2x1ZGUgInhzdGF0LmgiCisKKy8qIFNvbWUgZmllbGRzIG9mIHN0cnVjdCBzdGF0IGFy
ZSBleHBlbnNpdmUgdG8gY29tcHV0ZSB1bmRlciBET1MsCisgICBiZWNhdXNlIHRoZXkgcmVxdWly
ZSBtdWx0aXBsZSBkaXNrIGFjY2Vzc2VzLiAgRm9ydHVuYXRlbHksIG1hbnkKKyAgIERPUyBwcm9n
cmFtcyBkb24ndCBjYXJlIGFib3V0IHRoZXNlLiAgVG8gbGVhdmUgYm90aCBwZWRhbnRzIChsaWtl
CisgICBtZSkgYW5kIHBlcmZvcm1hbmNlLW9yaWVudGVkIGd1eXMgaGFwcHksIGEgdmFyaWFibGUg
aXMgcHJvdmlkZWQKKyAgIHdoaWNoIGNvbnRyb2xzIHdoaWNoIGV4cGVuc2l2ZSBmaWVsZHMgc2hv
dWxkIGJlIGNvbXB1dGVkLiAgVG8gZ2V0CisgICB0aGUgZmFzdGVzdCBzdGF0KCkgZm9yIHlvdXIg
cHJvZ3JhbSwgY2xlYXIgdGhlIGJpdHMgZm9yIG9ubHkgdGhvc2UKKyAgIGZlYXR1cmVzIHlvdSBu
ZWVkIGFuZCBzZXQgdGhlIG90aGVycy4KKworICAgVGhpcyBpbXByb3ZlbWVudCB3YXMgc3VnZ2Vz
dGVkIGJ5IENoYXJsZXMgU2FuZG1hbm4KKyAgIDxzYW5kbWFubkBjbGlvLnJpY2UuZWR1PiBhbmQg
REogRGVsb3JpZSA8ZGpAZGVsb3JpZS5jb20+LiAgKi8KKworLyogUGxlYXNlIHNlZSB0aGUgaGVh
ZGVyIGZpbGUgc3lzL3N0YXQuaCBmb3IgdGhlIGRlZmluaXRpb25zIG9mIF9TVEFUXyouICovCisK
Ky8qIFNob3VsZCB3ZSBib3RoZXIgYWJvdXQgZXhlY3V0YWJsZXMgYXQgYWxsPyAqLworI2RlZmlu
ZSBfU1RBVF9FWEVDQklUICAgICAgIChfU1RBVF9FWEVDX0VYVCB8IF9TVEFUX0VYRUNfTUFHSUMp
CisKKy8qIEJ5IGRlZmF1bHQsIGFsbCB0aGUgYml0cyBhcmUgcmVzZXQgKGluY2x1ZGluZyBhcyB5
ZXQgdW51c2VkIG9uZXMpLCBzbworICAgcGVvcGxlIHdobyBkb24ndCBjYXJlIHdpbGwgdHJhbnNw
YXJlbnRseSBoYXZlIHRoZSBmdWxsIHZlcnNpb24uICAqLwordW5zaWduZWQgc2hvcnQgX2Rqc3Rh
dF9mbGFnczsKKworLyogQXMgd2UgZGVwZW5kIG9uIHVuZG9jdW1lbnRlZCBET1MgZmVhdHVyZXMs
IHdlIGNvdWxkIGZhaWwgaW4gc29tZQorICAgaW5jb21wYXRpYmxlIGVudmlyb25tZW50IG9yIGZ1
dHVyZSBET1MgdmVyc2lvbnMuICBJZiB3ZSBkbywgdGhlCisgICBmb2xsb3dpbmcgdmFyaWFibGUg
d2lsbCBoYXZlIHNvbWUgb2YgaXRzIGJpdHMgc2V0LiAgRWFjaCBiaXQKKyAgIGRlc2NyaWJlcyBh
IHNpbmdsZSBmZWF0dXJlIHdoaWNoIHdlIHRyaWVkIHRvIHVzZSBhbmQgZmFpbGVkLgorICAgVGhl
IGZ1bmN0aW9uIF9kanN0YXRfZGVzY3JpYmVfbG9zc2FnZSgpIG1heSBiZSBjYWxsZWQgdG8gcHJp
bnQgYQorICAgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGJpdHMgd2hpY2ggd2Vy
ZSBzZXQgYnkgdGhlIGxhc3QKKyAgIGNhbGwgdG8gZj9zdGF0KCkuICBUaGlzIHNob3VsZCBtYWtl
IGRlYnVnZ2luZyBmP3N0YXQoKSBmYWlsdXJlcworICAgaW4gYW4gdW5hbnRpY2lwYXRlZCBlbnZp
cm9ubWVudCBhIGxvdCBlYXNpZXIuCisKKyAgIFRoaXMgaW1wcm92ZW1lbnQgd2FzIHN1Z2dlc3Rl
ZCBieSBDaGFybGVzIFNhbmRtYW5uCisgICA8c2FuZG1hbm5AY2xpby5yaWNlLmVkdT4uICAqLwor
Cit1bnNpZ25lZCBzaG9ydCBfZGpzdGF0X2ZhaWxfYml0czsKKwo=
--047d7bdc1750a1bc4604f8455812
Content-Type: text/plain; charset=US-ASCII; name="djmkdir.diff"
Content-Disposition: attachment; filename="djmkdir.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: file0

SW5kZXg6IHNyYy9saWJjL3Bvc2l4L3N5cy9zdGF0L21rZGlyLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9kamdwcC9kamdwcC9zcmMvbGliYy9wb3NpeC9zeXMvc3RhdC9ta2Rpci5jLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNSBta2Rpci5jCi0tLSBzcmMvbGli
Yy9wb3NpeC9zeXMvc3RhdC9ta2Rpci5jCTIgT2N0IDIwMTEgMDI6NDA6MTEgLTAwMDAJMS43Cisr
KyBzcmMvbGliYy9wb3NpeC9zeXMvc3RhdC9ta2Rpci5jCTI0IEFwciAyMDE0IDA3OjUxOjEwIC0w
MDAwCkBAIC03Myw3ICs3Myw4IEBAIGRvX21rZGlyOgogICAgIHsKICAgICAgIC8qIHNlZSBpZiB0
aGUgZGlyZWN0b3J5IGV4aXN0ZWQsIGluIHdoaWNoIGNhc2UKICAgICAgICAgIHdlIHNob3VsZCBy
ZXR1cm4gRUVYSVNUIC0gREogKi8KLSAgICAgIGlmIChhY2Nlc3MobXlkaXJuYW1lLCBEX09LKSA9
PSAwKQorICAgICAgaWYgKChhdHRyID0gX2NobW9kKGRpcl9uYW1lLDAsMCkpICE9ICh1bnNpZ25l
ZCktMQorICAgICAgICAgICYmIChhdHRyICYgMHgxMCkpCiAgICAgICAgIGVycm5vID0gRUVYSVNU
OwogICAgICAgZWxzZQogICAgICAgICBlcnJubyA9IHNhdmVfZXJybm87Cg==
--047d7bdc1750a1bc4604f8455812--

- Raw text -


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