delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2014/04/22/07:11:50

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:date:message-id:subject:from:to:content-type;
bh=M+FUHP2qiiEKThB03U4Oehd6oTlwfv6wiHnRt5DnsNI=;
b=LFbrn6JyWShlVdAV/zRfkEm+r+tzYYk0bylbKem7U0pJiNw664Xhpz8mV9B6hZaPqw
5I70U+4ce0WjDplfB7Quc82uV064mEY8wdccVubXW2irxorTF6Z7OHt+sVcfadX7qu4Z
Yd92WfXUd3NhMS2xxzULtd/5BYD5wsUZj7J8CDfWXELwQWWwJSV1H6Ent1w1o4z1dJ3g
Ke3eG5b4M6Z9eArOb5hTkvh16dxk72K9rJidWEnWeYpr9S7MaEdUG+bvxJXj6iAWsNeS
58RfiokceNRr4JIxfHk6CNn6Ue+mweB1hyN35EvZbVxowq2uZ3R9r7RxmjDGL7UfHIeg
RQKw==
MIME-Version: 1.0
X-Received: by 10.50.49.44 with SMTP id r12mr28573324ign.41.1398165096638;
Tue, 22 Apr 2014 04:11:36 -0700 (PDT)
Date: Tue, 22 Apr 2014 14:11:36 +0300
Message-ID: <CAA2C=vBuWHmVNrRAcGDSXYLc8Eg_xsyMVszPzrxqHGrpVq2vmw@mail.gmail.com>
Subject: [PATCH] break xstat.c into pieces
From: Ozkan Sezer <sezeroz AT gmail DOT com>
To: djgpp-workers <djgpp-workers AT delorie DOT com>
Reply-To: djgpp-workers AT delorie DOT com

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

The following patch breaks xstat.c into smaller pieces, so that, e.g.
mkdir() doesn't pull in unnecessary dependencies such as ctime.o.

For previous discussions, see:
http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-workers/2009/09/26/21:32:54
http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-workers/2014/04/21/17:23:29
http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-workers/2014/04/21/18:23:14

--
O.S.

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	22 Apr 2014 10:51:10 -0000
@@ -18,5 +18,8 @@ SRC += st_loss.c
 SRC += stat.c
 SRC += umask.c
 SRC += xstat.c
+SRC += xstatbit.c
+SRC += xftimest.c
+SRC += xgetftim.c

 include $(TOP)/../makefile.inc
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	22 Apr 2014 10:51:10 -0000
@@ -6,7 +6,6 @@
  *
  * Internal assist functions which are common to stat(), fstat() and lstat().
  *
- *
  * Copyright (c) 1994-96 Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
  *
  * This software may be used freely as long as the above copyright
@@ -32,90 +31,9 @@

 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
-   struct stat fields.  */
-
-time_t
-_file_time_stamp(unsigned int dos_ftime)
-{
-  struct tm file_tm;
-
-  memset(&file_tm, 0, sizeof(struct tm));
-  file_tm.tm_isdst = -1;    /* let mktime() determine if DST is in effect */
-
-  file_tm.tm_sec  = (dos_ftime & 0x1f) * 2;
-  file_tm.tm_min  = (dos_ftime >>  5) & 0x3f;
-  file_tm.tm_hour = (dos_ftime >> 11) & 0x1f;
-  file_tm.tm_mday = (dos_ftime >> 16) & 0x1f;
-  file_tm.tm_mon  = ((dos_ftime >> 21) & 0x0f) - 1; /* 0 = January */
-  file_tm.tm_year = (dos_ftime >> 25) + 80;
-
-  return mktime(&file_tm);
-}
-
-/* Get time stamp of a DOS file packed as a 32-bit int.
- * This does what Borland's getftime() does, except it doesn't
- * pollute the application namespace and returns an int instead
- * of struct ftime with packed bit-fields.
- */
-
-
-int
-_getftime(int fhandle, unsigned int *dos_ftime)
-{
-  __dpmi_regs regs;
-
-  regs.x.ax = 0x5700;
-  regs.x.bx = fhandle;
-  __dpmi_int(0x21, &regs);
-
-  if (regs.x.flags & 1)
-  {
-    errno = __doserr_to_errno(regs.x.ax);
-    return -1;
-  }
-
-  *dos_ftime = ((unsigned int)regs.x.dx << 16) + (unsigned int)regs.x.cx;
-
-  return 0;
-}
-
+#ifndef NO_ST_BLKSIZE
 /* Cache the cluster size (aka block size) for each drive letter, so we can
  * populate the st_blksize of struct stat easily. The cluster size is
  * measured in bytes.
@@ -190,6 +108,7 @@ _get_cached_blksize (const char *path)

   return cache_blksize[d];
 }
+#endif /* NO_ST_BLKSIZE */

 /* Invent an inode number for those files which don't have valid DOS
  * cluster number.  These could be: devices like /dev/nul; empty
Index: src/libc/posix/sys/stat/xstat.h
===================================================================
RCS file: /cvs/djgpp/djgpp/src/libc/posix/sys/stat/xstat.h,v
retrieving revision 1.6
diff -u -p -r1.6 xstat.h
--- src/libc/posix/sys/stat/xstat.h	17 Oct 2002 23:00:25 -0000	1.6
+++ src/libc/posix/sys/stat/xstat.h	22 Apr 2014 10:51:10 -0000
@@ -52,6 +52,8 @@ extern long             __filelength(int
 extern int              _is_remote_handle(int);
 extern void             _djstat_describe_lossage(FILE *);
 extern int              _getftime(int, unsigned int *);
+#ifndef NO_ST_BLKSIZE
 extern blksize_t        _get_cached_blksize (const char *path);
+#endif

 #endif  /* __XSTAT_H */

--- /dev/null
+++ src/libc/posix/sys/stat/xstatbit.c	22 Apr 2014 10: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;
+

--- /dev/null
+++ src/libc/posix/sys/stat/xgetftim.c	22 Apr 2014 10:51:10 -0000
@@ -0,0 +1,51 @@
+/* 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 */
+
+/*
+ * Internal assist functions which are common to stat(), fstat() and lstat().
+ *
+ * Copyright (c) 1994-96 Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
+ *
+ * This software may be used freely as long as the above copyright
+ * notice is left intact.  There is no warranty on this software.
+ *
+ */
+
+#include <libc/stubs.h>
+#include <errno.h>
+#include <dos.h>
+#include <dpmi.h>
+#include <libc/farptrgs.h>
+#include <libc/dosio.h>
+#include <libc/bss.h>
+
+#include "xstat.h"
+
+/* Get time stamp of a DOS file packed as a 32-bit int.
+ * This does what Borland's getftime() does, except it doesn't
+ * pollute the application namespace and returns an int instead
+ * of struct ftime with packed bit-fields.
+ */
+
+
+int
+_getftime(int fhandle, unsigned int *dos_ftime)
+{
+  __dpmi_regs regs;
+
+  regs.x.ax = 0x5700;
+  regs.x.bx = fhandle;
+  __dpmi_int(0x21, &regs);
+
+  if (regs.x.flags & 1)
+  {
+    errno = __doserr_to_errno(regs.x.ax);
+    return -1;
+  }
+
+  *dos_ftime = ((unsigned int)regs.x.dx << 16) + (unsigned int)regs.x.cx;
+
+  return 0;
+}
+

--- /dev/null
+++ src/libc/posix/sys/stat/xftimest.c	22 Apr 2014 10:51:10 -0000
@@ -0,0 +1,41 @@
+/* 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 */
+
+/*
+ * Internal assist functions which are common to stat(), fstat() and lstat().
+ *
+ * Copyright (c) 1994-96 Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
+ *
+ * This software may be used freely as long as the above copyright
+ * notice is left intact.  There is no warranty on this software.
+ *
+ */
+
+#include <libc/stubs.h>
+#include <string.h>
+#include <time.h>
+
+#include "xstat.h"
+
+/* Convert file date and time to time_t value suitable for
+   struct stat fields.  */
+
+time_t
+_file_time_stamp(unsigned int dos_ftime)
+{
+  struct tm file_tm;
+
+  memset(&file_tm, 0, sizeof(struct tm));
+  file_tm.tm_isdst = -1;    /* let mktime() determine if DST is in effect */
+
+  file_tm.tm_sec  = (dos_ftime & 0x1f) * 2;
+  file_tm.tm_min  = (dos_ftime >>  5) & 0x3f;
+  file_tm.tm_hour = (dos_ftime >> 11) & 0x1f;
+  file_tm.tm_mday = (dos_ftime >> 16) & 0x1f;
+  file_tm.tm_mon  = ((dos_ftime >> 21) & 0x0f) - 1; /* 0 = January */
+  file_tm.tm_year = (dos_ftime >> 25) + 80;
+
+  return mktime(&file_tm);
+}
+

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

SW5kZXg6IHNyYy9saWJjL3Bvc2l4L3N5cy9zdGF0L21ha2VmaWxlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvZGpncHAvZGpncHAvc3JjL2xpYmMvcG9zaXgvc3lzL3N0YXQvbWFrZWZpbGUsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IG1ha2VmaWxlCi0tLSBzcmMv
bGliYy9wb3NpeC9zeXMvc3RhdC9tYWtlZmlsZQk4IE1hciAyMDAzIDAwOjQxOjE3IC0wMDAwCTEu
NQorKysgc3JjL2xpYmMvcG9zaXgvc3lzL3N0YXQvbWFrZWZpbGUJMjIgQXByIDIwMTQgMTA6NTE6
MTAgLTAwMDAKQEAgLTE4LDUgKzE4LDggQEAgU1JDICs9IHN0X2xvc3MuYwogU1JDICs9IHN0YXQu
YwogU1JDICs9IHVtYXNrLmMKIFNSQyArPSB4c3RhdC5jCitTUkMgKz0geHN0YXRiaXQuYworU1JD
ICs9IHhmdGltZXN0LmMKK1NSQyArPSB4Z2V0ZnRpbS5jCiAKIGluY2x1ZGUgJChUT1ApLy4uL21h
a2VmaWxlLmluYwpJbmRleDogc3JjL2xpYmMvcG9zaXgvc3lzL3N0YXQveHN0YXQuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL2RqZ3BwL2RqZ3BwL3NyYy9saWJjL3Bvc2l4L3N5cy9zdGF0L3hz
dGF0LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44IHhzdGF0LmMK
LS0tIHNyYy9saWJjL3Bvc2l4L3N5cy9zdGF0L3hzdGF0LmMJMTAgTWFyIDIwMTIgMTg6MDM6MTEg
LTAwMDAJMS44CisrKyBzcmMvbGliYy9wb3NpeC9zeXMvc3RhdC94c3RhdC5jCTIyIEFwciAyMDE0
IDEwOjUxOjEwIC0wMDAwCkBAIC02LDcgKzYsNiBAQAogICoKICAqIEludGVybmFsIGFzc2lzdCBm
dW5jdGlvbnMgd2hpY2ggYXJlIGNvbW1vbiB0byBzdGF0KCksIGZzdGF0KCkgYW5kIGxzdGF0KCku
CiAgKgotICoKICAqIENvcHlyaWdodCAoYykgMTk5NC05NiBFbGkgWmFyZXRza2lpIDxlbGl6QGlz
LmVsdGEuY28uaWw+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBmcmVlbHkgYXMg
bG9uZyBhcyB0aGUgYWJvdmUgY29weXJpZ2h0CkBAIC0zMiw5MCArMzEsOSBAQAogCiBzdGF0aWMg
aW50IHhzdGF0X2NvdW50ID0gLTE7CiAKLS8qIFNvbWUgZmllbGRzIG9mIHN0cnVjdCBzdGF0IGFy
ZSBleHBlbnNpdmUgdG8gY29tcHV0ZSB1bmRlciBET1MsCi0gICBiZWNhdXNlIHRoZXkgcmVxdWly
ZSBtdWx0aXBsZSBkaXNrIGFjY2Vzc2VzLiAgRm9ydHVuYXRlbHksIG1hbnkKLSAgIERPUyBwcm9n
cmFtcyBkb24ndCBjYXJlIGFib3V0IHRoZXNlLiAgVG8gbGVhdmUgYm90aCBwZWRhbnRzIChsaWtl
Ci0gICBtZSkgYW5kIHBlcmZvcm1hbmNlLW9yaWVudGVkIGd1eXMgaGFwcHksIGEgdmFyaWFibGUg
aXMgcHJvdmlkZWQKLSAgIHdoaWNoIGNvbnRyb2xzIHdoaWNoIGV4cGVuc2l2ZSBmaWVsZHMgc2hv
dWxkIGJlIGNvbXB1dGVkLiAgVG8gZ2V0Ci0gICB0aGUgZmFzdGVzdCBzdGF0KCkgZm9yIHlvdXIg
cHJvZ3JhbSwgY2xlYXIgdGhlIGJpdHMgZm9yIG9ubHkgdGhvc2UKLSAgIGZlYXR1cmVzIHlvdSBu
ZWVkIGFuZCBzZXQgdGhlIG90aGVycy4KLQotICAgVGhpcyBpbXByb3ZlbWVudCB3YXMgc3VnZ2Vz
dGVkIGJ5IENoYXJsZXMgU2FuZG1hbm4KLSAgIDxzYW5kbWFubkBjbGlvLnJpY2UuZWR1PiBhbmQg
REogRGVsb3JpZSA8ZGpAZGVsb3JpZS5jb20+LiAgKi8KLQotLyogUGxlYXNlIHNlZSB0aGUgaGVh
ZGVyIGZpbGUgc3lzL3N0YXQuaCBmb3IgdGhlIGRlZmluaXRpb25zIG9mIF9TVEFUXyouICovCi0K
LS8qIFNob3VsZCB3ZSBib3RoZXIgYWJvdXQgZXhlY3V0YWJsZXMgYXQgYWxsPyAqLwotI2RlZmlu
ZSBfU1RBVF9FWEVDQklUICAgICAgIChfU1RBVF9FWEVDX0VYVCB8IF9TVEFUX0VYRUNfTUFHSUMp
Ci0KLS8qIEJ5IGRlZmF1bHQsIGFsbCB0aGUgYml0cyBhcmUgcmVzZXQgKGluY2x1ZGluZyBhcyB5
ZXQgdW51c2VkIG9uZXMpLCBzbwotICAgcGVvcGxlIHdobyBkb24ndCBjYXJlIHdpbGwgdHJhbnNw
YXJlbnRseSBoYXZlIHRoZSBmdWxsIHZlcnNpb24uICAqLwotdW5zaWduZWQgc2hvcnQgX2Rqc3Rh
dF9mbGFnczsKLQotLyogQXMgd2UgZGVwZW5kIG9uIHVuZG9jdW1lbnRlZCBET1MgZmVhdHVyZXMs
IHdlIGNvdWxkIGZhaWwgaW4gc29tZQotICAgaW5jb21wYXRpYmxlIGVudmlyb25tZW50IG9yIGZ1
dHVyZSBET1MgdmVyc2lvbnMuICBJZiB3ZSBkbywgdGhlCi0gICBmb2xsb3dpbmcgdmFyaWFibGUg
d2lsbCBoYXZlIHNvbWUgb2YgaXRzIGJpdHMgc2V0LiAgRWFjaCBiaXQKLSAgIGRlc2NyaWJlcyBh
IHNpbmdsZSBmZWF0dXJlIHdoaWNoIHdlIHRyaWVkIHRvIHVzZSBhbmQgZmFpbGVkLgotICAgVGhl
IGZ1bmN0aW9uIF9kanN0YXRfZGVzY3JpYmVfbG9zc2FnZSgpIG1heSBiZSBjYWxsZWQgdG8gcHJp
bnQgYQotICAgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGJpdHMgd2hpY2ggd2Vy
ZSBzZXQgYnkgdGhlIGxhc3QKLSAgIGNhbGwgdG8gZj9zdGF0KCkuICBUaGlzIHNob3VsZCBtYWtl
IGRlYnVnZ2luZyBmP3N0YXQoKSBmYWlsdXJlcwotICAgaW4gYW4gdW5hbnRpY2lwYXRlZCBlbnZp
cm9ubWVudCBhIGxvdCBlYXNpZXIuCi0KLSAgIFRoaXMgaW1wcm92ZW1lbnQgd2FzIHN1Z2dlc3Rl
ZCBieSBDaGFybGVzIFNhbmRtYW5uCi0gICA8c2FuZG1hbm5AY2xpby5yaWNlLmVkdT4uICAqLwot
Ci11bnNpZ25lZCBzaG9ydCBfZGpzdGF0X2ZhaWxfYml0czsKLQogLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KIAotLyogQ29udmVydCBmaWxlIGRhdGUgYW5kIHRpbWUgdG8gdGltZV90IHZhbHVlIHN1aXRh
YmxlIGZvcgotICAgc3RydWN0IHN0YXQgZmllbGRzLiAgKi8KLQotdGltZV90Ci1fZmlsZV90aW1l
X3N0YW1wKHVuc2lnbmVkIGludCBkb3NfZnRpbWUpCi17Ci0gIHN0cnVjdCB0bSBmaWxlX3RtOwot
Ci0gIG1lbXNldCgmZmlsZV90bSwgMCwgc2l6ZW9mKHN0cnVjdCB0bSkpOwotICBmaWxlX3RtLnRt
X2lzZHN0ID0gLTE7ICAgIC8qIGxldCBta3RpbWUoKSBkZXRlcm1pbmUgaWYgRFNUIGlzIGluIGVm
ZmVjdCAqLwotCi0gIGZpbGVfdG0udG1fc2VjICA9IChkb3NfZnRpbWUgJiAweDFmKSAqIDI7Ci0g
IGZpbGVfdG0udG1fbWluICA9IChkb3NfZnRpbWUgPj4gIDUpICYgMHgzZjsKLSAgZmlsZV90bS50
bV9ob3VyID0gKGRvc19mdGltZSA+PiAxMSkgJiAweDFmOwotICBmaWxlX3RtLnRtX21kYXkgPSAo
ZG9zX2Z0aW1lID4+IDE2KSAmIDB4MWY7Ci0gIGZpbGVfdG0udG1fbW9uICA9ICgoZG9zX2Z0aW1l
ID4+IDIxKSAmIDB4MGYpIC0gMTsgLyogMCA9IEphbnVhcnkgKi8KLSAgZmlsZV90bS50bV95ZWFy
ID0gKGRvc19mdGltZSA+PiAyNSkgKyA4MDsKLQotICByZXR1cm4gbWt0aW1lKCZmaWxlX3RtKTsK
LX0KLQotLyogR2V0IHRpbWUgc3RhbXAgb2YgYSBET1MgZmlsZSBwYWNrZWQgYXMgYSAzMi1iaXQg
aW50LgotICogVGhpcyBkb2VzIHdoYXQgQm9ybGFuZCdzIGdldGZ0aW1lKCkgZG9lcywgZXhjZXB0
IGl0IGRvZXNuJ3QKLSAqIHBvbGx1dGUgdGhlIGFwcGxpY2F0aW9uIG5hbWVzcGFjZSBhbmQgcmV0
dXJucyBhbiBpbnQgaW5zdGVhZAotICogb2Ygc3RydWN0IGZ0aW1lIHdpdGggcGFja2VkIGJpdC1m
aWVsZHMuCi0gKi8KLQotCi1pbnQKLV9nZXRmdGltZShpbnQgZmhhbmRsZSwgdW5zaWduZWQgaW50
ICpkb3NfZnRpbWUpCi17Ci0gIF9fZHBtaV9yZWdzIHJlZ3M7Ci0KLSAgcmVncy54LmF4ID0gMHg1
NzAwOwotICByZWdzLnguYnggPSBmaGFuZGxlOwotICBfX2RwbWlfaW50KDB4MjEsICZyZWdzKTsK
LQotICBpZiAocmVncy54LmZsYWdzICYgMSkKLSAgewotICAgIGVycm5vID0gX19kb3NlcnJfdG9f
ZXJybm8ocmVncy54LmF4KTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAqZG9zX2Z0aW1lID0g
KCh1bnNpZ25lZCBpbnQpcmVncy54LmR4IDw8IDE2KSArICh1bnNpZ25lZCBpbnQpcmVncy54LmN4
OwotCi0gIHJldHVybiAwOwotfQotCisjaWZuZGVmIE5PX1NUX0JMS1NJWkUKIC8qIENhY2hlIHRo
ZSBjbHVzdGVyIHNpemUgKGFrYSBibG9jayBzaXplKSBmb3IgZWFjaCBkcml2ZSBsZXR0ZXIsIHNv
IHdlIGNhbgogICogcG9wdWxhdGUgdGhlIHN0X2Jsa3NpemUgb2Ygc3RydWN0IHN0YXQgZWFzaWx5
LiBUaGUgY2x1c3RlciBzaXplIGlzCiAgKiBtZWFzdXJlZCBpbiBieXRlcy4KQEAgLTE5MCw2ICsx
MDgsNyBAQCBfZ2V0X2NhY2hlZF9ibGtzaXplIChjb25zdCBjaGFyICpwYXRoKQogCiAgIHJldHVy
biBjYWNoZV9ibGtzaXplW2RdOwogfQorI2VuZGlmIC8qIE5PX1NUX0JMS1NJWkUgKi8KIAogLyog
SW52ZW50IGFuIGlub2RlIG51bWJlciBmb3IgdGhvc2UgZmlsZXMgd2hpY2ggZG9uJ3QgaGF2ZSB2
YWxpZCBET1MKICAqIGNsdXN0ZXIgbnVtYmVyLiAgVGhlc2UgY291bGQgYmU6IGRldmljZXMgbGlr
ZSAvZGV2L251bDsgZW1wdHkKSW5kZXg6IHNyYy9saWJjL3Bvc2l4L3N5cy9zdGF0L3hzdGF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9kamdwcC9kamdwcC9zcmMvbGliYy9wb3NpeC9zeXMv
c3RhdC94c3RhdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiB4
c3RhdC5oCi0tLSBzcmMvbGliYy9wb3NpeC9zeXMvc3RhdC94c3RhdC5oCTE3IE9jdCAyMDAyIDIz
OjAwOjI1IC0wMDAwCTEuNgorKysgc3JjL2xpYmMvcG9zaXgvc3lzL3N0YXQveHN0YXQuaAkyMiBB
cHIgMjAxNCAxMDo1MToxMCAtMDAwMApAQCAtNTIsNiArNTIsOCBAQCBleHRlcm4gbG9uZyAgICAg
ICAgICAgICBfX2ZpbGVsZW5ndGgoaW50CiBleHRlcm4gaW50ICAgICAgICAgICAgICBfaXNfcmVt
b3RlX2hhbmRsZShpbnQpOwogZXh0ZXJuIHZvaWQgICAgICAgICAgICAgX2Rqc3RhdF9kZXNjcmli
ZV9sb3NzYWdlKEZJTEUgKik7CiBleHRlcm4gaW50ICAgICAgICAgICAgICBfZ2V0ZnRpbWUoaW50
LCB1bnNpZ25lZCBpbnQgKik7CisjaWZuZGVmIE5PX1NUX0JMS1NJWkUKIGV4dGVybiBibGtzaXpl
X3QgICAgICAgIF9nZXRfY2FjaGVkX2Jsa3NpemUgKGNvbnN0IGNoYXIgKnBhdGgpOworI2VuZGlm
CiAKICNlbmRpZiAgLyogX19YU1RBVF9IICovCgotLS0gL2Rldi9udWxsCisrKyBzcmMvbGliYy9w
b3NpeC9zeXMvc3RhdC94c3RhdGJpdC5jCTIyIEFwciAyMDE0IDEwOjUxOjEwIC0wMDAwCkBAIC0w
LDAgKzEsNDIgQEAKKy8qIENvcHlyaWdodCAoQykgMjAxMiBESiBEZWxvcmllLCBzZWUgQ09QWUlO
Ry5ESiBmb3IgZGV0YWlscyAqLworLyogQ29weXJpZ2h0IChDKSAxOTk2IERKIERlbG9yaWUsIHNl
ZSBDT1BZSU5HLkRKIGZvciBkZXRhaWxzICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUgREogRGVs
b3JpZSwgc2VlIENPUFlJTkcuREogZm9yIGRldGFpbHMgKi8KKworI2luY2x1ZGUgPGxpYmMvc3R1
YnMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgInhzdGF0LmgiCisKKy8qIFNv
bWUgZmllbGRzIG9mIHN0cnVjdCBzdGF0IGFyZSBleHBlbnNpdmUgdG8gY29tcHV0ZSB1bmRlciBE
T1MsCisgICBiZWNhdXNlIHRoZXkgcmVxdWlyZSBtdWx0aXBsZSBkaXNrIGFjY2Vzc2VzLiAgRm9y
dHVuYXRlbHksIG1hbnkKKyAgIERPUyBwcm9ncmFtcyBkb24ndCBjYXJlIGFib3V0IHRoZXNlLiAg
VG8gbGVhdmUgYm90aCBwZWRhbnRzIChsaWtlCisgICBtZSkgYW5kIHBlcmZvcm1hbmNlLW9yaWVu
dGVkIGd1eXMgaGFwcHksIGEgdmFyaWFibGUgaXMgcHJvdmlkZWQKKyAgIHdoaWNoIGNvbnRyb2xz
IHdoaWNoIGV4cGVuc2l2ZSBmaWVsZHMgc2hvdWxkIGJlIGNvbXB1dGVkLiAgVG8gZ2V0CisgICB0
aGUgZmFzdGVzdCBzdGF0KCkgZm9yIHlvdXIgcHJvZ3JhbSwgY2xlYXIgdGhlIGJpdHMgZm9yIG9u
bHkgdGhvc2UKKyAgIGZlYXR1cmVzIHlvdSBuZWVkIGFuZCBzZXQgdGhlIG90aGVycy4KKworICAg
VGhpcyBpbXByb3ZlbWVudCB3YXMgc3VnZ2VzdGVkIGJ5IENoYXJsZXMgU2FuZG1hbm4KKyAgIDxz
YW5kbWFubkBjbGlvLnJpY2UuZWR1PiBhbmQgREogRGVsb3JpZSA8ZGpAZGVsb3JpZS5jb20+LiAg
Ki8KKworLyogUGxlYXNlIHNlZSB0aGUgaGVhZGVyIGZpbGUgc3lzL3N0YXQuaCBmb3IgdGhlIGRl
ZmluaXRpb25zIG9mIF9TVEFUXyouICovCisKKy8qIFNob3VsZCB3ZSBib3RoZXIgYWJvdXQgZXhl
Y3V0YWJsZXMgYXQgYWxsPyAqLworI2RlZmluZSBfU1RBVF9FWEVDQklUICAgICAgIChfU1RBVF9F
WEVDX0VYVCB8IF9TVEFUX0VYRUNfTUFHSUMpCisKKy8qIEJ5IGRlZmF1bHQsIGFsbCB0aGUgYml0
cyBhcmUgcmVzZXQgKGluY2x1ZGluZyBhcyB5ZXQgdW51c2VkIG9uZXMpLCBzbworICAgcGVvcGxl
IHdobyBkb24ndCBjYXJlIHdpbGwgdHJhbnNwYXJlbnRseSBoYXZlIHRoZSBmdWxsIHZlcnNpb24u
ICAqLwordW5zaWduZWQgc2hvcnQgX2Rqc3RhdF9mbGFnczsKKworLyogQXMgd2UgZGVwZW5kIG9u
IHVuZG9jdW1lbnRlZCBET1MgZmVhdHVyZXMsIHdlIGNvdWxkIGZhaWwgaW4gc29tZQorICAgaW5j
b21wYXRpYmxlIGVudmlyb25tZW50IG9yIGZ1dHVyZSBET1MgdmVyc2lvbnMuICBJZiB3ZSBkbywg
dGhlCisgICBmb2xsb3dpbmcgdmFyaWFibGUgd2lsbCBoYXZlIHNvbWUgb2YgaXRzIGJpdHMgc2V0
LiAgRWFjaCBiaXQKKyAgIGRlc2NyaWJlcyBhIHNpbmdsZSBmZWF0dXJlIHdoaWNoIHdlIHRyaWVk
IHRvIHVzZSBhbmQgZmFpbGVkLgorICAgVGhlIGZ1bmN0aW9uIF9kanN0YXRfZGVzY3JpYmVfbG9z
c2FnZSgpIG1heSBiZSBjYWxsZWQgdG8gcHJpbnQgYQorICAgaHVtYW4tcmVhZGFibGUgZGVzY3Jp
cHRpb24gb2YgdGhlIGJpdHMgd2hpY2ggd2VyZSBzZXQgYnkgdGhlIGxhc3QKKyAgIGNhbGwgdG8g
Zj9zdGF0KCkuICBUaGlzIHNob3VsZCBtYWtlIGRlYnVnZ2luZyBmP3N0YXQoKSBmYWlsdXJlcwor
ICAgaW4gYW4gdW5hbnRpY2lwYXRlZCBlbnZpcm9ubWVudCBhIGxvdCBlYXNpZXIuCisKKyAgIFRo
aXMgaW1wcm92ZW1lbnQgd2FzIHN1Z2dlc3RlZCBieSBDaGFybGVzIFNhbmRtYW5uCisgICA8c2Fu
ZG1hbm5AY2xpby5yaWNlLmVkdT4uICAqLworCit1bnNpZ25lZCBzaG9ydCBfZGpzdGF0X2ZhaWxf
Yml0czsKKwoKLS0tIC9kZXYvbnVsbAorKysgc3JjL2xpYmMvcG9zaXgvc3lzL3N0YXQveGdldGZ0
aW0uYwkyMiBBcHIgMjAxNCAxMDo1MToxMCAtMDAwMApAQCAtMCwwICsxLDUxIEBACisvKiBDb3B5
cmlnaHQgKEMpIDIwMTIgREogRGVsb3JpZSwgc2VlIENPUFlJTkcuREogZm9yIGRldGFpbHMgKi8K
Ky8qIENvcHlyaWdodCAoQykgMTk5NiBESiBEZWxvcmllLCBzZWUgQ09QWUlORy5ESiBmb3IgZGV0
YWlscyAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1IERKIERlbG9yaWUsIHNlZSBDT1BZSU5HLkRK
IGZvciBkZXRhaWxzICovCisKKy8qCisgKiBJbnRlcm5hbCBhc3Npc3QgZnVuY3Rpb25zIHdoaWNo
IGFyZSBjb21tb24gdG8gc3RhdCgpLCBmc3RhdCgpIGFuZCBsc3RhdCgpLgorICoKKyAqIENvcHly
aWdodCAoYykgMTk5NC05NiBFbGkgWmFyZXRza2lpIDxlbGl6QGlzLmVsdGEuY28uaWw+CisgKgor
ICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UgaXMgbGVmdCBpbnRhY3QuICBUaGVyZSBpcyBubyB3YXJyYW50
eSBvbiB0aGlzIHNvZnR3YXJlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGliYy9zdHVicy5oPgor
I2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZG9zLmg+CisjaW5jbHVkZSA8ZHBtaS5oPgor
I2luY2x1ZGUgPGxpYmMvZmFycHRyZ3MuaD4KKyNpbmNsdWRlIDxsaWJjL2Rvc2lvLmg+CisjaW5j
bHVkZSA8bGliYy9ic3MuaD4KKworI2luY2x1ZGUgInhzdGF0LmgiCisKKy8qIEdldCB0aW1lIHN0
YW1wIG9mIGEgRE9TIGZpbGUgcGFja2VkIGFzIGEgMzItYml0IGludC4KKyAqIFRoaXMgZG9lcyB3
aGF0IEJvcmxhbmQncyBnZXRmdGltZSgpIGRvZXMsIGV4Y2VwdCBpdCBkb2Vzbid0CisgKiBwb2xs
dXRlIHRoZSBhcHBsaWNhdGlvbiBuYW1lc3BhY2UgYW5kIHJldHVybnMgYW4gaW50IGluc3RlYWQK
KyAqIG9mIHN0cnVjdCBmdGltZSB3aXRoIHBhY2tlZCBiaXQtZmllbGRzLgorICovCisKKworaW50
CitfZ2V0ZnRpbWUoaW50IGZoYW5kbGUsIHVuc2lnbmVkIGludCAqZG9zX2Z0aW1lKQoreworICBf
X2RwbWlfcmVncyByZWdzOworCisgIHJlZ3MueC5heCA9IDB4NTcwMDsKKyAgcmVncy54LmJ4ID0g
ZmhhbmRsZTsKKyAgX19kcG1pX2ludCgweDIxLCAmcmVncyk7CisKKyAgaWYgKHJlZ3MueC5mbGFn
cyAmIDEpCisgIHsKKyAgICBlcnJubyA9IF9fZG9zZXJyX3RvX2Vycm5vKHJlZ3MueC5heCk7Cisg
ICAgcmV0dXJuIC0xOworICB9CisKKyAgKmRvc19mdGltZSA9ICgodW5zaWduZWQgaW50KXJlZ3Mu
eC5keCA8PCAxNikgKyAodW5zaWduZWQgaW50KXJlZ3MueC5jeDsKKworICByZXR1cm4gMDsKK30K
KwoKLS0tIC9kZXYvbnVsbAorKysgc3JjL2xpYmMvcG9zaXgvc3lzL3N0YXQveGZ0aW1lc3QuYwky
MiBBcHIgMjAxNCAxMDo1MToxMCAtMDAwMApAQCAtMCwwICsxLDQxIEBACisvKiBDb3B5cmlnaHQg
KEMpIDIwMTIgREogRGVsb3JpZSwgc2VlIENPUFlJTkcuREogZm9yIGRldGFpbHMgKi8KKy8qIENv
cHlyaWdodCAoQykgMTk5NiBESiBEZWxvcmllLCBzZWUgQ09QWUlORy5ESiBmb3IgZGV0YWlscyAq
LworLyogQ29weXJpZ2h0IChDKSAxOTk1IERKIERlbG9yaWUsIHNlZSBDT1BZSU5HLkRKIGZvciBk
ZXRhaWxzICovCisKKy8qCisgKiBJbnRlcm5hbCBhc3Npc3QgZnVuY3Rpb25zIHdoaWNoIGFyZSBj
b21tb24gdG8gc3RhdCgpLCBmc3RhdCgpIGFuZCBsc3RhdCgpLgorICoKKyAqIENvcHlyaWdodCAo
YykgMTk5NC05NiBFbGkgWmFyZXRza2lpIDxlbGl6QGlzLmVsdGEuY28uaWw+CisgKgorICogVGhp
cyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UgaXMgbGVmdCBpbnRhY3QuICBUaGVyZSBpcyBubyB3YXJyYW50eSBvbiB0
aGlzIHNvZnR3YXJlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGliYy9zdHVicy5oPgorI2luY2x1
ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgInhzdGF0LmgiCisK
Ky8qIENvbnZlcnQgZmlsZSBkYXRlIGFuZCB0aW1lIHRvIHRpbWVfdCB2YWx1ZSBzdWl0YWJsZSBm
b3IKKyAgIHN0cnVjdCBzdGF0IGZpZWxkcy4gICovCisKK3RpbWVfdAorX2ZpbGVfdGltZV9zdGFt
cCh1bnNpZ25lZCBpbnQgZG9zX2Z0aW1lKQoreworICBzdHJ1Y3QgdG0gZmlsZV90bTsKKworICBt
ZW1zZXQoJmZpbGVfdG0sIDAsIHNpemVvZihzdHJ1Y3QgdG0pKTsKKyAgZmlsZV90bS50bV9pc2Rz
dCA9IC0xOyAgICAvKiBsZXQgbWt0aW1lKCkgZGV0ZXJtaW5lIGlmIERTVCBpcyBpbiBlZmZlY3Qg
Ki8KKworICBmaWxlX3RtLnRtX3NlYyAgPSAoZG9zX2Z0aW1lICYgMHgxZikgKiAyOworICBmaWxl
X3RtLnRtX21pbiAgPSAoZG9zX2Z0aW1lID4+ICA1KSAmIDB4M2Y7CisgIGZpbGVfdG0udG1faG91
ciA9IChkb3NfZnRpbWUgPj4gMTEpICYgMHgxZjsKKyAgZmlsZV90bS50bV9tZGF5ID0gKGRvc19m
dGltZSA+PiAxNikgJiAweDFmOworICBmaWxlX3RtLnRtX21vbiAgPSAoKGRvc19mdGltZSA+PiAy
MSkgJiAweDBmKSAtIDE7IC8qIDAgPSBKYW51YXJ5ICovCisgIGZpbGVfdG0udG1feWVhciA9IChk
b3NfZnRpbWUgPj4gMjUpICsgODA7CisKKyAgcmV0dXJuIG1rdGltZSgmZmlsZV90bSk7Cit9CisK
--047d7bdc1750ec2e8504f79fadc6--

- Raw text -


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