From unknown Tue Aug 19 02:53:02 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#14803 <14803@debbugs.gnu.org> To: bug#14803 <14803@debbugs.gnu.org> Subject: Status: Setting close-on-exec flag consistently Reply-To: bug#14803 <14803@debbugs.gnu.org> Date: Tue, 19 Aug 2025 09:53:02 +0000 retitle 14803 Setting close-on-exec flag consistently reassign 14803 emacs submitter 14803 Paul Eggert severity 14803 normal tag 14803 patch thanks From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 06 05:13:54 2013 Received: (at submit) by debbugs.gnu.org; 6 Jul 2013 09:13:54 +0000 Received: from localhost ([127.0.0.1]:33626 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvOYx-00027b-O9 for submit@debbugs.gnu.org; Sat, 06 Jul 2013 05:13:54 -0400 Received: from eggs.gnu.org ([208.118.235.92]:44953) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvOYt-00026z-3l for submit@debbugs.gnu.org; Sat, 06 Jul 2013 05:13:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UvOYh-0008Cz-Gc for submit@debbugs.gnu.org; Sat, 06 Jul 2013 05:13:41 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-99.2 required=5.0 tests=BAYES_50,USER_IN_WHITELIST autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:58492) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UvOYh-0008Ck-CJ for submit@debbugs.gnu.org; Sat, 06 Jul 2013 05:13:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46611) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UvOYc-0000o7-E9 for bug-gnu-emacs@gnu.org; Sat, 06 Jul 2013 05:13:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UvOYW-0008BN-Hr for bug-gnu-emacs@gnu.org; Sat, 06 Jul 2013 05:13:30 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:45415) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UvOYV-0008B3-UW for bug-gnu-emacs@gnu.org; Sat, 06 Jul 2013 05:13:24 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 07699A60048 for ; Sat, 6 Jul 2013 02:13:23 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id sB47L5f24gJI for ; Sat, 6 Jul 2013 02:13:19 -0700 (PDT) Received: from [192.168.1.9] (pool-71-108-49-126.lsanca.fios.verizon.net [71.108.49.126]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id BAC5CA60001 for ; Sat, 6 Jul 2013 02:13:19 -0700 (PDT) Message-ID: <51D7DFAF.3030500@cs.ucla.edu> Date: Sat, 06 Jul 2013 02:13:19 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7 MIME-Version: 1.0 To: bug-gnu-emacs@gnu.org Subject: Setting close-on-exec flag consistently X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) Tags: patch Here's a patch I'd like to install into Emacs soon. It changes Emacs so that it creates file descriptors that are close-on-exec unless they are intended to be propagated to child processes. This patch may affect the Microsoft Windows ports so I'm sending it to bug-gnu-emacs first. Much of the new code is imported from gnulib. === modified file 'ChangeLog' --- ChangeLog 2013-07-03 03:20:04 +0000 +++ ChangeLog 2013-07-06 08:31:57 +0000 @@ -1,3 +1,12 @@ +2013-07-06 Paul Eggert + + Make file descriptors close-on-exec when possible. + * configure.ac (mkostemp): New function to check for. + (PTY_OPEN): Pass O_CLOEXEC to posix_openpt. + * lib/fcntl.c, lib/getdtablesize.c, lib/pipe2.c, m4/fcntl.m4: + * m4/getdtablesize.m4, m4/pipe2.m4: New files, taken from gnulib. + * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. + 2013-07-03 Christoph Egger (tiny change) * configure.ac (emacs_broken_SIGIO): Set on gnu-kfreebsd to avoid hang. === modified file 'admin/ChangeLog' --- admin/ChangeLog 2013-07-06 02:32:13 +0000 +++ admin/ChangeLog 2013-07-06 08:31:57 +0000 @@ -1,3 +1,9 @@ +2013-07-06 Paul Eggert + + Make file descriptors close-on-exec when possible. + * merge-gnulib (GNULIB_MODULES): Add fcntl, pipe2. + (GNULIB_TOOL_FLAGS): Avoid binary-io, close. Do not avoid fcntl. + 2013-07-06 Glenn Morris * admin.el (manual-misc-manuals): New function. === modified file 'admin/merge-gnulib' --- admin/merge-gnulib 2013-05-07 21:34:03 +0000 +++ admin/merge-gnulib 2013-07-06 07:04:07 +0000 @@ -29,11 +29,11 @@ alloca-opt c-ctype c-strcase careadlinkat close-stream crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat - fcntl-h fdatasync fdopendir filemode fstatat fsync + fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday ignore-value intprops largefile lstat manywarnings memrchr mktime - pselect pthread_sigmask putenv qacl readlink readlinkat + pipe2 pselect pthread_sigmask putenv qacl readlink readlinkat sig2str socklen stat-time stdalign stdarg stdbool stdio strftime strtoimax strtoumax symlink sys_stat sys_time time timer-time timespec-add timespec-sub unsetenv utimens @@ -41,8 +41,8 @@ ' GNULIB_TOOL_FLAGS=' - --avoid=dup - --avoid=fchdir --avoid=fcntl --avoid=fstat + --avoid=binary-io --avoid=close --avoid=dup + --avoid=fchdir --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise === modified file 'configure.ac' --- configure.ac 2013-07-03 03:20:04 +0000 +++ configure.ac 2013-07-06 07:04:07 +0000 @@ -3244,7 +3244,7 @@ getrlimit setrlimit shutdown getaddrinfo \ strsignal setitimer \ sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \ -gai_strerror mkstemp getline getdelim sync \ +gai_strerror mkostemp mkstemp getline getdelim sync \ difftime posix_memalign \ getpwent endpwent getgrent endgrent \ touchlock \ @@ -3934,7 +3934,7 @@ AC_DEFINE(PTY_TTY_NAME_SPRINTF, [{ char *ptyname = 0; sigset_t blocked; sigemptyset (&blocked); sigaddset (&blocked, SIGCHLD); pthread_sigmask (SIG_BLOCK, &blocked, 0); if (grantpt (fd) != -1 && unlockpt (fd) != -1) ptyname = ptsname(fd); pthread_sigmask (SIG_UNBLOCK, &blocked, 0); if (!ptyname) { close (fd); return -1; } snprintf (pty_name, sizeof pty_name, "%s", ptyname); }]) dnl if HAVE_POSIX_OPENPT if test "x$ac_cv_func_posix_openpt" = xyes; then - AC_DEFINE(PTY_OPEN, [fd = posix_openpt (O_RDWR | O_NOCTTY)]) + AC_DEFINE(PTY_OPEN, [fd = posix_openpt (O_RDWR | O_CLOEXEC | O_NOCTTY)]) AC_DEFINE(PTY_NAME_SPRINTF, []) dnl if HAVE_GETPT elif test "x$ac_cv_func_getpt" = xyes; then === added file 'lib/fcntl.c' --- lib/fcntl.c 1970-01-01 00:00:00 +0000 +++ lib/fcntl.c 2013-07-06 07:04:07 +0000 @@ -0,0 +1,311 @@ +/* Provide file descriptor control. + + Copyright (C) 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include +#include + +#if !HAVE_FCNTL +# define rpl_fcntl fcntl +#endif +#undef fcntl + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include + +/* Get _get_osfhandle. */ +# include "msvc-nothrow.h" + +/* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ +# define OPEN_MAX_MAX 0x10000 + +/* Duplicate OLDFD into the first available slot of at least NEWFD, + which must be positive, with FLAGS determining whether the duplicate + will be inheritable. */ +static int +dupfd (int oldfd, int newfd, int flags) +{ + /* Mingw has no way to create an arbitrary fd. Iterate until all + file descriptors less than newfd are filled up. */ + HANDLE curr_process = GetCurrentProcess (); + HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd); + unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT]; + unsigned int fds_to_close_bound = 0; + int result; + BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE; + int mode; + + if (newfd < 0 || getdtablesize () <= newfd) + { + errno = EINVAL; + return -1; + } + if (old_handle == INVALID_HANDLE_VALUE + || (mode = setmode (oldfd, O_BINARY)) == -1) + { + /* oldfd is not open, or is an unassigned standard file + descriptor. */ + errno = EBADF; + return -1; + } + setmode (oldfd, mode); + flags |= mode; + + for (;;) + { + HANDLE new_handle; + int duplicated_fd; + unsigned int index; + + if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ + old_handle, /* SourceHandle */ + curr_process, /* TargetProcessHandle */ + (PHANDLE) &new_handle, /* TargetHandle */ + (DWORD) 0, /* DesiredAccess */ + inherit, /* InheritHandle */ + DUPLICATE_SAME_ACCESS)) /* Options */ + { + /* TODO: Translate GetLastError () into errno. */ + errno = EMFILE; + result = -1; + break; + } + duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags); + if (duplicated_fd < 0) + { + CloseHandle (new_handle); + errno = EMFILE; + result = -1; + break; + } + if (newfd <= duplicated_fd) + { + result = duplicated_fd; + break; + } + + /* Set the bit duplicated_fd in fds_to_close[]. */ + index = (unsigned int) duplicated_fd / CHAR_BIT; + if (fds_to_close_bound <= index) + { + if (sizeof fds_to_close <= index) + /* Need to increase OPEN_MAX_MAX. */ + abort (); + memset (fds_to_close + fds_to_close_bound, '\0', + index + 1 - fds_to_close_bound); + fds_to_close_bound = index + 1; + } + fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT); + } + + /* Close the previous fds that turned out to be too small. */ + { + int saved_errno = errno; + unsigned int duplicated_fd; + + for (duplicated_fd = 0; + duplicated_fd < fds_to_close_bound * CHAR_BIT; + duplicated_fd++) + if ((fds_to_close[duplicated_fd / CHAR_BIT] + >> (duplicated_fd % CHAR_BIT)) + & 1) + close (duplicated_fd); + + errno = saved_errno; + } + +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (oldfd, result); +# endif + return result; +} +#endif /* W32 */ + +/* Perform the specified ACTION on the file descriptor FD, possibly + using the argument ARG further described below. This replacement + handles the following actions, and forwards all others on to the + native fcntl. An unrecognized ACTION returns -1 with errno set to + EINVAL. + + F_DUPFD - duplicate FD, with int ARG being the minimum target fd. + If successful, return the duplicate, which will be inheritable; + otherwise return -1 and set errno. + + F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum + target fd. If successful, return the duplicate, which will not be + inheritable; otherwise return -1 and set errno. + + F_GETFD - ARG need not be present. If successful, return a + non-negative value containing the descriptor flags of FD (only + FD_CLOEXEC is portable, but other flags may be present); otherwise + return -1 and set errno. */ + +int +rpl_fcntl (int fd, int action, /* arg */...) +{ + va_list arg; + int result = -1; + va_start (arg, action); + switch (action) + { + +#if !HAVE_FCNTL + case F_DUPFD: + { + int target = va_arg (arg, int); + result = dupfd (fd, target, 0); + break; + } +#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR + case F_DUPFD: + { + int target = va_arg (arg, int); + /* Detect invalid target; needed for cygwin 1.5.x. */ + if (target < 0 || getdtablesize () <= target) + errno = EINVAL; + else + { + /* Haiku alpha 2 loses fd flags on original. */ + int flags = fcntl (fd, F_GETFD); + if (flags < 0) + { + result = -1; + break; + } + result = fcntl (fd, action, target); + if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) + { + int saved_errno = errno; + close (result); + result = -1; + errno = saved_errno; + } +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif + } + break; + } /* F_DUPFD */ +#endif /* FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR */ + + case F_DUPFD_CLOEXEC: + { + int target = va_arg (arg, int); + +#if !HAVE_FCNTL + result = dupfd (fd, target, O_CLOEXEC); + break; +#else /* HAVE_FCNTL */ + /* Try the system call first, if the headers claim it exists + (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we + may be running with a glibc that has the macro but with an + older kernel that does not support it. Cache the + information on whether the system call really works, but + avoid caching failure if the corresponding F_DUPFD fails + for any reason. 0 = unknown, 1 = yes, -1 = no. */ + static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; + if (0 <= have_dupfd_cloexec) + { + result = fcntl (fd, action, target); + if (0 <= result || errno != EINVAL) + { + have_dupfd_cloexec = 1; +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif + } + else + { + result = rpl_fcntl (fd, F_DUPFD, target); + if (result < 0) + break; + have_dupfd_cloexec = -1; + } + } + else + result = rpl_fcntl (fd, F_DUPFD, target); + if (0 <= result && have_dupfd_cloexec == -1) + { + int flags = fcntl (result, F_GETFD); + if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) + { + int saved_errno = errno; + close (result); + errno = saved_errno; + result = -1; + } + } + break; +#endif /* HAVE_FCNTL */ + } /* F_DUPFD_CLOEXEC */ + +#if !HAVE_FCNTL + case F_GETFD: + { +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + HANDLE handle = (HANDLE) _get_osfhandle (fd); + DWORD flags; + if (handle == INVALID_HANDLE_VALUE + || GetHandleInformation (handle, &flags) == 0) + errno = EBADF; + else + result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC; +# else /* !W32 */ + /* Use dup2 to reject invalid file descriptors. No way to + access this information, so punt. */ + if (0 <= dup2 (fd, fd)) + result = 0; +# endif /* !W32 */ + break; + } /* F_GETFD */ +#endif /* !HAVE_FCNTL */ + + /* Implementing F_SETFD on mingw is not trivial - there is no + API for changing the O_NOINHERIT bit on an fd, and merely + changing the HANDLE_FLAG_INHERIT bit on the underlying handle + can lead to odd state. It may be possible by duplicating the + handle, using _open_osfhandle with the right flags, then + using dup2 to move the duplicate onto the original, but that + is not supported for now. */ + + default: + { +#if HAVE_FCNTL + void *p = va_arg (arg, void *); + result = fcntl (fd, action, p); +#else + errno = EINVAL; +#endif + break; + } + } + va_end (arg); + return result; +} === added file 'lib/getdtablesize.c' --- lib/getdtablesize.c 1970-01-01 00:00:00 +0000 +++ lib/getdtablesize.c 2013-07-06 07:04:07 +0000 @@ -0,0 +1,86 @@ +/* getdtablesize() function for platforms that don't have it. + Copyright (C) 2008-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +#include + +#include "msvc-inval.h" + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +_setmaxstdio_nothrow (int newmax) +{ + int result; + + TRY_MSVC_INVAL + { + result = _setmaxstdio (newmax); + } + CATCH_MSVC_INVAL + { + result = -1; + } + DONE_MSVC_INVAL; + + return result; +} +# define _setmaxstdio _setmaxstdio_nothrow +#endif + +/* Cache for the previous getdtablesize () result. */ +static int dtablesize; + +int +getdtablesize (void) +{ + if (dtablesize == 0) + { + /* We are looking for the number N such that the valid file descriptors + are 0..N-1. It can be obtained through a loop as follows: + { + int fd; + for (fd = 3; fd < 65536; fd++) + if (dup2 (0, fd) == -1) + break; + return fd; + } + On Windows XP, the result is 2048. + The drawback of this loop is that it allocates memory for a libc + internal array that is never freed. + + The number N can also be obtained as the upper bound for + _getmaxstdio (). _getmaxstdio () returns the maximum number of open + FILE objects. The sanity check in _setmaxstdio reveals the maximum + number of file descriptors. This too allocates memory, but it is + freed when we call _setmaxstdio with the original value. */ + int orig_max_stdio = _getmaxstdio (); + unsigned int bound; + for (bound = 0x10000; _setmaxstdio (bound) < 0; bound = bound / 2) + ; + _setmaxstdio (orig_max_stdio); + dtablesize = bound; + } + return dtablesize; +} + +#endif === modified file 'lib/gnulib.mk' --- lib/gnulib.mk 2013-05-07 21:34:03 +0000 +++ lib/gnulib.mk 2013-07-06 07:04:07 +0000 @@ -21,7 +21,7 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=dup --avoid=fchdir --avoid=fcntl --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=sigprocmask --avoid=sys_types --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt c-ctype c-strcase careadlinkat close-stream crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday ignore-value intprops largefile lstat manywarnings memrchr mktime pselect pthread_sigmask putenv qacl readlink readlinkat sig2str socklen stat-time stdalign stdarg stdbool stdio strftime strtoimax strtoumax symlink sys_stat sys_ti me time t imer-time timespec-add timespec-sub unsetenv utimens warnings +# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=binary-io --avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=sigprocmask --avoid=sys_types --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt c-ctype c-strcase careadlinkat close-stream crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday ignore-value intprops largefile lstat manywarnings memrchr mktime pipe2 pselect pthread_sigmask putenv qacl readlink readlinkat sig2str socklen stat-time stdalign stdarg stdbool stdio strftime strtoimax str toumax sy mlink sys_stat sys_time time timer-time timespec-add timespec-sub unsetenv utimens warnings MOSTLYCLEANFILES += core *.stackdump @@ -296,6 +296,15 @@ ## end gnulib module faccessat +## begin gnulib module fcntl + + +EXTRA_DIST += fcntl.c + +EXTRA_libgnu_a_SOURCES += fcntl.c + +## end gnulib module fcntl + ## begin gnulib module fcntl-h BUILT_SOURCES += fcntl.h @@ -384,6 +393,17 @@ ## end gnulib module fsync +## begin gnulib module getdtablesize + +if gl_GNULIB_ENABLED_getdtablesize + +endif +EXTRA_DIST += getdtablesize.c + +EXTRA_libgnu_a_SOURCES += getdtablesize.c + +## end gnulib module getdtablesize + ## begin gnulib module getgroups if gl_GNULIB_ENABLED_getgroups @@ -568,6 +588,12 @@ ## end gnulib module pathmax +## begin gnulib module pipe2 + +libgnu_a_SOURCES += pipe2.c + +## end gnulib module pipe2 + ## begin gnulib module pselect @@ -1704,9 +1730,7 @@ ## begin gnulib module verify -if gl_GNULIB_ENABLED_verify -endif EXTRA_DIST += verify.h ## end gnulib module verify === added file 'lib/pipe2.c' --- lib/pipe2.c 1970-01-01 00:00:00 +0000 +++ lib/pipe2.c 2013-07-06 07:04:07 +0000 @@ -0,0 +1,171 @@ +/* Create a pipe, with specific opening flags. + Copyright (C) 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +#if GNULIB_BINARY_IO +# include "binary-io.h" +#endif + +#include "verify.h" + +#if GNULIB_defined_O_NONBLOCK +# include "nonblocking.h" +#endif + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Native Windows API. */ + +# include + +#endif + +int +pipe2 (int fd[2], int flags) +{ + /* Mingw _pipe() corrupts fd on failure; also, if we succeed at + creating the pipe but later fail at changing fcntl, we want + to leave fd unchanged: http://austingroupbugs.net/view.php?id=467 */ + int tmp[2]; + tmp[0] = fd[0]; + tmp[1] = fd[1]; + +#if HAVE_PIPE2 +# undef pipe2 + /* Try the system call first, if it exists. (We may be running with a glibc + that has the function but with an older kernel that lacks it.) */ + { + /* Cache the information whether the system call really exists. */ + static int have_pipe2_really; /* 0 = unknown, 1 = yes, -1 = no */ + if (have_pipe2_really >= 0) + { + int result = pipe2 (fd, flags); + if (!(result < 0 && errno == ENOSYS)) + { + have_pipe2_really = 1; + return result; + } + have_pipe2_really = -1; + } + } +#endif + + /* Check the supported flags. */ + if ((flags & ~(O_CLOEXEC | O_NONBLOCK | O_BINARY | O_TEXT)) != 0) + { + errno = EINVAL; + return -1; + } + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Native Windows API. */ + + if (_pipe (fd, 4096, flags & ~O_NONBLOCK) < 0) + { + fd[0] = tmp[0]; + fd[1] = tmp[1]; + return -1; + } + + /* O_NONBLOCK handling. + On native Windows platforms, O_NONBLOCK is defined by gnulib. Use the + functions defined by the gnulib module 'nonblocking'. */ +# if GNULIB_defined_O_NONBLOCK + if (flags & O_NONBLOCK) + { + if (set_nonblocking_flag (fd[0], true) != 0 + || set_nonblocking_flag (fd[1], true) != 0) + goto fail; + } +# else + { + verify (O_NONBLOCK == 0); + } +# endif + + return 0; + +#else +/* Unix API. */ + + if (pipe (fd) < 0) + return -1; + + /* POSIX + says that initially, the O_NONBLOCK and FD_CLOEXEC flags are cleared on + both fd[0] and fd[1]. */ + + /* O_NONBLOCK handling. + On Unix platforms, O_NONBLOCK is defined by the system. Use fcntl(). */ + if (flags & O_NONBLOCK) + { + int fcntl_flags; + + if ((fcntl_flags = fcntl (fd[1], F_GETFL, 0)) < 0 + || fcntl (fd[1], F_SETFL, fcntl_flags | O_NONBLOCK) == -1 + || (fcntl_flags = fcntl (fd[0], F_GETFL, 0)) < 0 + || fcntl (fd[0], F_SETFL, fcntl_flags | O_NONBLOCK) == -1) + goto fail; + } + + if (flags & O_CLOEXEC) + { + int fcntl_flags; + + if ((fcntl_flags = fcntl (fd[1], F_GETFD, 0)) < 0 + || fcntl (fd[1], F_SETFD, fcntl_flags | FD_CLOEXEC) == -1 + || (fcntl_flags = fcntl (fd[0], F_GETFD, 0)) < 0 + || fcntl (fd[0], F_SETFD, fcntl_flags | FD_CLOEXEC) == -1) + goto fail; + } + +# if O_BINARY + if (flags & O_BINARY) + { + setmode (fd[1], O_BINARY); + setmode (fd[0], O_BINARY); + } + else if (flags & O_TEXT) + { + setmode (fd[1], O_TEXT); + setmode (fd[0], O_TEXT); + } +# endif + + return 0; + +#endif + +#if GNULIB_defined_O_NONBLOCK || \ + !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) + fail: + { + int saved_errno = errno; + close (fd[0]); + close (fd[1]); + fd[0] = tmp[0]; + fd[1] = tmp[1]; + errno = saved_errno; + return -1; + } +#endif +} === added file 'm4/fcntl.m4' --- m4/fcntl.m4 1970-01-01 00:00:00 +0000 +++ m4/fcntl.m4 2013-07-06 07:04:07 +0000 @@ -0,0 +1,95 @@ +# fcntl.m4 serial 5 +dnl Copyright (C) 2009-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# For now, this module ensures that fcntl() +# - supports F_DUPFD correctly +# - supports or emulates F_DUPFD_CLOEXEC +# - supports F_GETFD +# Still to be ported to mingw: +# - F_SETFD +# - F_GETFL, F_SETFL +# - F_GETOWN, F_SETOWN +# - F_GETLK, F_SETLK, F_SETLKW +AC_DEFUN([gl_FUNC_FCNTL], +[ + dnl Persuade glibc to expose F_DUPFD_CLOEXEC. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_FUNCS_ONCE([fcntl]) + if test $ac_cv_func_fcntl = no; then + gl_REPLACE_FCNTL + else + dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target + dnl haiku alpha 2 F_DUPFD has wrong errno + AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly], + [gl_cv_func_fcntl_f_dupfd_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +]], [[int result = 0; + if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; + if (errno != EINVAL) result |= 2; + return result; + ]])], + [gl_cv_func_fcntl_f_dupfd_works=yes], + [gl_cv_func_fcntl_f_dupfd_works=no], + [# Guess that it works on glibc systems + case $host_os in #(( + *-gnu*) gl_cv_func_fcntl_f_dupfd_works="guessing yes";; + *) gl_cv_func_fcntl_f_dupfd_works="guessing no";; + esac])]) + case $gl_cv_func_fcntl_f_dupfd_works in + *yes) ;; + *) gl_REPLACE_FCNTL + AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD + behavior does not match POSIX]) ;; + esac + + dnl Many systems lack F_DUPFD_CLOEXEC + AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC], + [gl_cv_func_fcntl_f_dupfd_cloexec], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#ifndef F_DUPFD_CLOEXEC +choke me +#endif + ]])], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#ifdef __linux__ +/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace + it to support the semantics on older kernels that failed with EINVAL. */ +choke me +#endif + ]])], + [gl_cv_func_fcntl_f_dupfd_cloexec=yes], + [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"])], + [gl_cv_func_fcntl_f_dupfd_cloexec=no])]) + if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then + gl_REPLACE_FCNTL + dnl No witness macro needed for this bug. + fi + fi + dnl Replace fcntl() for supporting the gnulib-defined fchdir() function, + dnl to keep fchdir's bookkeeping up-to-date. + m4_ifdef([gl_FUNC_FCHDIR], [ + gl_TEST_FCHDIR + if test $HAVE_FCHDIR = 0; then + gl_REPLACE_FCNTL + fi + ]) +]) + +AC_DEFUN([gl_REPLACE_FCNTL], +[ + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([fcntl]) + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 + else + REPLACE_FCNTL=1 + fi +]) === added file 'm4/getdtablesize.m4' --- m4/getdtablesize.m4 1970-01-01 00:00:00 +0000 +++ m4/getdtablesize.m4 2013-07-06 07:04:07 +0000 @@ -0,0 +1,17 @@ +# getdtablesize.m4 serial 4 +dnl Copyright (C) 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_GETDTABLESIZE], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([getdtablesize]) + if test $ac_cv_func_getdtablesize != yes; then + HAVE_GETDTABLESIZE=0 + fi +]) + +# Prerequisites of lib/getdtablesize.c. +AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:]) === modified file 'm4/gnulib-comp.m4' --- m4/gnulib-comp.m4 2013-05-07 21:34:03 +0000 +++ m4/gnulib-comp.m4 2013-07-06 07:04:07 +0000 @@ -63,6 +63,7 @@ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Code from module extern-inline: # Code from module faccessat: + # Code from module fcntl: # Code from module fcntl-h: # Code from module fdatasync: # Code from module fdopendir: @@ -70,6 +71,7 @@ # Code from module fpending: # Code from module fstatat: # Code from module fsync: + # Code from module getdtablesize: # Code from module getgroups: # Code from module getloadavg: # Code from module getopt-gnu: @@ -92,6 +94,7 @@ # Code from module nocrash: # Code from module openat-h: # Code from module pathmax: + # Code from module pipe2: # Code from module pselect: # Code from module pthread_sigmask: # Code from module putenv: @@ -191,6 +194,11 @@ fi gl_MODULE_INDICATOR([faccessat]) gl_UNISTD_MODULE_INDICATOR([faccessat]) + gl_FUNC_FCNTL + if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then + AC_LIBOBJ([fcntl]) + fi + gl_FCNTL_MODULE_INDICATOR([fcntl]) gl_FCNTL_H gl_FUNC_FDATASYNC if test $HAVE_FDATASYNC = 0; then @@ -273,6 +281,8 @@ fi gl_TIME_MODULE_INDICATOR([mktime]) gl_MULTIARCH + gl_FUNC_PIPE2 + gl_UNISTD_MODULE_INDICATOR([pipe2]) gl_FUNC_PSELECT if test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1; then AC_LIBOBJ([pselect]) @@ -364,6 +374,7 @@ gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b=false gl_gnulib_enabled_dosname=false gl_gnulib_enabled_euidaccess=false + gl_gnulib_enabled_getdtablesize=false gl_gnulib_enabled_getgroups=false gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=false gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1=false @@ -373,7 +384,6 @@ gl_gnulib_enabled_stat=false gl_gnulib_enabled_strtoll=false gl_gnulib_enabled_strtoull=false - gl_gnulib_enabled_verify=false gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=false func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b () { @@ -407,6 +417,18 @@ fi fi } + func_gl_gnulib_m4code_getdtablesize () + { + if ! $gl_gnulib_enabled_getdtablesize; then + gl_FUNC_GETDTABLESIZE + if test $HAVE_GETDTABLESIZE = 0; then + AC_LIBOBJ([getdtablesize]) + gl_PREREQ_GETDTABLESIZE + fi + gl_UNISTD_MODULE_INDICATOR([getdtablesize]) + gl_gnulib_enabled_getdtablesize=true + fi + } func_gl_gnulib_m4code_getgroups () { if ! $gl_gnulib_enabled_getgroups; then @@ -479,9 +501,6 @@ if test $REPLACE_STAT = 1; then func_gl_gnulib_m4code_pathmax fi - if test $REPLACE_STAT = 1; then - func_gl_gnulib_m4code_verify - fi fi } func_gl_gnulib_m4code_strtoll () @@ -508,12 +527,6 @@ gl_gnulib_enabled_strtoull=true fi } - func_gl_gnulib_m4code_verify () - { - if ! $gl_gnulib_enabled_verify; then - gl_gnulib_enabled_verify=true - fi - } func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec () { if ! $gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec; then @@ -532,6 +545,9 @@ if test $HAVE_FACCESSAT = 0; then func_gl_gnulib_m4code_03e0aaad4cb89ca757653bd367a6ccb7 fi + if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then + func_gl_gnulib_m4code_getdtablesize + fi if test $HAVE_FDOPENDIR = 0; then func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b fi @@ -568,19 +584,14 @@ if { test $HAVE_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1; } && test $ac_cv_type_long_long_int = yes; then func_gl_gnulib_m4code_strtoll fi - if test $HAVE_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1; then - func_gl_gnulib_m4code_verify - fi if test $ac_cv_func_strtoumax = no && test $ac_cv_type_unsigned_long_long_int = yes; then func_gl_gnulib_m4code_strtoull fi - if test $ac_cv_func_strtoumax = no; then - func_gl_gnulib_m4code_verify - fi m4_pattern_allow([^gl_GNULIB_ENABLED_]) AM_CONDITIONAL([gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b], [$gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b]) AM_CONDITIONAL([gl_GNULIB_ENABLED_dosname], [$gl_gnulib_enabled_dosname]) AM_CONDITIONAL([gl_GNULIB_ENABLED_euidaccess], [$gl_gnulib_enabled_euidaccess]) + AM_CONDITIONAL([gl_GNULIB_ENABLED_getdtablesize], [$gl_gnulib_enabled_getdtablesize]) AM_CONDITIONAL([gl_GNULIB_ENABLED_getgroups], [$gl_gnulib_enabled_getgroups]) AM_CONDITIONAL([gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36], [$gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36]) AM_CONDITIONAL([gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1], [$gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1]) @@ -590,7 +601,6 @@ AM_CONDITIONAL([gl_GNULIB_ENABLED_stat], [$gl_gnulib_enabled_stat]) AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoll], [$gl_gnulib_enabled_strtoll]) AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoull], [$gl_gnulib_enabled_strtoull]) - AM_CONDITIONAL([gl_GNULIB_ENABLED_verify], [$gl_gnulib_enabled_verify]) AM_CONDITIONAL([gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec], [$gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec]) # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ @@ -764,6 +774,7 @@ lib/execinfo.c lib/execinfo.in.h lib/faccessat.c + lib/fcntl.c lib/fcntl.in.h lib/fdatasync.c lib/fdopendir.c @@ -776,6 +787,7 @@ lib/fsync.c lib/ftoastr.c lib/ftoastr.h + lib/getdtablesize.c lib/getgroups.c lib/getloadavg.c lib/getopt.c @@ -799,6 +811,7 @@ lib/openat-proc.c lib/openat.h lib/pathmax.h + lib/pipe2.c lib/pselect.c lib/pthread_sigmask.c lib/putenv.c @@ -870,6 +883,7 @@ m4/extern-inline.m4 m4/faccessat.m4 m4/fcntl-o.m4 + m4/fcntl.m4 m4/fcntl_h.m4 m4/fdatasync.m4 m4/fdopendir.m4 @@ -877,6 +891,7 @@ m4/fpending.m4 m4/fstatat.m4 m4/fsync.m4 + m4/getdtablesize.m4 m4/getgroups.m4 m4/getloadavg.m4 m4/getopt.m4 @@ -897,6 +912,7 @@ m4/nocrash.m4 m4/off_t.m4 m4/pathmax.m4 + m4/pipe2.m4 m4/pselect.m4 m4/pthread_sigmask.m4 m4/putenv.m4 === added file 'm4/pipe2.m4' --- m4/pipe2.m4 1970-01-01 00:00:00 +0000 +++ m4/pipe2.m4 2013-07-06 07:04:07 +0000 @@ -0,0 +1,18 @@ +# pipe2.m4 serial 2 +dnl Copyright (C) 2009-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_PIPE2], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + + dnl Persuade glibc to declare pipe2(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_FUNCS_ONCE([pipe2]) + if test $ac_cv_func_pipe2 != yes; then + HAVE_PIPE2=0 + fi +]) === modified file 'nt/ChangeLog' --- nt/ChangeLog 2013-06-25 15:08:47 +0000 +++ nt/ChangeLog 2013-07-06 08:25:40 +0000 @@ -1,3 +1,9 @@ +2013-07-06 Paul Eggert + + Make file descriptors close-on-exec when possible. + * gnulib.mk: Remove empty gl_GNULIB_ENABLED_verify section; + otherwise, gnulib-tool complains given close-on-exec changes. + 2013-06-25 Juanma Barranquero * configure.bat: Add warning to the help text about using the === modified file 'nt/gnulib.mk' --- nt/gnulib.mk 2013-05-16 05:51:39 +0000 +++ nt/gnulib.mk 2013-07-06 07:04:07 +0000 @@ -876,9 +876,6 @@ ## begin gnulib module verify -if gl_GNULIB_ENABLED_verify - -endif EXTRA_DIST += verify.h ## end gnulib module verify === modified file 'src/ChangeLog' --- src/ChangeLog 2013-07-06 08:26:18 +0000 +++ src/ChangeLog 2013-07-06 08:57:16 +0000 @@ -1,3 +1,39 @@ +2013-07-06 Paul Eggert + + Make file descriptors close-on-exec when possible. + This simplifies Emacs a bit, since it no longer needs to worry + about closing file descriptors by hand in some cases. + It also fixes some unlikely races. Not all such races, as + libraries often open files internally without setting + close-on-exec, but it's an improvement. + * alloc.c (valid_pointer_p) [!WINDOWSNT]: + * callproc.c (Fcall_process) [!MSDOS]: + * emacs.c (main) [!DOS_NT]: + * nsterm.m (ns_term_init): + * process.c (create_process): + Use 'pipe2' with O_CLOEXEC instead of 'pipe'. + * emacs.c (Fcall_process_region) [HAVE_MKOSTEMP]: + * filelock.c (create_lock_file) [HAVE_MKOSTEMP]: + Prefer mkostemp with O_CLOEXEC to mkstemp. + * callproc.c (relocate_fd) [!WINDOWSNT]: + * emacs.c (main): Use F_DUPFD_CLOEXEC, not plain F_DUPFD. + No need to use fcntl (..., F_SETFD, FD_CLOEXEC), since we're + now using pipe2. + * filelock.c (create_lock_file) [! HAVE_MKOSTEMP]: + Make the resulting file descriptor close-on-exec. + * lisp.h, lread.c, process.c (close_load_descs, close_process_descs): + * lread.c (load_descriptor_list, load_descriptor_unwind): + Remove; no longer needed. All uses removed. + * process.c (SOCK_CLOEXEC): Define to 0 if not supplied by system. + (close_on_exec, accept4, process_socket) [!SOCK_CLOEXEC]: + New functions. + (socket) [!SOCK_CLOEXEC]: Supply a substitute. + (Fmake_network_process, Fnetwork_interface_list): + (Fnetwork_interface_info, server_accept_connection): + Make newly-created socket close-on-exec. + * sysdep.c (emacs_open, emacs_fopen): + Make new-created descriptor close-on-exec. + 2013-07-06 Eli Zaretskii * data.c (Fmultibyte_string_p): Doc fix. === modified file 'src/alloc.c' --- src/alloc.c 2013-07-05 16:58:01 +0000 +++ src/alloc.c 2013-07-06 07:04:07 +0000 @@ -4741,7 +4741,7 @@ Unfortunately, we cannot use NULL_DEVICE here, as emacs_write may not validate p in that case. */ - if (pipe (fd) == 0) + if (pipe2 (fd, O_CLOEXEC) == 0) { bool valid = emacs_write (fd[1], (char *) p, 16) == 16; emacs_close (fd[1]); === modified file 'src/callproc.c' --- src/callproc.c 2013-07-06 07:02:40 +0000 +++ src/callproc.c 2013-07-06 07:05:58 +0000 @@ -517,7 +517,7 @@ { #ifndef MSDOS int fd[2]; - if (pipe (fd) == -1) + if (pipe2 (fd, O_CLOEXEC) != 0) { int pipe_errno = errno; emacs_close (filefd); @@ -1034,12 +1034,16 @@ memcpy (tempfile, SDATA (encoded_tem), SBYTES (encoded_tem) + 1); coding_systems = Qt; -#ifdef HAVE_MKSTEMP +#if defined HAVE_MKOSTEMP || defined HAVE_MKSTEMP { int fd; block_input (); +# ifdef HAVE_MKOSTEMP + fd = mkostemp (tempfile, O_CLOEXEC); +# else fd = mkstemp (tempfile); +# endif unblock_input (); if (fd == -1) report_file_error ("Failed to open temporary file", @@ -1182,15 +1186,6 @@ pid_t pid = getpid (); - /* Close Emacs's descriptors that this process should not have. */ - close_process_descs (); - - /* DOS_NT isn't in a vfork, so if we are in the middle of load-file, - we will lose if we call close_load_descs here. */ -#ifndef DOS_NT - close_load_descs (); -#endif - /* Note that use of alloca is always safe here. It's obvious for systems that do not have true vfork or that have true (stack) alloca. If using vfork and C_ALLOCA (when Emacs used to include @@ -1352,9 +1347,11 @@ emacs_close (1); emacs_close (2); + /* Redirect file descriptors and clear FD_CLOEXEC on the redirected ones. */ dup2 (in, 0); dup2 (out, 1); dup2 (err, 2); + emacs_close (in); if (out != in) emacs_close (out); @@ -1392,7 +1389,7 @@ return fd; else { - int new = fcntl (fd, F_DUPFD, minfd); + int new = fcntl (fd, F_DUPFD_CLOEXEC, minfd); if (new == -1) { const char *message_1 = "Error while setting up child: "; === modified file 'src/emacs.c' --- src/emacs.c 2013-07-06 07:02:40 +0000 +++ src/emacs.c 2013-07-06 07:05:58 +0000 @@ -889,7 +889,7 @@ emacs_close (0); emacs_close (1); result = emacs_open (term, O_RDWR, 0); - if (result < 0 || dup (0) < 0) + if (result < 0 || fcntl (0, F_DUPFD_CLOEXEC, 1) < 0) { char *errstring = strerror (errno); fprintf (stderr, "%s: %s: %s\n", argv[0], term, errstring); @@ -969,7 +969,7 @@ use a pipe for synchronization. The parent waits for the child to close its end of the pipe (using `daemon-initialized') before exiting. */ - if (pipe (daemon_pipe) == -1) + if (pipe2 (daemon_pipe, O_CLOEXEC) != 0) { fprintf (stderr, "Cannot pipe!\n"); exit (1); @@ -1065,9 +1065,6 @@ daemon_name = xstrdup (dname_arg); /* Close unused reading end of the pipe. */ close (daemon_pipe[0]); - /* Make sure that the used end of the pipe is closed on exec, so - that it is not accessible to programs started from .emacs. */ - fcntl (daemon_pipe[1], F_SETFD, FD_CLOEXEC); setsid (); #else /* DOS_NT */ === modified file 'src/filelock.c' --- src/filelock.c 2013-05-05 00:51:49 +0000 +++ src/filelock.c 2013-07-06 07:04:07 +0000 @@ -416,8 +416,13 @@ memcpy (nonce, lfname, lfdirlen); strcpy (nonce + lfdirlen, nonce_base); -#if HAVE_MKSTEMP - /* Prefer mkstemp if available, as it avoids a race between +#if HAVE_MKOSTEMP + /* Prefer mkostemp to mkstemp, as it avoids a window where FD is + temporarily open without close-on-exec. */ + fd = mkostemp (nonce, O_BINARY | O_CLOEXEC); + need_fchmod = 1; +#elif HAVE_MKSTEMP + /* Prefer mkstemp to mktemp, as it avoids a race between mktemp and emacs_open. */ fd = mkstemp (nonce); need_fchmod = 1; @@ -432,7 +437,11 @@ err = errno; else { - ptrdiff_t lock_info_len = strlen (lock_info_str); + ptrdiff_t lock_info_len; +#if ! HAVE_MKOSTEMP + fcntl (fd, F_SETFD, FD_CLOEXEC); +#endif + lock_info_len = strlen (lock_info_str); err = 0; if (emacs_write (fd, lock_info_str, lock_info_len) != lock_info_len || (need_fchmod && fchmod (fd, world_readable) != 0)) === modified file 'src/lisp.h' --- src/lisp.h 2013-07-04 09:29:28 +0000 +++ src/lisp.h 2013-07-06 07:04:07 +0000 @@ -3668,7 +3668,6 @@ extern void map_obarray (Lisp_Object, void (*) (Lisp_Object, Lisp_Object), Lisp_Object); extern void dir_warning (const char *, Lisp_Object); -extern void close_load_descs (void); extern void init_obarray (void); extern void init_lread (void); extern void syms_of_lread (void); @@ -3995,7 +3994,6 @@ extern void add_gpm_wait_descriptor (int); extern void delete_gpm_wait_descriptor (int); #endif -extern void close_process_descs (void); extern void init_process_emacs (void); extern void syms_of_process (void); extern void setup_process_coding_systems (Lisp_Object); === modified file 'src/lread.c' --- src/lread.c 2013-07-06 07:02:40 +0000 +++ src/lread.c 2013-07-06 07:05:58 +0000 @@ -95,9 +95,6 @@ It must be set to nil before all top-level calls to read0. */ static Lisp_Object read_objects; -/* List of descriptors now open for Fload. */ -static Lisp_Object load_descriptor_list; - /* File for get_file_char to read from. Use by load. */ static FILE *instream; @@ -149,7 +146,6 @@ Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); static Lisp_Object load_unwind (Lisp_Object); -static Lisp_Object load_descriptor_unwind (Lisp_Object); /* Functions that read one byte from the current source READCHARFUN or unreads one byte. If the integer argument C is -1, it returns @@ -1328,11 +1324,8 @@ } record_unwind_protect (load_unwind, make_save_pointer (stream)); - record_unwind_protect (load_descriptor_unwind, load_descriptor_list); specbind (Qload_file_name, found); specbind (Qinhibit_file_name_operation, Qnil); - load_descriptor_list - = Fcons (make_number (fileno (stream)), load_descriptor_list); specbind (Qload_in_progress, Qt); instream = stream; @@ -1395,26 +1388,6 @@ } return Qnil; } - -static Lisp_Object -load_descriptor_unwind (Lisp_Object oldlist) -{ - load_descriptor_list = oldlist; - return Qnil; -} - -/* Close all descriptors in use for Floads. - This is used when starting a subprocess. */ - -void -close_load_descs (void) -{ -#ifndef WINDOWSNT - Lisp_Object tail; - for (tail = load_descriptor_list; CONSP (tail); tail = XCDR (tail)) - emacs_close (XFASTINT (XCAR (tail))); -#endif -} static bool complete_filename_p (Lisp_Object pathname) @@ -4349,9 +4322,6 @@ load_in_progress = 0; Vload_file_name = Qnil; - - load_descriptor_list = Qnil; - Vstandard_input = Qt; Vloads_in_progress = Qnil; } @@ -4624,9 +4594,6 @@ /* Vsource_directory was initialized in init_lread. */ - load_descriptor_list = Qnil; - staticpro (&load_descriptor_list); - DEFSYM (Qcurrent_load_list, "current-load-list"); DEFSYM (Qstandard_input, "standard-input"); DEFSYM (Qread_char, "read-char"); === modified file 'src/nsterm.m' --- src/nsterm.m 2013-06-27 14:47:52 +0000 +++ src/nsterm.m 2013-07-06 07:04:07 +0000 @@ -4142,7 +4142,7 @@ if (selfds[0] == -1) { - if (pipe (selfds) == -1) + if (pipe2 (selfds, O_CLOEXEC) != 0) { fprintf (stderr, "Failed to create pipe: %s\n", emacs_strerror (errno)); === modified file 'src/process.c' --- src/process.c 2013-07-05 16:58:01 +0000 +++ src/process.c 2013-07-06 09:07:02 +0000 @@ -135,6 +135,34 @@ EMACS_TIME *, void *); #endif +#ifndef SOCK_CLOEXEC +# define SOCK_CLOEXEC 0 + +/* Emulate GNU/Linux accept4 and socket well enough for this module. */ + +static int +close_on_exec (int fd) +{ + if (0 <= fd) + fcntl (fd, F_SETFD, FD_CLOEXEC); + return fd; +} + +static int +accept4 (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags) +{ + return close_on_exec (accept (sockfd, addr, addrlen)); +} + +static int +process_socket (int domain, int type, int protocol) +{ + return close_on_exec (socket (domain, type, protocol)); +} +# undef socket +# define socket(domain, type, protocol) process_socket (domain, type, protocol) +#endif + /* Work around GCC 4.7.0 bug with strict overflow checking; see . These lines can be removed once the GCC bug is fixed. */ @@ -1619,14 +1647,11 @@ else #endif /* HAVE_PTYS */ { - int tem; - tem = pipe (sv); - if (tem < 0) + if (pipe2 (sv, O_CLOEXEC) != 0) report_file_error ("Creating pipe", Qnil); inchannel = sv[0]; forkout = sv[1]; - tem = pipe (sv); - if (tem < 0) + if (pipe2 (sv, O_CLOEXEC) != 0) { emacs_close (inchannel); emacs_close (forkout); @@ -1637,29 +1662,14 @@ } #ifndef WINDOWSNT - { - int tem; - - tem = pipe (wait_child_setup); - if (tem < 0) - report_file_error ("Creating pipe", Qnil); - tem = fcntl (wait_child_setup[1], F_GETFD, 0); - if (tem >= 0) - tem = fcntl (wait_child_setup[1], F_SETFD, tem | FD_CLOEXEC); - if (tem < 0) - { - emacs_close (wait_child_setup[0]); - emacs_close (wait_child_setup[1]); - report_file_error ("Setting file descriptor flags", Qnil); - } - } + if (pipe2 (wait_child_setup, O_CLOEXEC) != 0) + report_file_error ("Creating pipe", Qnil); #endif fcntl (inchannel, F_SETFL, O_NONBLOCK); fcntl (outchannel, F_SETFL, O_NONBLOCK); - /* Record this as an active process, with its channels. - As a result, child_setup will close Emacs's side of the pipes. */ + /* Record this as an active process, with its channels. */ chan_process[inchannel] = process; XPROCESS (process)->infd = inchannel; XPROCESS (process)->outfd = outchannel; @@ -3135,7 +3145,8 @@ retry_connect: #endif - s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol); + s = socket (lres->ai_family, lres->ai_socktype | SOCK_CLOEXEC, + lres->ai_protocol); if (s < 0) { xerrno = errno; @@ -3532,7 +3543,7 @@ int s; Lisp_Object res; - s = socket (AF_INET, SOCK_STREAM, 0); + s = socket (AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0); if (s < 0) return Qnil; @@ -3688,7 +3699,7 @@ error ("interface name too long"); strcpy (rq.ifr_name, SSDATA (ifname)); - s = socket (AF_INET, SOCK_STREAM, 0); + s = socket (AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0); if (s < 0) return Qnil; @@ -3984,7 +3995,7 @@ } saddr; socklen_t len = sizeof saddr; - s = accept (channel, &saddr.sa, &len); + s = accept4 (channel, &saddr.sa, &len, SOCK_CLOEXEC); if (s < 0) { @@ -6858,32 +6869,6 @@ #endif } -/* Close all descriptors currently in use for communication - with subprocess. This is used in a newly-forked subprocess - to get rid of irrelevant descriptors. */ - -void -close_process_descs (void) -{ -#ifndef DOS_NT - int i; - for (i = 0; i < MAXDESC; i++) - { - Lisp_Object process; - process = chan_process[i]; - if (!NILP (process)) - { - int in = XPROCESS (process)->infd; - int out = XPROCESS (process)->outfd; - if (in >= 0) - emacs_close (in); - if (out >= 0 && in != out) - emacs_close (out); - } - } -#endif -} - DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0, doc: /* Return the (or a) process associated with BUFFER. BUFFER may be a buffer or the name of one. */) === modified file 'src/sysdep.c' --- src/sysdep.c 2013-07-06 07:02:40 +0000 +++ src/sysdep.c 2013-07-06 07:05:58 +0000 @@ -543,8 +543,6 @@ #endif } - close_process_descs (); /* Close Emacs's pipes/ptys */ - #ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida */ { char *epwd = getenv ("PWD"); @@ -2152,6 +2150,8 @@ #endif /* Open FILE for Emacs use, using open flags OFLAG and mode MODE. + Arrange for subprograms to not inherit the file descriptor. + Prefer a method that is multithread-safe, if available. Do not fail merely because the open was interrupted by a signal. Allow the user to quit. */ @@ -2159,8 +2159,11 @@ emacs_open (const char *file, int oflags, int mode) { int fd; + oflags |= O_CLOEXEC; while ((fd = open (file, oflags, mode)) < 0 && errno == EINTR) QUIT; + if (! O_CLOEXEC && 0 <= fd) + fcntl (fd, F_SETFD, FD_CLOEXEC); return fd; } @@ -2170,10 +2173,29 @@ FILE * emacs_fopen (char const *file, char const *mode) { - FILE *fp; - while (! (fp = fopen (file, mode)) && errno == EINTR) - QUIT; - return fp; + int fd, omode, oflags; + int bflag = 0; + char const *m = mode; + + switch (*m++) + { + case 'r': omode = O_RDONLY; oflags = 0; break; + case 'w': omode = O_WRONLY; oflags = O_CREAT | O_TRUNC; break; + case 'a': omode = O_WRONLY; oflags = O_CREAT | O_APPEND; break; + default: emacs_abort (); + } + + while (*m) + switch (*m++) + { + case '+': omode = O_RDWR; break; + case 'b': bflag = O_BINARY; break; + case 't': bflag = O_TEXT; break; + default: /* Ignore. */ break; + } + + fd = emacs_open (file, omode | oflags | bflag, 0666); + return fd < 0 ? 0 : fdopen (fd, mode); } int From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 06 07:32:19 2013 Received: (at 14803) by debbugs.gnu.org; 6 Jul 2013 11:32:19 +0000 Received: from localhost ([127.0.0.1]:33813 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvQiw-0001EQ-Rh for submit@debbugs.gnu.org; Sat, 06 Jul 2013 07:32:19 -0400 Received: from mtaout22.012.net.il ([80.179.55.172]:42599) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvQis-0001Du-NC for 14803@debbugs.gnu.org; Sat, 06 Jul 2013 07:32:16 -0400 Received: from conversion-daemon.a-mtaout22.012.net.il by a-mtaout22.012.net.il (HyperSendmail v2007.08) id <0MPI00G00IM96I00@a-mtaout22.012.net.il> for 14803@debbugs.gnu.org; Sat, 06 Jul 2013 14:31:32 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout22.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0MPI00F7PIOKLZ80@a-mtaout22.012.net.il>; Sat, 06 Jul 2013 14:31:32 +0300 (IDT) Date: Sat, 06 Jul 2013 14:31:30 +0300 From: Eli Zaretskii Subject: Re: bug#14803: Setting close-on-exec flag consistently In-reply-to: <51D7DFAF.3030500@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <83obafylf1.fsf@gnu.org> References: <51D7DFAF.3030500@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 14803 Cc: 14803@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Sat, 06 Jul 2013 02:13:19 -0700 > From: Paul Eggert > > Tags: patch > > Here's a patch I'd like to install into Emacs soon. > It changes Emacs so that it creates file descriptors > that are close-on-exec unless they are intended to > be propagated to child processes. > This patch may affect the Microsoft Windows ports > so I'm sending it to bug-gnu-emacs first. > Much of the new code is imported from gnulib. Sorry, this won't fly. The Windows build has its own implementations of 'pipe' and 'socket' (because it needs to make them behave like Posix APIs, and also because it needs to watch each subprocess and each socket for the benefit of 'select', 'waitpid', SIGCHLD, etc.). So the replacements from gnulib won't do. Looking at the Emacs sources, I see that the Windows implementation of 'pipe' already makes it non-inheritable (see sys_pipe), so this problem does not exist in the Windows build. Socket handles _are_ inherited, but making them non-inheritable is not easy (some say impossible in the general case), and since no one complained till now, I'm willing to live with that until we hear some real problems. For mktemp/mkstemp in filelock.c, sys_open in w32.c already makes all handles not inheritable by default, so that problem doesn't exist, either. As for emacs_open, it needs to use O_NOINHERIT instead of O_CLOEXEC (or just use zero, since w32.c already adds the O_NOINHERIT flag in sys_open). So I think we should simply not compile lib/fcntl.c and lib/pipe2.c (including their dependency modules) on MS-Windows. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 06 13:18:22 2013 Received: (at 14803) by debbugs.gnu.org; 6 Jul 2013 17:18:23 +0000 Received: from localhost ([127.0.0.1]:34994 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvW7p-0002fG-Ux for submit@debbugs.gnu.org; Sat, 06 Jul 2013 13:18:22 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:45769) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvW7m-0002es-Fw for 14803@debbugs.gnu.org; Sat, 06 Jul 2013 13:18:19 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id AB2E8A60039; Sat, 6 Jul 2013 10:18:12 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id LhVhJwyPForA; Sat, 6 Jul 2013 10:18:12 -0700 (PDT) Received: from [192.168.1.9] (pool-71-108-49-126.lsanca.fios.verizon.net [71.108.49.126]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id EBD1DA60001; Sat, 6 Jul 2013 10:18:11 -0700 (PDT) Message-ID: <51D8514F.8090307@cs.ucla.edu> Date: Sat, 06 Jul 2013 10:18:07 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: bug#14803: Setting close-on-exec flag consistently References: <51D7DFAF.3030500@cs.ucla.edu> <83obafylf1.fsf@gnu.org> In-Reply-To: <83obafylf1.fsf@gnu.org> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 14803 Cc: 14803@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) On 07/06/2013 04:31 AM, Eli Zaretskii wrote: > The Windows build has its own implementations > of 'pipe' and 'socket' (because it needs to make them behave like > Posix APIs, and also because it needs to watch each subprocess and > each socket for the benefit of 'select', 'waitpid', SIGCHLD, etc.). > So the replacements from gnulib won't do. The gnulib replacements do that sort of thing too. Emacs uses a hybrid approach, which uses gnulib for some things and its own (pre-gnulib) solution for others, and it should be possible to keep the hybrid working in this case. In the long run it may be better to merge the two approaches rather than maintain a hybrid, but that issue doesn't need to be addressed now. > Socket handles _are_ inherited, but making them non-inheritable is not > easy (some say impossible in the general case), and since no one > complained till now, I'm willing to live with that until we hear some > real problems. That's the intent of this patch. On systems like w32 that lack SOCK_CLOEXEC, the code creates sockets just as it did before (using plain 'socket' and 'accept' rather than 'socket' and 'accept4' with SOCK_CLOEXEC). The only difference is that the proposed code then invokes fcntl (fd, F_SETFD, FD_CLOEXEC) to set the close-on-exec flag; this is needed on POSIXish systems that don't have SOCK_CLOEXEC. From what you say, on w32 platforms it's OK if this is a no-op. w32.c's fcntl currently returns SOCKET_ERROR for this fcntl call, which should be fine, since Emacs doesn't check for an error. > For mktemp/mkstemp in filelock.c, sys_open in w32.c already makes all > handles not inheritable by default, so that problem doesn't exist, > either. This should be OK, since the w32 port doesn't define HAVE_MKOSTEMP, so Emacs should use mkstemp or mktemp as it did before. Emacs will now invoke fcntl (fd, F_SETFD, FD_CLOEXEC) on the resulting file descriptor but that should be OK as described above. > As for emacs_open, it needs to use O_NOINHERIT instead of O_CLOEXEC > (or just use zero, since w32.c already adds the O_NOINHERIT flag in > sys_open). The proposed patch does this, as fcntl.h should #define O_CLOEXEC to O_NOINHERIT on w32. > So I think we should simply not compile lib/fcntl.c and lib/pipe2.c > (including their dependency modules) on MS-Windows. That should be OK. w32.c will need minor tweaks to support F_DUPFD_CLOEXEC and pipe2, something along the following lines. === modified file 'nt/ChangeLog' --- nt/ChangeLog 2013-07-06 09:44:23 +0000 +++ nt/ChangeLog 2013-07-06 16:55:23 +0000 @@ -3,6 +3,8 @@ Make file descriptors close-on-exec when possible (Bug#14803). * gnulib.mk: Remove empty gl_GNULIB_ENABLED_verify section; otherwise, gnulib-tool complains given close-on-exec changes. + * inc/ms-w32.h (pipe): Remove. + (pipe2): New macro. 2013-06-25 Juanma Barranquero === modified file 'nt/inc/ms-w32.h' --- nt/inc/ms-w32.h 2013-05-15 17:06:26 +0000 +++ nt/inc/ms-w32.h 2013-07-06 16:55:23 +0000 @@ -211,7 +211,7 @@ #define mktemp sys_mktemp #undef open #define open sys_open -#define pipe sys_pipe +#define pipe2 sys_pipe2 #undef read #define read sys_read #define rename sys_rename === modified file 'src/ChangeLog' --- src/ChangeLog 2013-07-06 16:37:12 +0000 +++ src/ChangeLog 2013-07-06 17:12:42 +0000 @@ -33,6 +33,8 @@ Make newly-created socket close-on-exec. * sysdep.c (emacs_open, emacs_fopen): Make new-created descriptor close-on-exec. + * w32.c (fcntl): Support F_DUPFD_CLOEXEC well enough for Emacs. + * w32.c, w32.h (sys_pipe2): Rename from 'pipe', with new flags arg. 2013-07-06 Eli Zaretskii === modified file 'src/w32.c' --- src/w32.c 2013-06-21 20:11:44 +0000 +++ src/w32.c 2013-07-06 17:12:42 +0000 @@ -6719,10 +6719,16 @@ } /* Windows does not have an fcntl function. Provide an implementation - solely for making sockets non-blocking. */ + good enough for Emacs. */ int fcntl (int s, int cmd, int options) { + /* In the w32 Emacs port, fcntl (fd, F_DUPFD_CLOEXEC, fd1) is always + invoked in a context where fd1 is closed and all descriptors less + than fd1 are open, so sys_dup is an adequate implementation. */ + if (cmd == F_DUPFD_CLOEXEC) + return sys_dup (s); + if (winsock_lib == NULL) { errno = ENETDOWN; @@ -6864,13 +6870,14 @@ return rc; } -/* Unix pipe() has only one arg */ int -sys_pipe (int * phandles) +sys_pipe2 (int * phandles, int pipe2_flags) { int rc; unsigned flags; + eassert (pipe2_flags == O_CLOEXEC); + /* make pipe handles non-inheritable; when we spawn a child, we replace the relevant handle with an inheritable one. Also put pipes into binary mode; we will do text mode translation ourselves === modified file 'src/w32.h' --- src/w32.h 2013-03-05 22:35:41 +0000 +++ src/w32.h 2013-07-06 16:55:23 +0000 @@ -188,7 +188,7 @@ extern int fchmod (int, mode_t); extern int sys_rename_replace (char const *, char const *, BOOL); -extern int sys_pipe (int *); +extern int sys_pipe2 (int *, int); extern void set_process_dir (char *); extern int sys_spawnve (int, char *, char **, char **); From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 06 13:55:09 2013 Received: (at 14803) by debbugs.gnu.org; 6 Jul 2013 17:55:09 +0000 Received: from localhost ([127.0.0.1]:35158 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvWhQ-0005lr-1v for submit@debbugs.gnu.org; Sat, 06 Jul 2013 13:55:08 -0400 Received: from mtaout21.012.net.il ([80.179.55.169]:49701) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvWhK-0005l2-Lh for 14803@debbugs.gnu.org; Sat, 06 Jul 2013 13:55:04 -0400 Received: from conversion-daemon.a-mtaout21.012.net.il by a-mtaout21.012.net.il (HyperSendmail v2007.08) id <0MPJ00B000C82I00@a-mtaout21.012.net.il> for 14803@debbugs.gnu.org; Sat, 06 Jul 2013 20:54:56 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout21.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0MPJ00BY10FI2230@a-mtaout21.012.net.il>; Sat, 06 Jul 2013 20:54:55 +0300 (IDT) Date: Sat, 06 Jul 2013 20:54:53 +0300 From: Eli Zaretskii Subject: Re: bug#14803: Setting close-on-exec flag consistently In-reply-to: <51D8514F.8090307@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <834nc7y3o2.fsf@gnu.org> References: <51D7DFAF.3030500@cs.ucla.edu> <83obafylf1.fsf@gnu.org> <51D8514F.8090307@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 14803 Cc: 14803@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Sat, 06 Jul 2013 10:18:07 -0700 > From: Paul Eggert > CC: 14803@debbugs.gnu.org > > On 07/06/2013 04:31 AM, Eli Zaretskii wrote: > > The Windows build has its own implementations > > of 'pipe' and 'socket' (because it needs to make them behave like > > Posix APIs, and also because it needs to watch each subprocess and > > each socket for the benefit of 'select', 'waitpid', SIGCHLD, etc.). > > So the replacements from gnulib won't do. > > The gnulib replacements do that sort of thing too. Emacs > uses a hybrid approach, which uses gnulib for some things > and its own (pre-gnulib) solution for others, and it should > be possible to keep the hybrid working in this case. In the > long run it may be better to merge the two approaches rather > than maintain a hybrid I don't know how easy that would be, since the infrastructure used in Emacs for this is very elaborate, and might contradict with general-purpose use of gnulib. > but that issue doesn't need to be addressed now. Right. > > Socket handles _are_ inherited, but making them non-inheritable is not > > easy (some say impossible in the general case), and since no one > > complained till now, I'm willing to live with that until we hear some > > real problems. > > That's the intent of this patch. On systems like w32 that > lack SOCK_CLOEXEC, the code creates sockets just as it did > before (using plain 'socket' and 'accept' rather than > 'socket' and 'accept4' with SOCK_CLOEXEC). Given that w32 redirects calls to 'socket' to 'sys_socket', which is implemented on w32.c, will the above still work? > The only difference is that the proposed code then invokes fcntl > (fd, F_SETFD, FD_CLOEXEC) to set the close-on-exec flag; this is > needed on POSIXish systems that don't have SOCK_CLOEXEC. From what > you say, on w32 platforms it's OK if this is a no-op. w32.c's fcntl > currently returns SOCKET_ERROR for this fcntl call, which should be > fine, since Emacs doesn't check for an error. > > > For mktemp/mkstemp in filelock.c, sys_open in w32.c already makes all > > handles not inheritable by default, so that problem doesn't exist, > > either. > > This should be OK, since the w32 port doesn't define > HAVE_MKOSTEMP, so Emacs should use mkstemp or mktemp as it > did before. Emacs will now invoke fcntl (fd, F_SETFD, > FD_CLOEXEC) on the resulting file descriptor but that should > be OK as described above. > > > As for emacs_open, it needs to use O_NOINHERIT instead of O_CLOEXEC > > (or just use zero, since w32.c already adds the O_NOINHERIT flag in > > sys_open). > > The proposed patch does this, as fcntl.h should #define > O_CLOEXEC to O_NOINHERIT on w32. > > > So I think we should simply not compile lib/fcntl.c and lib/pipe2.c > > (including their dependency modules) on MS-Windows. > > That should be OK. w32.c will need minor tweaks to support > F_DUPFD_CLOEXEC and pipe2, something along the following lines. I'm OK with the rest of your proposals. I assume that lib/fcntl.c and lib/pipe2.c will not be compiled for w32, due to some configure test? Or did you have something else in mind? Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 06 17:43:37 2013 Received: (at 14803) by debbugs.gnu.org; 6 Jul 2013 21:43:37 +0000 Received: from localhost ([127.0.0.1]:35550 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvaGX-0006xe-3o for submit@debbugs.gnu.org; Sat, 06 Jul 2013 17:43:37 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:52913) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvaGU-0006xG-VR for 14803@debbugs.gnu.org; Sat, 06 Jul 2013 17:43:35 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 214FCA60047; Sat, 6 Jul 2013 14:43:29 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id M195OMTr2j6i; Sat, 6 Jul 2013 14:43:26 -0700 (PDT) Received: from [192.168.1.9] (pool-71-108-49-126.lsanca.fios.verizon.net [71.108.49.126]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id D45F6A60001; Sat, 6 Jul 2013 14:43:26 -0700 (PDT) Message-ID: <51D88F7E.3080502@cs.ucla.edu> Date: Sat, 06 Jul 2013 14:43:26 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: bug#14803: Setting close-on-exec flag consistently References: <51D7DFAF.3030500@cs.ucla.edu> <83obafylf1.fsf@gnu.org> <51D8514F.8090307@cs.ucla.edu> <834nc7y3o2.fsf@gnu.org> In-Reply-To: <834nc7y3o2.fsf@gnu.org> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 14803 Cc: 14803@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) On 07/06/2013 10:54 AM, Eli Zaretskii wrote: >> Date: Sat, 06 Jul 2013 10:18:07 -0700 >> From: Paul Eggert >> On systems like w32 that lack SOCK_CLOEXEC, the code creates >> sockets just as it did before (using plain 'socket' and 'accept' >> rather than 'socket' and 'accept4' with SOCK_CLOEXEC). > > Given that w32 redirects calls to 'socket' to 'sys_socket', which is > implemented on w32.c, will the above still work? Yes, the idea is that it does the same calls as before, to the same code in w32.c as before. > I assume that lib/fcntl.c and > lib/pipe2.c will not be compiled for w32, due to some configure test? Yes, though that needs to be arranged. The following further patch should do it: === modified file 'ChangeLog' --- ChangeLog 2013-07-06 09:44:23 +0000 +++ ChangeLog 2013-07-06 21:39:31 +0000 @@ -1,7 +1,9 @@ 2013-07-06 Paul Eggert Make file descriptors close-on-exec when possible (Bug#14803). - * configure.ac (mkostemp): New function to check for. + * configure.ac (ac_cv_func_fcntl, gl_cv_func_fcntl_f_dupfd_cloexec) + (gl_cv_func_fcntl_f_dupfd_works, ac_cv_func_pipe2): Hotwire for MinGW. + (mkostemp): New function to check for. (PTY_OPEN): Pass O_CLOEXEC to posix_openpt. * lib/fcntl.c, lib/getdtablesize.c, lib/pipe2.c, m4/fcntl.m4: * m4/getdtablesize.m4, m4/pipe2.m4: New files, taken from gnulib. === modified file 'configure.ac' --- configure.ac 2013-07-06 07:04:07 +0000 +++ configure.ac 2013-07-06 21:33:56 +0000 @@ -634,6 +634,19 @@ # Avoid gnulib's threadlib module, as we do threads our own way. AC_DEFUN([gl_THREADLIB]) +# On MinGW, Emacs supplies its own substitutes for some missing functions, +# so hotwire the cache to pretend to Gnulib that the functions work; +# that way, 'configure' won't arrange to build the Gnulib substitutes. +if test "$opsys" = mingw32; then + # fcntl + ac_cv_func_fcntl=emulated # Any single word other than 'no' will do. + gl_cv_func_fcntl_f_dupfd_cloexec=yes # Actually 'no', but only 'yes' works. + gl_cv_func_fcntl_f_dupfd_works='no, but Emacs emulates yes' + + # pipe2 + ac_cv_func_pipe2='no, but Emacs emulates yes' +fi + # Initialize gnulib right after choosing the compiler. dnl Amongst other things, this sets AR and ARFLAGS. gl_EARLY From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 06 22:46:39 2013 Received: (at 14803) by debbugs.gnu.org; 7 Jul 2013 02:46:39 +0000 Received: from localhost ([127.0.0.1]:35909 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Uvezm-0001RQ-Od for submit@debbugs.gnu.org; Sat, 06 Jul 2013 22:46:39 -0400 Received: from mtaout22.012.net.il ([80.179.55.172]:33541) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Uvezj-0001R4-Fz for 14803@debbugs.gnu.org; Sat, 06 Jul 2013 22:46:37 -0400 Received: from conversion-daemon.a-mtaout22.012.net.il by a-mtaout22.012.net.il (HyperSendmail v2007.08) id <0MPJ00200OTS8700@a-mtaout22.012.net.il> for 14803@debbugs.gnu.org; Sun, 07 Jul 2013 05:46:28 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout22.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0MPJ00154P1FV1C0@a-mtaout22.012.net.il>; Sun, 07 Jul 2013 05:46:28 +0300 (IDT) Date: Sun, 07 Jul 2013 05:46:27 +0300 From: Eli Zaretskii Subject: Re: bug#14803: Setting close-on-exec flag consistently In-reply-to: <51D88F7E.3080502@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <83zjtzw0ho.fsf@gnu.org> References: <51D7DFAF.3030500@cs.ucla.edu> <83obafylf1.fsf@gnu.org> <51D8514F.8090307@cs.ucla.edu> <834nc7y3o2.fsf@gnu.org> <51D88F7E.3080502@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 14803 Cc: 14803@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Sat, 06 Jul 2013 14:43:26 -0700 > From: Paul Eggert > CC: 14803@debbugs.gnu.org > > > I assume that lib/fcntl.c and > > lib/pipe2.c will not be compiled for w32, due to some configure test? > > Yes, though that needs to be arranged. The following further > patch should do it: > > === modified file 'ChangeLog' > --- ChangeLog 2013-07-06 09:44:23 +0000 > +++ ChangeLog 2013-07-06 21:39:31 +0000 > @@ -1,7 +1,9 @@ > 2013-07-06 Paul Eggert > > Make file descriptors close-on-exec when possible (Bug#14803). > - * configure.ac (mkostemp): New function to check for. > + * configure.ac (ac_cv_func_fcntl, gl_cv_func_fcntl_f_dupfd_cloexec) > + (gl_cv_func_fcntl_f_dupfd_works, ac_cv_func_pipe2): Hotwire for MinGW. > + (mkostemp): New function to check for. > (PTY_OPEN): Pass O_CLOEXEC to posix_openpt. > * lib/fcntl.c, lib/getdtablesize.c, lib/pipe2.c, m4/fcntl.m4: > * m4/getdtablesize.m4, m4/pipe2.m4: New files, taken from gnulib. > > === modified file 'configure.ac' > --- configure.ac 2013-07-06 07:04:07 +0000 > +++ configure.ac 2013-07-06 21:33:56 +0000 > @@ -634,6 +634,19 @@ > # Avoid gnulib's threadlib module, as we do threads our own way. > AC_DEFUN([gl_THREADLIB]) > > +# On MinGW, Emacs supplies its own substitutes for some missing functions, > +# so hotwire the cache to pretend to Gnulib that the functions work; > +# that way, 'configure' won't arrange to build the Gnulib substitutes. > +if test "$opsys" = mingw32; then > + # fcntl > + ac_cv_func_fcntl=emulated # Any single word other than 'no' will do. > + gl_cv_func_fcntl_f_dupfd_cloexec=yes # Actually 'no', but only 'yes' works. > + gl_cv_func_fcntl_f_dupfd_works='no, but Emacs emulates yes' > + > + # pipe2 > + ac_cv_func_pipe2='no, but Emacs emulates yes' > +fi > + This should probably go into nt/mingw-cfg.site. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 07 02:34:38 2013 Received: (at 14803) by debbugs.gnu.org; 7 Jul 2013 06:34:38 +0000 Received: from localhost ([127.0.0.1]:36163 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UviYM-0003RK-Pp for submit@debbugs.gnu.org; Sun, 07 Jul 2013 02:34:38 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:37317) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UviYG-0003Qa-5n for 14803@debbugs.gnu.org; Sun, 07 Jul 2013 02:34:32 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 0C631A60050; Sat, 6 Jul 2013 23:34:22 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id djagUeDxTQFc; Sat, 6 Jul 2013 23:34:18 -0700 (PDT) Received: from [192.168.1.9] (pool-71-108-49-126.lsanca.fios.verizon.net [71.108.49.126]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id A534FA6004B; Sat, 6 Jul 2013 23:34:18 -0700 (PDT) Message-ID: <51D90BEA.20308@cs.ucla.edu> Date: Sat, 06 Jul 2013 23:34:18 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: bug#14803: Setting close-on-exec flag consistently References: <51D7DFAF.3030500@cs.ucla.edu> <83obafylf1.fsf@gnu.org> <51D8514F.8090307@cs.ucla.edu> <834nc7y3o2.fsf@gnu.org> <51D88F7E.3080502@cs.ucla.edu> <83zjtzw0ho.fsf@gnu.org> In-Reply-To: <83zjtzw0ho.fsf@gnu.org> X-Enigmail-Version: 1.5.1 Content-Type: multipart/mixed; boundary="------------000309000805020605030606" X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 14803 Cc: 14803@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) This is a multi-part message in MIME format. --------------000309000805020605030606 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 07/06/2013 07:46 PM, Eli Zaretskii wrote: > This should probably go into nt/mingw-cfg.site. Thanks, I didn't know about that file. Also, it strikes me that since MinGW doesn't have pipe2, there's no need to have "#define pipe2 sys_pipe2". Revised patch attached. --------------000309000805020605030606 Content-Type: text/plain; charset=UTF-8; name="cloexec1.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="cloexec1.diff" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEzLTA3LTAz IDAzOjIwOjA0ICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMy0wNy0wNyAwNjowMjo0NCArMDAw MApAQCAtMSwzICsxLDEyIEBACisyMDEzLTA3LTA3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KKworCU1ha2UgZmlsZSBkZXNjcmlwdG9ycyBjbG9zZS1vbi1leGVjIHdo ZW4gcG9zc2libGUgKEJ1ZyMxNDgwMykuCisJKiBjb25maWd1cmUuYWMgKG1rb3N0ZW1wKTog TmV3IGZ1bmN0aW9uIHRvIGNoZWNrIGZvci4KKwkoUFRZX09QRU4pOiBQYXNzIE9fQ0xPRVhF QyB0byBwb3NpeF9vcGVucHQuCisJKiBsaWIvZmNudGwuYywgbGliL2dldGR0YWJsZXNpemUu YywgbGliL3BpcGUyLmMsIG00L2ZjbnRsLm00OgorCSogbTQvZ2V0ZHRhYmxlc2l6ZS5tNCwg bTQvcGlwZTIubTQ6IE5ldyBmaWxlcywgdGFrZW4gZnJvbSBnbnVsaWIuCisJKiBsaWIvZ251 bGliLm1rLCBtNC9nbnVsaWItY29tcC5tNDogUmVnZW5lcmF0ZS4KKwogMjAxMy0wNy0wMyAg Q2hyaXN0b3BoIEVnZ2VyICA8Y2hyaXN0b3BoQGRlYmlhbi5vcmc+ICAodGlueSBjaGFuZ2Up CiAKIAkqIGNvbmZpZ3VyZS5hYyAoZW1hY3NfYnJva2VuX1NJR0lPKTogU2V0IG9uIGdudS1r ZnJlZWJzZCB0byBhdm9pZCBoYW5nLgoKPT09IG1vZGlmaWVkIGZpbGUgJ2FkbWluL0NoYW5n ZUxvZycKLS0tIGFkbWluL0NoYW5nZUxvZwkyMDEzLTA3LTA2IDE4OjI4OjU0ICswMDAwCisr KyBhZG1pbi9DaGFuZ2VMb2cJMjAxMy0wNy0wNyAwNTo1MjowOSArMDAwMApAQCAtMSwzICsx LDkgQEAKKzIwMTMtMDctMDcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1Pgor CisJTWFrZSBmaWxlIGRlc2NyaXB0b3JzIGNsb3NlLW9uLWV4ZWMgd2hlbiBwb3NzaWJsZSAo QnVnIzE0ODAzKS4KKwkqIG1lcmdlLWdudWxpYiAoR05VTElCX01PRFVMRVMpOiBBZGQgZmNu dGwsIHBpcGUyLgorCShHTlVMSUJfVE9PTF9GTEFHUyk6IEF2b2lkIGJpbmFyeS1pbywgY2xv c2UuICBEbyBub3QgYXZvaWQgZmNudGwuCisKIDIwMTMtMDctMDYgIEdsZW5uIE1vcnJpcyAg PHJnbUBnbnUub3JnPgogCiAJKiBhZG1pbi5lbCAobWFudWFsLW1pc2MtbWFudWFscyk6IE5l dyBmdW5jdGlvbi4KCj09PSBtb2RpZmllZCBmaWxlICdhZG1pbi9tZXJnZS1nbnVsaWInCi0t LSBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMy0wNS0wNyAyMTozNDowMyArMDAwMAorKysgYWRt aW4vbWVyZ2UtZ251bGliCTIwMTMtMDctMDUgMjI6MDM6MzYgKzAwMDAKQEAgLTI5LDExICsy OSwxMSBAQAogICBhbGxvY2Etb3B0IGMtY3R5cGUgYy1zdHJjYXNlCiAgIGNhcmVhZGxpbmth dCBjbG9zZS1zdHJlYW0gY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBjcnlwdG8vc2hhMjU2IGNy eXB0by9zaGE1MTIKICAgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmlyb24gZXhlY2lu Zm8gZmFjY2Vzc2F0Ci0gIGZjbnRsLWggZmRhdGFzeW5jIGZkb3BlbmRpciBmaWxlbW9kZSBm c3RhdGF0IGZzeW5jCisgIGZjbnRsIGZjbnRsLWggZmRhdGFzeW5jIGZkb3BlbmRpciBmaWxl bW9kZSBmc3RhdGF0IGZzeW5jCiAgIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1lIGdl dHRpbWVvZmRheQogICBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0CiAg IG1hbnl3YXJuaW5ncyBtZW1yY2hyIG1rdGltZQotICBwc2VsZWN0IHB0aHJlYWRfc2lnbWFz ayBwdXRlbnYgcWFjbCByZWFkbGluayByZWFkbGlua2F0CisgIHBpcGUyIHBzZWxlY3QgcHRo cmVhZF9zaWdtYXNrIHB1dGVudiBxYWNsIHJlYWRsaW5rIHJlYWRsaW5rYXQKICAgc2lnMnN0 ciBzb2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRhcmcgc3RkYm9vbCBzdGRpbwogICBz dHJmdGltZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxpbmsgc3lzX3N0YXQKICAgc3lzX3Rp bWUgdGltZSB0aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3BlYy1zdWIgdW5zZXRlbnYg dXRpbWVucwpAQCAtNDEsOCArNDEsOCBAQAogJwogCiBHTlVMSUJfVE9PTF9GTEFHUz0nCi0g IC0tYXZvaWQ9ZHVwCi0gIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1m c3RhdAorICAtLWF2b2lkPWJpbmFyeS1pbyAtLWF2b2lkPWNsb3NlIC0tYXZvaWQ9ZHVwCisg IC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZnN0YXQKICAgLS1hdm9pZD1tYWxsb2MtcG9zaXgg LS1hdm9pZD1tc3ZjLWludmFsIC0tYXZvaWQ9bXN2Yy1ub3Rocm93CiAgIC0tYXZvaWQ9b3Bl biAtLWF2b2lkPW9wZW5hdC1kaWUgLS1hdm9pZD1vcGVuZGlyCiAgIC0tYXZvaWQ9cmFpc2UK Cj09PSBtb2RpZmllZCBmaWxlICdjb25maWd1cmUuYWMnCi0tLSBjb25maWd1cmUuYWMJMjAx My0wNy0wMyAwMzoyMDowNCArMDAwMAorKysgY29uZmlndXJlLmFjCTIwMTMtMDctMDcgMDU6 NTM6MTIgKzAwMDAKQEAgLTMyNDQsNyArMzI0NCw3IEBACiBnZXRybGltaXQgc2V0cmxpbWl0 IHNodXRkb3duIGdldGFkZHJpbmZvIFwKIHN0cnNpZ25hbCBzZXRpdGltZXIgXAogc2VuZHRv IHJlY3Zmcm9tIGdldHNvY2tuYW1lIGdldHBlZXJuYW1lIGdldGlmYWRkcnMgZnJlZWlmYWRk cnMgXAotZ2FpX3N0cmVycm9yIG1rc3RlbXAgZ2V0bGluZSBnZXRkZWxpbSBzeW5jIFwKK2dh aV9zdHJlcnJvciBta29zdGVtcCBta3N0ZW1wIGdldGxpbmUgZ2V0ZGVsaW0gc3luYyBcCiBk aWZmdGltZSBwb3NpeF9tZW1hbGlnbiBcCiBnZXRwd2VudCBlbmRwd2VudCBnZXRncmVudCBl bmRncmVudCBcCiB0b3VjaGxvY2sgXApAQCAtMzkzNCw3ICszOTM0LDcgQEAKICAgICAgIEFD X0RFRklORShQVFlfVFRZX05BTUVfU1BSSU5URiwgW3sgY2hhciAqcHR5bmFtZSA9IDA7IHNp Z3NldF90IGJsb2NrZWQ7IHNpZ2VtcHR5c2V0ICgmYmxvY2tlZCk7IHNpZ2FkZHNldCAoJmJs b2NrZWQsIFNJR0NITEQpOyBwdGhyZWFkX3NpZ21hc2sgKFNJR19CTE9DSywgJmJsb2NrZWQs IDApOyBpZiAoZ3JhbnRwdCAoZmQpICE9IC0xICYmIHVubG9ja3B0IChmZCkgIT0gLTEpIHB0 eW5hbWUgPSBwdHNuYW1lKGZkKTsgcHRocmVhZF9zaWdtYXNrIChTSUdfVU5CTE9DSywgJmJs b2NrZWQsIDApOyBpZiAoIXB0eW5hbWUpIHsgY2xvc2UgKGZkKTsgcmV0dXJuIC0xOyB9IHNu cHJpbnRmIChwdHlfbmFtZSwgc2l6ZW9mIHB0eV9uYW1lLCAiJXMiLCBwdHluYW1lKTsgfV0p CiAgICAgICBkbmwgaWYgSEFWRV9QT1NJWF9PUEVOUFQKICAgICAgIGlmIHRlc3QgIngkYWNf Y3ZfZnVuY19wb3NpeF9vcGVucHQiID0geHllczsgdGhlbgotICAgICAgICBBQ19ERUZJTkUo UFRZX09QRU4sIFtmZCA9IHBvc2l4X29wZW5wdCAoT19SRFdSIHwgT19OT0NUVFkpXSkKKyAg ICAgICAgQUNfREVGSU5FKFBUWV9PUEVOLCBbZmQgPSBwb3NpeF9vcGVucHQgKE9fUkRXUiB8 IE9fQ0xPRVhFQyB8IE9fTk9DVFRZKV0pCiAgICAgICAgIEFDX0RFRklORShQVFlfTkFNRV9T UFJJTlRGLCBbXSkKICAgICAgIGRubCBpZiBIQVZFX0dFVFBUCiAgICAgICBlbGlmIHRlc3Qg IngkYWNfY3ZfZnVuY19nZXRwdCIgPSB4eWVzOyB0aGVuCgo9PT0gYWRkZWQgZmlsZSAnbGli L2ZjbnRsLmMnCi0tLSBsaWIvZmNudGwuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisr KyBsaWIvZmNudGwuYwkyMDEzLTA3LTA1IDIyOjQ0OjA3ICswMDAwCkBAIC0wLDAgKzEsMzEx IEBACisvKiBQcm92aWRlIGZpbGUgZGVzY3JpcHRvciBjb250cm9sLgorCisgICBDb3B5cmln aHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LiAgKi8KKworLyogV3JpdHRlbiBieSBFcmljIEJsYWtlIDxlYmI5QGJ5dS5uZXQ+LiAgKi8K KworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNs dWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMu aD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmICFI QVZFX0ZDTlRMCisjIGRlZmluZSBycGxfZmNudGwgZmNudGwKKyNlbmRpZgorI3VuZGVmIGZj bnRsCisKKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEg ZGVmaW5lZCBfX0NZR1dJTl9fCisvKiBHZXQgZGVjbGFyYXRpb25zIG9mIHRoZSBuYXRpdmUg V2luZG93cyBBUEkgZnVuY3Rpb25zLiAgKi8KKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01F QU4KKyMgaW5jbHVkZSA8d2luZG93cy5oPgorCisvKiBHZXQgX2dldF9vc2ZoYW5kbGUuICAq LworIyBpbmNsdWRlICJtc3ZjLW5vdGhyb3cuaCIKKworLyogVXBwZXIgYm91bmQgb24gZ2V0 ZHRhYmxlc2l6ZSgpLiAgU2VlIGxpYi9nZXRkdGFibGVzaXplLmMuICAqLworIyBkZWZpbmUg T1BFTl9NQVhfTUFYIDB4MTAwMDAKKworLyogRHVwbGljYXRlIE9MREZEIGludG8gdGhlIGZp cnN0IGF2YWlsYWJsZSBzbG90IG9mIGF0IGxlYXN0IE5FV0ZELAorICAgd2hpY2ggbXVzdCBi ZSBwb3NpdGl2ZSwgd2l0aCBGTEFHUyBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBkdXBsaWNh dGUKKyAgIHdpbGwgYmUgaW5oZXJpdGFibGUuICAqLworc3RhdGljIGludAorZHVwZmQgKGlu dCBvbGRmZCwgaW50IG5ld2ZkLCBpbnQgZmxhZ3MpCit7CisgIC8qIE1pbmd3IGhhcyBubyB3 YXkgdG8gY3JlYXRlIGFuIGFyYml0cmFyeSBmZC4gIEl0ZXJhdGUgdW50aWwgYWxsCisgICAg IGZpbGUgZGVzY3JpcHRvcnMgbGVzcyB0aGFuIG5ld2ZkIGFyZSBmaWxsZWQgdXAuICAqLwor ICBIQU5ETEUgY3Vycl9wcm9jZXNzID0gR2V0Q3VycmVudFByb2Nlc3MgKCk7CisgIEhBTkRM RSBvbGRfaGFuZGxlID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUgKG9sZGZkKTsKKyAgdW5z aWduZWQgY2hhciBmZHNfdG9fY2xvc2VbT1BFTl9NQVhfTUFYIC8gQ0hBUl9CSVRdOworICB1 bnNpZ25lZCBpbnQgZmRzX3RvX2Nsb3NlX2JvdW5kID0gMDsKKyAgaW50IHJlc3VsdDsKKyAg Qk9PTCBpbmhlcml0ID0gZmxhZ3MgJiBPX0NMT0VYRUMgPyBGQUxTRSA6IFRSVUU7CisgIGlu dCBtb2RlOworCisgIGlmIChuZXdmZCA8IDAgfHwgZ2V0ZHRhYmxlc2l6ZSAoKSA8PSBuZXdm ZCkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAtMTsKKyAg ICB9CisgIGlmIChvbGRfaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFCisgICAgICB8 fCAobW9kZSA9IHNldG1vZGUgKG9sZGZkLCBPX0JJTkFSWSkpID09IC0xKQorICAgIHsKKyAg ICAgIC8qIG9sZGZkIGlzIG5vdCBvcGVuLCBvciBpcyBhbiB1bmFzc2lnbmVkIHN0YW5kYXJk IGZpbGUKKyAgICAgICAgIGRlc2NyaXB0b3IuICAqLworICAgICAgZXJybm8gPSBFQkFERjsK KyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIHNldG1vZGUgKG9sZGZkLCBtb2RlKTsKKyAg ZmxhZ3MgfD0gbW9kZTsKKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIEhBTkRMRSBuZXdf aGFuZGxlOworICAgICAgaW50IGR1cGxpY2F0ZWRfZmQ7CisgICAgICB1bnNpZ25lZCBpbnQg aW5kZXg7CisKKyAgICAgIGlmICghRHVwbGljYXRlSGFuZGxlIChjdXJyX3Byb2Nlc3MsICAg ICAgICAgICAvKiBTb3VyY2VQcm9jZXNzSGFuZGxlICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2xkX2hhbmRsZSwgICAgICAgICAgICAgLyogU291cmNlSGFuZGxlICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9wcm9jZXNzLCAgICAgICAgICAgLyog VGFyZ2V0UHJvY2Vzc0hhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQ SEFORExFKSAmbmV3X2hhbmRsZSwgIC8qIFRhcmdldEhhbmRsZSAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChEV09SRCkgMCwgICAgICAgICAgICAgIC8qIERlc2lyZWRBY2Nl c3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0LCAgICAgICAgICAg ICAgICAvKiBJbmhlcml0SGFuZGxlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFVQTElDQVRFX1NBTUVfQUNDRVNTKSkgLyogT3B0aW9ucyAqLworICAgICAgICB7CisgICAg ICAgICAgLyogVE9ETzogVHJhbnNsYXRlIEdldExhc3RFcnJvciAoKSBpbnRvIGVycm5vLiAg Ki8KKyAgICAgICAgICBlcnJubyA9IEVNRklMRTsKKyAgICAgICAgICByZXN1bHQgPSAtMTsK KyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZHVwbGljYXRlZF9mZCA9IF9v cGVuX29zZmhhbmRsZSAoKGludHB0cl90KSBuZXdfaGFuZGxlLCBmbGFncyk7CisgICAgICBp ZiAoZHVwbGljYXRlZF9mZCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICBDbG9zZUhhbmRs ZSAobmV3X2hhbmRsZSk7CisgICAgICAgICAgZXJybm8gPSBFTUZJTEU7CisgICAgICAgICAg cmVzdWx0ID0gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGlmIChu ZXdmZCA8PSBkdXBsaWNhdGVkX2ZkKQorICAgICAgICB7CisgICAgICAgICAgcmVzdWx0ID0g ZHVwbGljYXRlZF9mZDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAv KiBTZXQgdGhlIGJpdCBkdXBsaWNhdGVkX2ZkIGluIGZkc190b19jbG9zZVtdLiAgKi8KKyAg ICAgIGluZGV4ID0gKHVuc2lnbmVkIGludCkgZHVwbGljYXRlZF9mZCAvIENIQVJfQklUOwor ICAgICAgaWYgKGZkc190b19jbG9zZV9ib3VuZCA8PSBpbmRleCkKKyAgICAgICAgeworICAg ICAgICAgIGlmIChzaXplb2YgZmRzX3RvX2Nsb3NlIDw9IGluZGV4KQorICAgICAgICAgICAg LyogTmVlZCB0byBpbmNyZWFzZSBPUEVOX01BWF9NQVguICAqLworICAgICAgICAgICAgYWJv cnQgKCk7CisgICAgICAgICAgbWVtc2V0IChmZHNfdG9fY2xvc2UgKyBmZHNfdG9fY2xvc2Vf Ym91bmQsICdcMCcsCisgICAgICAgICAgICAgICAgICBpbmRleCArIDEgLSBmZHNfdG9fY2xv c2VfYm91bmQpOworICAgICAgICAgIGZkc190b19jbG9zZV9ib3VuZCA9IGluZGV4ICsgMTsK KyAgICAgICAgfQorICAgICAgZmRzX3RvX2Nsb3NlW2luZGV4XSB8PSAxIDw8ICgodW5zaWdu ZWQgaW50KSBkdXBsaWNhdGVkX2ZkICUgQ0hBUl9CSVQpOworICAgIH0KKworICAvKiBDbG9z ZSB0aGUgcHJldmlvdXMgZmRzIHRoYXQgdHVybmVkIG91dCB0byBiZSB0b28gc21hbGwuICAq LworICB7CisgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgdW5zaWduZWQgaW50 IGR1cGxpY2F0ZWRfZmQ7CisKKyAgICBmb3IgKGR1cGxpY2F0ZWRfZmQgPSAwOworICAgICAg ICAgZHVwbGljYXRlZF9mZCA8IGZkc190b19jbG9zZV9ib3VuZCAqIENIQVJfQklUOworICAg ICAgICAgZHVwbGljYXRlZF9mZCsrKQorICAgICAgaWYgKChmZHNfdG9fY2xvc2VbZHVwbGlj YXRlZF9mZCAvIENIQVJfQklUXQorICAgICAgICAgICA+PiAoZHVwbGljYXRlZF9mZCAlIENI QVJfQklUKSkKKyAgICAgICAgICAmIDEpCisgICAgICAgIGNsb3NlIChkdXBsaWNhdGVkX2Zk KTsKKworICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgIH0KKworIyBpZiBSRVBMQUNFX0ZD SERJUgorICBpZiAoMCA8PSByZXN1bHQpCisgICAgcmVzdWx0ID0gX2dsX3JlZ2lzdGVyX2R1 cCAob2xkZmQsIHJlc3VsdCk7CisjIGVuZGlmCisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5k aWYgLyogVzMyICovCisKKy8qIFBlcmZvcm0gdGhlIHNwZWNpZmllZCBBQ1RJT04gb24gdGhl IGZpbGUgZGVzY3JpcHRvciBGRCwgcG9zc2libHkKKyAgIHVzaW5nIHRoZSBhcmd1bWVudCBB UkcgZnVydGhlciBkZXNjcmliZWQgYmVsb3cuICBUaGlzIHJlcGxhY2VtZW50CisgICBoYW5k bGVzIHRoZSBmb2xsb3dpbmcgYWN0aW9ucywgYW5kIGZvcndhcmRzIGFsbCBvdGhlcnMgb24g dG8gdGhlCisgICBuYXRpdmUgZmNudGwuICBBbiB1bnJlY29nbml6ZWQgQUNUSU9OIHJldHVy bnMgLTEgd2l0aCBlcnJubyBzZXQgdG8KKyAgIEVJTlZBTC4KKworICAgRl9EVVBGRCAtIGR1 cGxpY2F0ZSBGRCwgd2l0aCBpbnQgQVJHIGJlaW5nIHRoZSBtaW5pbXVtIHRhcmdldCBmZC4K KyAgIElmIHN1Y2Nlc3NmdWwsIHJldHVybiB0aGUgZHVwbGljYXRlLCB3aGljaCB3aWxsIGJl IGluaGVyaXRhYmxlOworICAgb3RoZXJ3aXNlIHJldHVybiAtMSBhbmQgc2V0IGVycm5vLgor CisgICBGX0RVUEZEX0NMT0VYRUMgLSBkdXBsaWNhdGUgRkQsIHdpdGggaW50IEFSRyBiZWlu ZyB0aGUgbWluaW11bQorICAgdGFyZ2V0IGZkLiAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRo ZSBkdXBsaWNhdGUsIHdoaWNoIHdpbGwgbm90IGJlCisgICBpbmhlcml0YWJsZTsgb3RoZXJ3 aXNlIHJldHVybiAtMSBhbmQgc2V0IGVycm5vLgorCisgICBGX0dFVEZEIC0gQVJHIG5lZWQg bm90IGJlIHByZXNlbnQuICBJZiBzdWNjZXNzZnVsLCByZXR1cm4gYQorICAgbm9uLW5lZ2F0 aXZlIHZhbHVlIGNvbnRhaW5pbmcgdGhlIGRlc2NyaXB0b3IgZmxhZ3Mgb2YgRkQgKG9ubHkK KyAgIEZEX0NMT0VYRUMgaXMgcG9ydGFibGUsIGJ1dCBvdGhlciBmbGFncyBtYXkgYmUgcHJl c2VudCk7IG90aGVyd2lzZQorICAgcmV0dXJuIC0xIGFuZCBzZXQgZXJybm8uICAqLworCitp bnQKK3JwbF9mY250bCAoaW50IGZkLCBpbnQgYWN0aW9uLCAvKiBhcmcgKi8uLi4pCit7Cisg IHZhX2xpc3QgYXJnOworICBpbnQgcmVzdWx0ID0gLTE7CisgIHZhX3N0YXJ0IChhcmcsIGFj dGlvbik7CisgIHN3aXRjaCAoYWN0aW9uKQorICAgIHsKKworI2lmICFIQVZFX0ZDTlRMCisg ICAgY2FzZSBGX0RVUEZEOgorICAgICAgeworICAgICAgICBpbnQgdGFyZ2V0ID0gdmFfYXJn IChhcmcsIGludCk7CisgICAgICAgIHJlc3VsdCA9IGR1cGZkIChmZCwgdGFyZ2V0LCAwKTsK KyAgICAgICAgYnJlYWs7CisgICAgICB9CisjZWxpZiBGQ05UTF9EVVBGRF9CVUdHWSB8fCBS RVBMQUNFX0ZDSERJUgorICAgIGNhc2UgRl9EVVBGRDoKKyAgICAgIHsKKyAgICAgICAgaW50 IHRhcmdldCA9IHZhX2FyZyAoYXJnLCBpbnQpOworICAgICAgICAvKiBEZXRlY3QgaW52YWxp ZCB0YXJnZXQ7IG5lZWRlZCBmb3IgY3lnd2luIDEuNS54LiAgKi8KKyAgICAgICAgaWYgKHRh cmdldCA8IDAgfHwgZ2V0ZHRhYmxlc2l6ZSAoKSA8PSB0YXJnZXQpCisgICAgICAgICAgZXJy bm8gPSBFSU5WQUw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAv KiBIYWlrdSBhbHBoYSAyIGxvc2VzIGZkIGZsYWdzIG9uIG9yaWdpbmFsLiAgKi8KKyAgICAg ICAgICAgIGludCBmbGFncyA9IGZjbnRsIChmZCwgRl9HRVRGRCk7CisgICAgICAgICAgICBp ZiAoZmxhZ3MgPCAwKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0 ID0gLTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHJlc3VsdCA9IGZjbnRsIChmZCwgYWN0aW9uLCB0YXJnZXQpOworICAgICAgICAg ICAgaWYgKDAgPD0gcmVzdWx0ICYmIGZjbnRsIChmZCwgRl9TRVRGRCwgZmxhZ3MpID09IC0x KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHNhdmVkX2Vycm5vID0g ZXJybm87CisgICAgICAgICAgICAgICAgY2xvc2UgKHJlc3VsdCk7CisgICAgICAgICAgICAg ICAgcmVzdWx0ID0gLTE7CisgICAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsK KyAgICAgICAgICAgICAgfQorIyBpZiBSRVBMQUNFX0ZDSERJUgorICAgICAgICAgICAgaWYg KDAgPD0gcmVzdWx0KQorICAgICAgICAgICAgICByZXN1bHQgPSBfZ2xfcmVnaXN0ZXJfZHVw IChmZCwgcmVzdWx0KTsKKyMgZW5kaWYKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOwor ICAgICAgfSAvKiBGX0RVUEZEICovCisjZW5kaWYgLyogRkNOVExfRFVQRkRfQlVHR1kgfHwg UkVQTEFDRV9GQ0hESVIgKi8KKworICAgIGNhc2UgRl9EVVBGRF9DTE9FWEVDOgorICAgICAg eworICAgICAgICBpbnQgdGFyZ2V0ID0gdmFfYXJnIChhcmcsIGludCk7CisKKyNpZiAhSEFW RV9GQ05UTAorICAgICAgICByZXN1bHQgPSBkdXBmZCAoZmQsIHRhcmdldCwgT19DTE9FWEVD KTsKKyAgICAgICAgYnJlYWs7CisjZWxzZSAvKiBIQVZFX0ZDTlRMICovCisgICAgICAgIC8q IFRyeSB0aGUgc3lzdGVtIGNhbGwgZmlyc3QsIGlmIHRoZSBoZWFkZXJzIGNsYWltIGl0IGV4 aXN0cworICAgICAgICAgICAodGhhdCBpcywgaWYgR05VTElCX2RlZmluZWRfRl9EVVBGRF9D TE9FWEVDIGlzIDApLCBzaW5jZSB3ZQorICAgICAgICAgICBtYXkgYmUgcnVubmluZyB3aXRo IGEgZ2xpYmMgdGhhdCBoYXMgdGhlIG1hY3JvIGJ1dCB3aXRoIGFuCisgICAgICAgICAgIG9s ZGVyIGtlcm5lbCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaXQuICBDYWNoZSB0aGUKKyAgICAg ICAgICAgaW5mb3JtYXRpb24gb24gd2hldGhlciB0aGUgc3lzdGVtIGNhbGwgcmVhbGx5IHdv cmtzLCBidXQKKyAgICAgICAgICAgYXZvaWQgY2FjaGluZyBmYWlsdXJlIGlmIHRoZSBjb3Jy ZXNwb25kaW5nIEZfRFVQRkQgZmFpbHMKKyAgICAgICAgICAgZm9yIGFueSByZWFzb24uICAw ID0gdW5rbm93biwgMSA9IHllcywgLTEgPSBuby4gICovCisgICAgICAgIHN0YXRpYyBpbnQg aGF2ZV9kdXBmZF9jbG9leGVjID0gR05VTElCX2RlZmluZWRfRl9EVVBGRF9DTE9FWEVDID8g LTEgOiAwOworICAgICAgICBpZiAoMCA8PSBoYXZlX2R1cGZkX2Nsb2V4ZWMpCisgICAgICAg ICAgeworICAgICAgICAgICAgcmVzdWx0ID0gZmNudGwgKGZkLCBhY3Rpb24sIHRhcmdldCk7 CisgICAgICAgICAgICBpZiAoMCA8PSByZXN1bHQgfHwgZXJybm8gIT0gRUlOVkFMKQorICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGF2ZV9kdXBmZF9jbG9leGVjID0gMTsK KyMgaWYgUkVQTEFDRV9GQ0hESVIKKyAgICAgICAgICAgICAgICBpZiAoMCA8PSByZXN1bHQp CisgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfZ2xfcmVnaXN0ZXJfZHVwIChmZCwgcmVz dWx0KTsKKyMgZW5kaWYKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnBsX2ZjbnRsIChmZCwg Rl9EVVBGRCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkKKyAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGhhdmVfZHVwZmRfY2xv ZXhlYyA9IC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBlbHNl CisgICAgICAgICAgcmVzdWx0ID0gcnBsX2ZjbnRsIChmZCwgRl9EVVBGRCwgdGFyZ2V0KTsK KyAgICAgICAgaWYgKDAgPD0gcmVzdWx0ICYmIGhhdmVfZHVwZmRfY2xvZXhlYyA9PSAtMSkK KyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgZmxhZ3MgPSBmY250bCAocmVzdWx0LCBG X0dFVEZEKTsKKyAgICAgICAgICAgIGlmIChmbGFncyA8IDAgfHwgZmNudGwgKHJlc3VsdCwg Rl9TRVRGRCwgZmxhZ3MgfCBGRF9DTE9FWEVDKSA9PSAtMSkKKyAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAg ICAgIGNsb3NlIChyZXN1bHQpOworICAgICAgICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJy bm87CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEhBVkVfRkNOVEwgKi8KKyAg ICAgIH0gLyogRl9EVVBGRF9DTE9FWEVDICovCisKKyNpZiAhSEFWRV9GQ05UTAorICAgIGNh c2UgRl9HRVRGRDoKKyAgICAgIHsKKyMgaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQg X19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworICAgICAgICBIQU5ETEUgaGFu ZGxlID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUgKGZkKTsKKyAgICAgICAgRFdPUkQgZmxh Z3M7CisgICAgICAgIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUKKyAgICAg ICAgICAgIHx8IEdldEhhbmRsZUluZm9ybWF0aW9uIChoYW5kbGUsICZmbGFncykgPT0gMCkK KyAgICAgICAgICBlcnJubyA9IEVCQURGOworICAgICAgICBlbHNlCisgICAgICAgICAgcmVz dWx0ID0gKGZsYWdzICYgSEFORExFX0ZMQUdfSU5IRVJJVCkgPyAwIDogRkRfQ0xPRVhFQzsK KyMgZWxzZSAvKiAhVzMyICovCisgICAgICAgIC8qIFVzZSBkdXAyIHRvIHJlamVjdCBpbnZh bGlkIGZpbGUgZGVzY3JpcHRvcnMuICBObyB3YXkgdG8KKyAgICAgICAgICAgYWNjZXNzIHRo aXMgaW5mb3JtYXRpb24sIHNvIHB1bnQuICAqLworICAgICAgICBpZiAoMCA8PSBkdXAyIChm ZCwgZmQpKQorICAgICAgICAgIHJlc3VsdCA9IDA7CisjIGVuZGlmIC8qICFXMzIgKi8KKyAg ICAgICAgYnJlYWs7CisgICAgICB9IC8qIEZfR0VURkQgKi8KKyNlbmRpZiAvKiAhSEFWRV9G Q05UTCAqLworCisgICAgICAvKiBJbXBsZW1lbnRpbmcgRl9TRVRGRCBvbiBtaW5ndyBpcyBu b3QgdHJpdmlhbCAtIHRoZXJlIGlzIG5vCisgICAgICAgICBBUEkgZm9yIGNoYW5naW5nIHRo ZSBPX05PSU5IRVJJVCBiaXQgb24gYW4gZmQsIGFuZCBtZXJlbHkKKyAgICAgICAgIGNoYW5n aW5nIHRoZSBIQU5ETEVfRkxBR19JTkhFUklUIGJpdCBvbiB0aGUgdW5kZXJseWluZyBoYW5k bGUKKyAgICAgICAgIGNhbiBsZWFkIHRvIG9kZCBzdGF0ZS4gIEl0IG1heSBiZSBwb3NzaWJs ZSBieSBkdXBsaWNhdGluZyB0aGUKKyAgICAgICAgIGhhbmRsZSwgdXNpbmcgX29wZW5fb3Nm aGFuZGxlIHdpdGggdGhlIHJpZ2h0IGZsYWdzLCB0aGVuCisgICAgICAgICB1c2luZyBkdXAy IHRvIG1vdmUgdGhlIGR1cGxpY2F0ZSBvbnRvIHRoZSBvcmlnaW5hbCwgYnV0IHRoYXQKKyAg ICAgICAgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4gICovCisKKyAgICBkZWZhdWx0Ogor ICAgICAgeworI2lmIEhBVkVfRkNOVEwKKyAgICAgICAgdm9pZCAqcCA9IHZhX2FyZyAoYXJn LCB2b2lkICopOworICAgICAgICByZXN1bHQgPSBmY250bCAoZmQsIGFjdGlvbiwgcCk7Cisj ZWxzZQorICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyNlbmRpZgorICAgICAgICBicmVhazsK KyAgICAgIH0KKyAgICB9CisgIHZhX2VuZCAoYXJnKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30K Cj09PSBhZGRlZCBmaWxlICdsaWIvZ2V0ZHRhYmxlc2l6ZS5jJwotLS0gbGliL2dldGR0YWJs ZXNpemUuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvZ2V0ZHRhYmxlc2l6 ZS5jCTIwMTMtMDctMDUgMjI6NDQ6MDcgKzAwMDAKQEAgLTAsMCArMSw4NiBAQAorLyogZ2V0 ZHRhYmxlc2l6ZSgpIGZ1bmN0aW9uIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlIGl0 LgorICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwg MjAwOC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZp Y2F0aW9uLiAgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmIChkZWZpbmVkIF9XSU4z MiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKworI2lu Y2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJtc3ZjLWludmFsLmgiCisKKyNpZiBIQVZF X01TVkNfSU5WQUxJRF9QQVJBTUVURVJfSEFORExFUgorc3RhdGljIGludAorX3NldG1heHN0 ZGlvX25vdGhyb3cgKGludCBuZXdtYXgpCit7CisgIGludCByZXN1bHQ7CisKKyAgVFJZX01T VkNfSU5WQUwKKyAgICB7CisgICAgICByZXN1bHQgPSBfc2V0bWF4c3RkaW8gKG5ld21heCk7 CisgICAgfQorICBDQVRDSF9NU1ZDX0lOVkFMCisgICAgeworICAgICAgcmVzdWx0ID0gLTE7 CisgICAgfQorICBET05FX01TVkNfSU5WQUw7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKyMg ZGVmaW5lIF9zZXRtYXhzdGRpbyBfc2V0bWF4c3RkaW9fbm90aHJvdworI2VuZGlmCisKKy8q IENhY2hlIGZvciB0aGUgcHJldmlvdXMgZ2V0ZHRhYmxlc2l6ZSAoKSByZXN1bHQuICAqLwor c3RhdGljIGludCBkdGFibGVzaXplOworCitpbnQKK2dldGR0YWJsZXNpemUgKHZvaWQpCit7 CisgIGlmIChkdGFibGVzaXplID09IDApCisgICAgeworICAgICAgLyogV2UgYXJlIGxvb2tp bmcgZm9yIHRoZSBudW1iZXIgTiBzdWNoIHRoYXQgdGhlIHZhbGlkIGZpbGUgZGVzY3JpcHRv cnMKKyAgICAgICAgIGFyZSAwLi5OLTEuICBJdCBjYW4gYmUgb2J0YWluZWQgdGhyb3VnaCBh IGxvb3AgYXMgZm9sbG93czoKKyAgICAgICAgICAgeworICAgICAgICAgICAgIGludCBmZDsK KyAgICAgICAgICAgICBmb3IgKGZkID0gMzsgZmQgPCA2NTUzNjsgZmQrKykKKyAgICAgICAg ICAgICAgIGlmIChkdXAyICgwLCBmZCkgPT0gLTEpCisgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgIHJldHVybiBmZDsKKyAgICAgICAgICAgfQorICAgICAgICAgT24g V2luZG93cyBYUCwgdGhlIHJlc3VsdCBpcyAyMDQ4LgorICAgICAgICAgVGhlIGRyYXdiYWNr IG9mIHRoaXMgbG9vcCBpcyB0aGF0IGl0IGFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgbGliYwor ICAgICAgICAgaW50ZXJuYWwgYXJyYXkgdGhhdCBpcyBuZXZlciBmcmVlZC4KKworICAgICAg ICAgVGhlIG51bWJlciBOIGNhbiBhbHNvIGJlIG9idGFpbmVkIGFzIHRoZSB1cHBlciBib3Vu ZCBmb3IKKyAgICAgICAgIF9nZXRtYXhzdGRpbyAoKS4gIF9nZXRtYXhzdGRpbyAoKSByZXR1 cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuCisgICAgICAgICBGSUxFIG9iamVjdHMu ICBUaGUgc2FuaXR5IGNoZWNrIGluIF9zZXRtYXhzdGRpbyByZXZlYWxzIHRoZSBtYXhpbXVt CisgICAgICAgICBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycy4gIFRoaXMgdG9vIGFsbG9j YXRlcyBtZW1vcnksIGJ1dCBpdCBpcworICAgICAgICAgZnJlZWQgd2hlbiB3ZSBjYWxsIF9z ZXRtYXhzdGRpbyB3aXRoIHRoZSBvcmlnaW5hbCB2YWx1ZS4gICovCisgICAgICBpbnQgb3Jp Z19tYXhfc3RkaW8gPSBfZ2V0bWF4c3RkaW8gKCk7CisgICAgICB1bnNpZ25lZCBpbnQgYm91 bmQ7CisgICAgICBmb3IgKGJvdW5kID0gMHgxMDAwMDsgX3NldG1heHN0ZGlvIChib3VuZCkg PCAwOyBib3VuZCA9IGJvdW5kIC8gMikKKyAgICAgICAgOworICAgICAgX3NldG1heHN0ZGlv IChvcmlnX21heF9zdGRpbyk7CisgICAgICBkdGFibGVzaXplID0gYm91bmQ7CisgICAgfQor ICByZXR1cm4gZHRhYmxlc2l6ZTsKK30KKworI2VuZGlmCgo9PT0gbW9kaWZpZWQgZmlsZSAn bGliL2dudWxpYi5taycKLS0tIGxpYi9nbnVsaWIubWsJMjAxMy0wNS0wNyAyMTozNDowMyAr MDAwMAorKysgbGliL2dudWxpYi5tawkyMDEzLTA3LTA1IDIyOjAzOjM2ICswMDAwCkBAIC0y MSw3ICsyMSw3IEBACiAjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVz dCBvZiB0aGF0IHByb2dyYW0uCiAjCiAjIEdlbmVyYXRlZCBieSBnbnVsaWItdG9vbC4KLSMg UmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbGliPWxpYmdu dSAtLXNvdXJjZS1iYXNlPWxpYiAtLW00LWJhc2U9bTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0 cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1hdm9pZD1kdXAgLS1hdm9pZD1m Y2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZzdGF0IC0tYXZvaWQ9bWFsbG9jLXBvc2l4 IC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdyAtLWF2b2lkPW9wZW4g LS1hdm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmRpciAtLWF2b2lkPXJhaXNlIC0tYXZv aWQ9c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zaWdwcm9jbWFzayAtLWF2b2lk PXN5c190eXBlcyAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2VmaWxlLW5hbWU9Z251bGliLm1r IC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZp eD1nbCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYy1jdHlwZSBjLXN0cmNhc2UgY2FyZWFk bGlua2F0IGNsb3NlLXN0cmVhbSBjcnlwdG8vbWQ1IGNyeXB0by9zaGExIGNyeXB0by9zaGEy NTYgY3J5cHRvL3NoYTUxMiBkdG9hc3RyIGR0b3RpbWVzcGVjIGR1cDIgZW52aXJvbiBleGVj aW5mbyBmYWNjZXNzYXQgZmNudGwtaCBmZGF0YXN5bmMgZmRvcGVuZGlyIGZpbGVtb2RlIGZz dGF0YXQgZnN5bmMgZ2V0bG9hZGF2ZyBnZXRvcHQtZ251IGdldHRpbWUgZ2V0dGltZW9mZGF5 IGlnbm9yZS12YWx1ZSBpbnRwcm9wcyBsYXJnZWZpbGUgbHN0YXQgbWFueXdhcm5pbmdzIG1l bXJjaHIgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHB1dGVudiBxYWNsIHJlYWRs aW5rIHJlYWRsaW5rYXQgc2lnMnN0ciBzb2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRh cmcgc3RkYm9vbCBzdGRpbyBzdHJmdGltZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxpbmsg c3lzX3N0YXQgc3lzX3RpbWUgdGltZSB0aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3Bl Yy1zdWIgdW5zZXRlbnYgdXRpbWVucyB3YXJuaW5ncworIyBSZXByb2R1Y2UgYnk6IGdudWxp Yi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1saWI9bGliZ251IC0tc291cmNlLWJhc2U9bGli IC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgt ZGlyPWJ1aWxkLWF1eCAtLWF2b2lkPWJpbmFyeS1pbyAtLWF2b2lkPWNsb3NlIC0tYXZvaWQ9 ZHVwIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZnN0YXQgLS1hdm9pZD1tYWxsb2MtcG9zaXgg LS1hdm9pZD1tc3ZjLWludmFsIC0tYXZvaWQ9bXN2Yy1ub3Rocm93IC0tYXZvaWQ9b3BlbiAt LWF2b2lkPW9wZW5hdC1kaWUgLS1hdm9pZD1vcGVuZGlyIC0tYXZvaWQ9cmFpc2UgLS1hdm9p ZD1zYXZlLWN3ZCAtLWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNpZ3Byb2NtYXNrIC0tYXZvaWQ9 c3lzX3R5cGVzIC0tYXZvaWQ9dGhyZWFkbGliIC0tbWFrZWZpbGUtbmFtZT1nbnVsaWIubWsg LS1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4 PWdsIC0tbm8tdmMtZmlsZXMgYWxsb2NhLW9wdCBjLWN0eXBlIGMtc3RyY2FzZSBjYXJlYWRs aW5rYXQgY2xvc2Utc3RyZWFtIGNyeXB0by9tZDUgY3J5cHRvL3NoYTEgY3J5cHRvL3NoYTI1 NiBjcnlwdG8vc2hhNTEyIGR0b2FzdHIgZHRvdGltZXNwZWMgZHVwMiBlbnZpcm9uIGV4ZWNp bmZvIGZhY2Nlc3NhdCBmY250bCBmY250bC1oIGZkYXRhc3luYyBmZG9wZW5kaXIgZmlsZW1v ZGUgZnN0YXRhdCBmc3luYyBnZXRsb2FkYXZnIGdldG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1l b2ZkYXkgaWdub3JlLXZhbHVlIGludHByb3BzIGxhcmdlZmlsZSBsc3RhdCBtYW55d2Fybmlu Z3MgbWVtcmNociBta3RpbWUgcGlwZTIgcHNlbGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52 IHFhY2wgcmVhZGxpbmsgcmVhZGxpbmthdCBzaWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0 ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3Vt YXggc3ltbGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMt YWRkIHRpbWVzcGVjLXN1YiB1bnNldGVudiB1dGltZW5zIHdhcm5pbmdzCiAKIAogTU9TVExZ Q0xFQU5GSUxFUyArPSBjb3JlICouc3RhY2tkdW1wCkBAIC0yOTYsNiArMjk2LDE1IEBACiAK ICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZmFjY2Vzc2F0CiAKKyMjIGJlZ2luIGdudWxpYiBt b2R1bGUgZmNudGwKKworCitFWFRSQV9ESVNUICs9IGZjbnRsLmMKKworRVhUUkFfbGliZ251 X2FfU09VUkNFUyArPSBmY250bC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZmNudGwK KwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBmY250bC1oCiAKIEJVSUxUX1NPVVJDRVMgKz0g ZmNudGwuaApAQCAtMzg0LDYgKzM5MywxNyBAQAogCiAjIyBlbmQgICBnbnVsaWIgbW9kdWxl IGZzeW5jCiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZ2V0ZHRhYmxlc2l6ZQorCitpZiBn bF9HTlVMSUJfRU5BQkxFRF9nZXRkdGFibGVzaXplCisKK2VuZGlmCitFWFRSQV9ESVNUICs9 IGdldGR0YWJsZXNpemUuYworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9IGdldGR0YWJs ZXNpemUuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGdldGR0YWJsZXNpemUKKwogIyMg YmVnaW4gZ251bGliIG1vZHVsZSBnZXRncm91cHMKIAogaWYgZ2xfR05VTElCX0VOQUJMRURf Z2V0Z3JvdXBzCkBAIC01NjgsNiArNTg4LDEyIEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1 bGUgcGF0aG1heAogCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHBpcGUyCisKK2xpYmdudV9h X1NPVVJDRVMgKz0gcGlwZTIuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHBpcGUyCisK ICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcHNlbGVjdAogCiAKQEAgLTE3MDQsOSArMTczMCw3 IEBACiAKICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdmVyaWZ5CiAKLWlmIGdsX0dOVUxJQl9F TkFCTEVEX3ZlcmlmeQogCi1lbmRpZgogRVhUUkFfRElTVCArPSB2ZXJpZnkuaAogCiAjIyBl bmQgICBnbnVsaWIgbW9kdWxlIHZlcmlmeQoKPT09IGFkZGVkIGZpbGUgJ2xpYi9waXBlMi5j JwotLS0gbGliL3BpcGUyLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL3Bp cGUyLmMJMjAxMy0wNy0wNSAyMjo0NDowNyArMDAwMApAQCAtMCwwICsxLDE3MSBAQAorLyog Q3JlYXRlIGEgcGlwZSwgd2l0aCBzcGVjaWZpYyBvcGVuaW5nIGZsYWdzLgorICAgQ29weXJp Z2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQor ICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1 ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDx1bmlz dGQuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lm IEdOVUxJQl9CSU5BUllfSU8KKyMgaW5jbHVkZSAiYmluYXJ5LWlvLmgiCisjZW5kaWYKKwor I2luY2x1ZGUgInZlcmlmeS5oIgorCisjaWYgR05VTElCX2RlZmluZWRfT19OT05CTE9DSwor IyBpbmNsdWRlICJub25ibG9ja2luZy5oIgorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBfV0lO MzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisvKiBO YXRpdmUgV2luZG93cyBBUEkuICAqLworCisjIGluY2x1ZGUgPGlvLmg+CisKKyNlbmRpZgor CitpbnQKK3BpcGUyIChpbnQgZmRbMl0sIGludCBmbGFncykKK3sKKyAgLyogTWluZ3cgX3Bp cGUoKSBjb3JydXB0cyBmZCBvbiBmYWlsdXJlOyBhbHNvLCBpZiB3ZSBzdWNjZWVkIGF0Cisg ICAgIGNyZWF0aW5nIHRoZSBwaXBlIGJ1dCBsYXRlciBmYWlsIGF0IGNoYW5naW5nIGZjbnRs LCB3ZSB3YW50CisgICAgIHRvIGxlYXZlIGZkIHVuY2hhbmdlZDogaHR0cDovL2F1c3Rpbmdy b3VwYnVncy5uZXQvdmlldy5waHA/aWQ9NDY3ICAqLworICBpbnQgdG1wWzJdOworICB0bXBb MF0gPSBmZFswXTsKKyAgdG1wWzFdID0gZmRbMV07CisKKyNpZiBIQVZFX1BJUEUyCisjIHVu ZGVmIHBpcGUyCisgIC8qIFRyeSB0aGUgc3lzdGVtIGNhbGwgZmlyc3QsIGlmIGl0IGV4aXN0 cy4gIChXZSBtYXkgYmUgcnVubmluZyB3aXRoIGEgZ2xpYmMKKyAgICAgdGhhdCBoYXMgdGhl IGZ1bmN0aW9uIGJ1dCB3aXRoIGFuIG9sZGVyIGtlcm5lbCB0aGF0IGxhY2tzIGl0LikgICov CisgIHsKKyAgICAvKiBDYWNoZSB0aGUgaW5mb3JtYXRpb24gd2hldGhlciB0aGUgc3lzdGVt IGNhbGwgcmVhbGx5IGV4aXN0cy4gICovCisgICAgc3RhdGljIGludCBoYXZlX3BpcGUyX3Jl YWxseTsgLyogMCA9IHVua25vd24sIDEgPSB5ZXMsIC0xID0gbm8gKi8KKyAgICBpZiAoaGF2 ZV9waXBlMl9yZWFsbHkgPj0gMCkKKyAgICAgIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IHBp cGUyIChmZCwgZmxhZ3MpOworICAgICAgICBpZiAoIShyZXN1bHQgPCAwICYmIGVycm5vID09 IEVOT1NZUykpCisgICAgICAgICAgeworICAgICAgICAgICAgaGF2ZV9waXBlMl9yZWFsbHkg PSAxOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICB9CisgICAgICAg IGhhdmVfcGlwZTJfcmVhbGx5ID0gLTE7CisgICAgICB9CisgIH0KKyNlbmRpZgorCisgIC8q IENoZWNrIHRoZSBzdXBwb3J0ZWQgZmxhZ3MuICAqLworICBpZiAoKGZsYWdzICYgfihPX0NM T0VYRUMgfCBPX05PTkJMT0NLIHwgT19CSU5BUlkgfCBPX1RFWFQpKSAhPSAwKQorICAgIHsK KyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2lm IChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9f Q1lHV0lOX18KKy8qIE5hdGl2ZSBXaW5kb3dzIEFQSS4gICovCisKKyAgaWYgKF9waXBlIChm ZCwgNDA5NiwgZmxhZ3MgJiB+T19OT05CTE9DSykgPCAwKQorICAgIHsKKyAgICAgIGZkWzBd ID0gdG1wWzBdOworICAgICAgZmRbMV0gPSB0bXBbMV07CisgICAgICByZXR1cm4gLTE7Cisg ICAgfQorCisgIC8qIE9fTk9OQkxPQ0sgaGFuZGxpbmcuCisgICAgIE9uIG5hdGl2ZSBXaW5k b3dzIHBsYXRmb3JtcywgT19OT05CTE9DSyBpcyBkZWZpbmVkIGJ5IGdudWxpYi4gIFVzZSB0 aGUKKyAgICAgZnVuY3Rpb25zIGRlZmluZWQgYnkgdGhlIGdudWxpYiBtb2R1bGUgJ25vbmJs b2NraW5nJy4gICovCisjIGlmIEdOVUxJQl9kZWZpbmVkX09fTk9OQkxPQ0sKKyAgaWYgKGZs YWdzICYgT19OT05CTE9DSykKKyAgICB7CisgICAgICBpZiAoc2V0X25vbmJsb2NraW5nX2Zs YWcgKGZkWzBdLCB0cnVlKSAhPSAwCisgICAgICAgICAgfHwgc2V0X25vbmJsb2NraW5nX2Zs YWcgKGZkWzFdLCB0cnVlKSAhPSAwKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorIyBl bHNlCisgIHsKKyAgICB2ZXJpZnkgKE9fTk9OQkxPQ0sgPT0gMCk7CisgIH0KKyMgZW5kaWYK KworICByZXR1cm4gMDsKKworI2Vsc2UKKy8qIFVuaXggQVBJLiAgKi8KKworICBpZiAocGlw ZSAoZmQpIDwgMCkKKyAgICByZXR1cm4gLTE7CisKKyAgLyogUE9TSVggPGh0dHA6Ly93d3cu b3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3BpcGUuaHRt bD4KKyAgICAgc2F5cyB0aGF0IGluaXRpYWxseSwgdGhlIE9fTk9OQkxPQ0sgYW5kIEZEX0NM T0VYRUMgZmxhZ3MgYXJlIGNsZWFyZWQgb24KKyAgICAgYm90aCBmZFswXSBhbmQgZmRbMV0u ICAqLworCisgIC8qIE9fTk9OQkxPQ0sgaGFuZGxpbmcuCisgICAgIE9uIFVuaXggcGxhdGZv cm1zLCBPX05PTkJMT0NLIGlzIGRlZmluZWQgYnkgdGhlIHN5c3RlbS4gIFVzZSBmY250bCgp LiAgKi8KKyAgaWYgKGZsYWdzICYgT19OT05CTE9DSykKKyAgICB7CisgICAgICBpbnQgZmNu dGxfZmxhZ3M7CisKKyAgICAgIGlmICgoZmNudGxfZmxhZ3MgPSBmY250bCAoZmRbMV0sIEZf R0VURkwsIDApKSA8IDAKKyAgICAgICAgICB8fCBmY250bCAoZmRbMV0sIEZfU0VURkwsIGZj bnRsX2ZsYWdzIHwgT19OT05CTE9DSykgPT0gLTEKKyAgICAgICAgICB8fCAoZmNudGxfZmxh Z3MgPSBmY250bCAoZmRbMF0sIEZfR0VURkwsIDApKSA8IDAKKyAgICAgICAgICB8fCBmY250 bCAoZmRbMF0sIEZfU0VURkwsIGZjbnRsX2ZsYWdzIHwgT19OT05CTE9DSykgPT0gLTEpCisg ICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgaWYgKGZsYWdzICYgT19DTE9FWEVDKQor ICAgIHsKKyAgICAgIGludCBmY250bF9mbGFnczsKKworICAgICAgaWYgKChmY250bF9mbGFn cyA9IGZjbnRsIChmZFsxXSwgRl9HRVRGRCwgMCkpIDwgMAorICAgICAgICAgIHx8IGZjbnRs IChmZFsxXSwgRl9TRVRGRCwgZmNudGxfZmxhZ3MgfCBGRF9DTE9FWEVDKSA9PSAtMQorICAg ICAgICAgIHx8IChmY250bF9mbGFncyA9IGZjbnRsIChmZFswXSwgRl9HRVRGRCwgMCkpIDwg MAorICAgICAgICAgIHx8IGZjbnRsIChmZFswXSwgRl9TRVRGRCwgZmNudGxfZmxhZ3MgfCBG RF9DTE9FWEVDKSA9PSAtMSkKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworIyBpZiBP X0JJTkFSWQorICBpZiAoZmxhZ3MgJiBPX0JJTkFSWSkKKyAgICB7CisgICAgICBzZXRtb2Rl IChmZFsxXSwgT19CSU5BUlkpOworICAgICAgc2V0bW9kZSAoZmRbMF0sIE9fQklOQVJZKTsK KyAgICB9CisgIGVsc2UgaWYgKGZsYWdzICYgT19URVhUKQorICAgIHsKKyAgICAgIHNldG1v ZGUgKGZkWzFdLCBPX1RFWFQpOworICAgICAgc2V0bW9kZSAoZmRbMF0sIE9fVEVYVCk7Cisg ICAgfQorIyBlbmRpZgorCisgIHJldHVybiAwOworCisjZW5kaWYKKworI2lmIEdOVUxJQl9k ZWZpbmVkX09fTk9OQkxPQ0sgfHwgXAorICAhKChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVk IF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pCisgZmFpbDoKKyAgeworICAg IGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgIGNsb3NlIChmZFswXSk7CisgICAgY2xv c2UgKGZkWzFdKTsKKyAgICBmZFswXSA9IHRtcFswXTsKKyAgICBmZFsxXSA9IHRtcFsxXTsK KyAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgIHJldHVybiAtMTsKKyAgfQorI2VuZGlm Cit9Cgo9PT0gYWRkZWQgZmlsZSAnbTQvZmNudGwubTQnCi0tLSBtNC9mY250bC5tNAkxOTcw LTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBtNC9mY250bC5tNAkyMDEzLTA3LTA1IDIyOjQ0 OjA4ICswMDAwCkBAIC0wLDAgKzEsOTUgQEAKKyMgZmNudGwubTQgc2VyaWFsIDUKK2RubCBD b3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K K2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29y IGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFz IGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEZvciBub3csIHRoaXMg bW9kdWxlIGVuc3VyZXMgdGhhdCBmY250bCgpCisjIC0gc3VwcG9ydHMgRl9EVVBGRCBjb3Jy ZWN0bHkKKyMgLSBzdXBwb3J0cyBvciBlbXVsYXRlcyBGX0RVUEZEX0NMT0VYRUMKKyMgLSBz dXBwb3J0cyBGX0dFVEZECisjIFN0aWxsIHRvIGJlIHBvcnRlZCB0byBtaW5ndzoKKyMgLSBG X1NFVEZECisjIC0gRl9HRVRGTCwgRl9TRVRGTAorIyAtIEZfR0VUT1dOLCBGX1NFVE9XTgor IyAtIEZfR0VUTEssIEZfU0VUTEssIEZfU0VUTEtXCitBQ19ERUZVTihbZ2xfRlVOQ19GQ05U TF0sCitbCisgIGRubCBQZXJzdWFkZSBnbGliYyB0byBleHBvc2UgRl9EVVBGRF9DTE9FWEVD LgorICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICBBQ19SRVFV SVJFKFtnbF9GQ05UTF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FM X0hPU1RdKQorICBBQ19DSEVDS19GVU5DU19PTkNFKFtmY250bF0pCisgIGlmIHRlc3QgJGFj X2N2X2Z1bmNfZmNudGwgPSBubzsgdGhlbgorICAgIGdsX1JFUExBQ0VfRkNOVEwKKyAgZWxz ZQorICAgIGRubCBjeWd3aW4gMS41LnggRl9EVVBGRCBoYXMgd3JvbmcgZXJybm8sIGFuZCBh bGxvd3MgbmVnYXRpdmUgdGFyZ2V0CisgICAgZG5sIGhhaWt1IGFscGhhIDIgRl9EVVBGRCBo YXMgd3JvbmcgZXJybm8KKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBmY250bCBoYW5k bGVzIEZfRFVQRkQgY29ycmVjdGx5XSwKKyAgICAgIFtnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVw ZmRfd29ya3NdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwor I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK11dLCBbW2ludCByZXN1 bHQgPSAwOworICAgICAgaWYgKGZjbnRsICgwLCBGX0RVUEZELCAtMSkgIT0gLTEpIHJlc3Vs dCB8PSAxOworICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCkgcmVzdWx0IHw9IDI7CisgICAg ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgXV0pXSwKKyAgICAgICAgIFtnbF9jdl9mdW5j X2ZjbnRsX2ZfZHVwZmRfd29ya3M9eWVzXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX2ZjbnRs X2ZfZHVwZmRfd29ya3M9bm9dLAorICAgICAgICAgWyMgR3Vlc3MgdGhhdCBpdCB3b3JrcyBv biBnbGliYyBzeXN0ZW1zCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiAjKCgKKyAgICAg ICAgICAgICotZ251KikgZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzPSJndWVzc2lu ZyB5ZXMiOzsKKyAgICAgICAgICAgICopICAgICAgZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZk X3dvcmtzPSJndWVzc2luZyBubyI7OworICAgICAgICAgIGVzYWNdKV0pCisgICAgY2FzZSAk Z2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzIGluCisgICAgICAqeWVzKSA7OworICAg ICAgKikgZ2xfUkVQTEFDRV9GQ05UTAorICAgICAgICBBQ19ERUZJTkUoW0ZDTlRMX0RVUEZE X0JVR0dZXSwgWzFdLCBbRGVmaW5lIHRoaXMgdG8gMSBpZiBGX0RVUEZECisgICAgICAgICAg YmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggUE9TSVhdKSA7OworICAgIGVzYWMKKworICAgIGRu bCBNYW55IHN5c3RlbXMgbGFjayBGX0RVUEZEX0NMT0VYRUMKKyAgICBBQ19DQUNIRV9DSEVD Syhbd2hldGhlciBmY250bCB1bmRlcnN0YW5kcyBGX0RVUEZEX0NMT0VYRUNdLAorICAgICAg W2dsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF9jbG9leGVjXSwKKyAgICAgIFtBQ19DT01QSUxF X0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZm5k ZWYgRl9EVVBGRF9DTE9FWEVDCitjaG9rZSBtZQorI2VuZGlmCisgICAgICAgICBdXSldLAor ICAgICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRl ZiBfX2xpbnV4X18KKy8qIFRoZSBMaW51eCBrZXJuZWwgb25seSBhZGRlZCBGX0RVUEZEX0NM T0VYRUMgaW4gMi42LjI0LCBzbyB3ZSBhbHdheXMgcmVwbGFjZQorICAgaXQgdG8gc3VwcG9y dCB0aGUgc2VtYW50aWNzIG9uIG9sZGVyIGtlcm5lbHMgdGhhdCBmYWlsZWQgd2l0aCBFSU5W QUwuICAqLworY2hva2UgbWUKKyNlbmRpZgorICAgICAgICAgICBdXSldLAorICAgICAgICAg ICBbZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWM9eWVzXSwKKyAgICAgICAgICAg W2dsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF9jbG9leGVjPSJuZWVkcyBydW50aW1lIGNoZWNr Il0pXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfY2xvZXhlYz1ub10p XSkKKyAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWMiICE9 IHllczsgdGhlbgorICAgICAgZ2xfUkVQTEFDRV9GQ05UTAorICAgICAgZG5sIE5vIHdpdG5l c3MgbWFjcm8gbmVlZGVkIGZvciB0aGlzIGJ1Zy4KKyAgICBmaQorICBmaQorICBkbmwgUmVw bGFjZSBmY250bCgpIGZvciBzdXBwb3J0aW5nIHRoZSBnbnVsaWItZGVmaW5lZCBmY2hkaXIo KSBmdW5jdGlvbiwKKyAgZG5sIHRvIGtlZXAgZmNoZGlyJ3MgYm9va2tlZXBpbmcgdXAtdG8t ZGF0ZS4KKyAgbTRfaWZkZWYoW2dsX0ZVTkNfRkNIRElSXSwgWworICAgIGdsX1RFU1RfRkNI RElSCisgICAgaWYgdGVzdCAkSEFWRV9GQ0hESVIgPSAwOyB0aGVuCisgICAgICBnbF9SRVBM QUNFX0ZDTlRMCisgICAgZmkKKyAgXSkKK10pCisKK0FDX0RFRlVOKFtnbF9SRVBMQUNFX0ZD TlRMXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfRkNOVExfSF9ERUZBVUxUU10pCisgIEFDX0NI RUNLX0ZVTkNTX09OQ0UoW2ZjbnRsXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19mY250bCA9 IG5vOyB0aGVuCisgICAgSEFWRV9GQ05UTD0wCisgIGVsc2UKKyAgICBSRVBMQUNFX0ZDTlRM PTEKKyAgZmkKK10pCgo9PT0gYWRkZWQgZmlsZSAnbTQvZ2V0ZHRhYmxlc2l6ZS5tNCcKLS0t IG00L2dldGR0YWJsZXNpemUubTQJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbTQv Z2V0ZHRhYmxlc2l6ZS5tNAkyMDEzLTA3LTA1IDIyOjQ0OjA4ICswMDAwCkBAIC0wLDAgKzEs MTcgQEAKKyMgZ2V0ZHRhYmxlc2l6ZS5tNCBzZXJpYWwgNAorZG5sIENvcHlyaWdodCAoQykg MjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmls ZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwg Z2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBp dCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlz IG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX0dFVERUQUJMRVNJ WkVdLAorWworICBBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pCisgIEFDX0NI RUNLX0ZVTkNTX09OQ0UoW2dldGR0YWJsZXNpemVdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5j X2dldGR0YWJsZXNpemUgIT0geWVzOyB0aGVuCisgICAgSEFWRV9HRVREVEFCTEVTSVpFPTAK KyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2V0ZHRhYmxlc2l6ZS5jLgor QUNfREVGVU4oW2dsX1BSRVJFUV9HRVREVEFCTEVTSVpFXSwgWzpdKQoKPT09IG1vZGlmaWVk IGZpbGUgJ200L2dudWxpYi1jb21wLm00JwotLS0gbTQvZ251bGliLWNvbXAubTQJMjAxMy0w NS0wNyAyMTozNDowMyArMDAwMAorKysgbTQvZ251bGliLWNvbXAubTQJMjAxMy0wNy0wNSAy MjowMzozNiArMDAwMApAQCAtNjMsNiArNjMsNyBAQAogICBBQ19SRVFVSVJFKFtnbF9VU0Vf U1lTVEVNX0VYVEVOU0lPTlNdKQogICAjIENvZGUgZnJvbSBtb2R1bGUgZXh0ZXJuLWlubGlu ZToKICAgIyBDb2RlIGZyb20gbW9kdWxlIGZhY2Nlc3NhdDoKKyAgIyBDb2RlIGZyb20gbW9k dWxlIGZjbnRsOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZmNudGwtaDoKICAgIyBDb2RlIGZy b20gbW9kdWxlIGZkYXRhc3luYzoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGZkb3BlbmRpcjoK QEAgLTcwLDYgKzcxLDcgQEAKICAgIyBDb2RlIGZyb20gbW9kdWxlIGZwZW5kaW5nOgogICAj IENvZGUgZnJvbSBtb2R1bGUgZnN0YXRhdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGZzeW5j OgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0ZHRhYmxlc2l6ZToKICAgIyBDb2RlIGZyb20g bW9kdWxlIGdldGdyb3VwczoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGxvYWRhdmc6CiAg ICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRvcHQtZ251OgpAQCAtOTIsNiArOTQsNyBAQAogICAj IENvZGUgZnJvbSBtb2R1bGUgbm9jcmFzaDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIG9wZW5h dC1oOgogICAjIENvZGUgZnJvbSBtb2R1bGUgcGF0aG1heDoKKyAgIyBDb2RlIGZyb20gbW9k dWxlIHBpcGUyOgogICAjIENvZGUgZnJvbSBtb2R1bGUgcHNlbGVjdDoKICAgIyBDb2RlIGZy b20gbW9kdWxlIHB0aHJlYWRfc2lnbWFzazoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHB1dGVu djoKQEAgLTE5MSw2ICsxOTQsMTEgQEAKICAgZmkKICAgZ2xfTU9EVUxFX0lORElDQVRPUihb ZmFjY2Vzc2F0XSkKICAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2ZhY2Nlc3NhdF0p CisgIGdsX0ZVTkNfRkNOVEwKKyAgaWYgdGVzdCAkSEFWRV9GQ05UTCA9IDAgfHwgdGVzdCAk UkVQTEFDRV9GQ05UTCA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2ZjbnRsXSkKKyAgZmkK KyAgZ2xfRkNOVExfTU9EVUxFX0lORElDQVRPUihbZmNudGxdKQogICBnbF9GQ05UTF9ICiAg IGdsX0ZVTkNfRkRBVEFTWU5DCiAgIGlmIHRlc3QgJEhBVkVfRkRBVEFTWU5DID0gMDsgdGhl bgpAQCAtMjczLDYgKzI4MSw4IEBACiAgIGZpCiAgIGdsX1RJTUVfTU9EVUxFX0lORElDQVRP UihbbWt0aW1lXSkKICAgZ2xfTVVMVElBUkNICisgIGdsX0ZVTkNfUElQRTIKKyAgZ2xfVU5J U1REX01PRFVMRV9JTkRJQ0FUT1IoW3BpcGUyXSkKICAgZ2xfRlVOQ19QU0VMRUNUCiAgIGlm IHRlc3QgJEhBVkVfUFNFTEVDVCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9QU0VMRUNUID0gMTsg dGhlbgogICAgIEFDX0xJQk9CSihbcHNlbGVjdF0pCkBAIC0zNjQsNiArMzc0LDcgQEAKICAg Z2xfZ251bGliX2VuYWJsZWRfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGI9ZmFs c2UKICAgZ2xfZ251bGliX2VuYWJsZWRfZG9zbmFtZT1mYWxzZQogICBnbF9nbnVsaWJfZW5h YmxlZF9ldWlkYWNjZXNzPWZhbHNlCisgIGdsX2dudWxpYl9lbmFibGVkX2dldGR0YWJsZXNp emU9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRfZ2V0Z3JvdXBzPWZhbHNlCiAgIGdsX2du dWxpYl9lbmFibGVkX2JlNDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3ZjJkYjM2PWZhbHNlCiAg IGdsX2dudWxpYl9lbmFibGVkX2E5Nzg2ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxPWZh bHNlCkBAIC0zNzMsNyArMzg0LDYgQEAKICAgZ2xfZ251bGliX2VuYWJsZWRfc3RhdD1mYWxz ZQogICBnbF9nbnVsaWJfZW5hYmxlZF9zdHJ0b2xsPWZhbHNlCiAgIGdsX2dudWxpYl9lbmFi bGVkX3N0cnRvdWxsPWZhbHNlCi0gIGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeT1mYWxzZQog ICBnbF9nbnVsaWJfZW5hYmxlZF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYz1m YWxzZQogICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZi MzIxYzMwMGIgKCkKICAgewpAQCAtNDA3LDYgKzQxNywxOCBAQAogICAgICAgZmkKICAgICBm aQogICB9CisgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9nZXRkdGFibGVzaXplICgpCisgIHsK KyAgICBpZiAhICRnbF9nbnVsaWJfZW5hYmxlZF9nZXRkdGFibGVzaXplOyB0aGVuCisgICAg ICBnbF9GVU5DX0dFVERUQUJMRVNJWkUKKyAgICAgIGlmIHRlc3QgJEhBVkVfR0VURFRBQkxF U0laRSA9IDA7IHRoZW4KKyAgICAgICAgQUNfTElCT0JKKFtnZXRkdGFibGVzaXplXSkKKyAg ICAgICAgZ2xfUFJFUkVRX0dFVERUQUJMRVNJWkUKKyAgICAgIGZpCisgICAgICBnbF9VTklT VERfTU9EVUxFX0lORElDQVRPUihbZ2V0ZHRhYmxlc2l6ZV0pCisgICAgICBnbF9nbnVsaWJf ZW5hYmxlZF9nZXRkdGFibGVzaXplPXRydWUKKyAgICBmaQorICB9CiAgIGZ1bmNfZ2xfZ251 bGliX200Y29kZV9nZXRncm91cHMgKCkKICAgewogICAgIGlmICEgJGdsX2dudWxpYl9lbmFi bGVkX2dldGdyb3VwczsgdGhlbgpAQCAtNDc5LDkgKzUwMSw2IEBACiAgICAgICBpZiB0ZXN0 ICRSRVBMQUNFX1NUQVQgPSAxOyB0aGVuCiAgICAgICAgIGZ1bmNfZ2xfZ251bGliX200Y29k ZV9wYXRobWF4CiAgICAgICBmaQotICAgICAgaWYgdGVzdCAkUkVQTEFDRV9TVEFUID0gMTsg dGhlbgotICAgICAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfdmVyaWZ5Ci0gICAgICBmaQog ICAgIGZpCiAgIH0KICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX3N0cnRvbGwgKCkKQEAgLTUw OCwxMiArNTI3LDYgQEAKICAgICAgIGdsX2dudWxpYl9lbmFibGVkX3N0cnRvdWxsPXRydWUK ICAgICBmaQogICB9Ci0gIGZ1bmNfZ2xfZ251bGliX200Y29kZV92ZXJpZnkgKCkKLSAgewot ICAgIGlmICEgJGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeTsgdGhlbgotICAgICAgZ2xfZ251 bGliX2VuYWJsZWRfdmVyaWZ5PXRydWUKLSAgICBmaQotICB9CiAgIGZ1bmNfZ2xfZ251bGli X200Y29kZV82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYyAoKQogICB7CiAgICAg aWYgISAkZ2xfZ251bGliX2VuYWJsZWRfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVh ZWM7IHRoZW4KQEAgLTUzMiw2ICs1NDUsOSBAQAogICBpZiB0ZXN0ICRIQVZFX0ZBQ0NFU1NB VCA9IDA7IHRoZW4KICAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMDNlMGFhYWQ0Y2I4OWNh NzU3NjUzYmQzNjdhNmNjYjcKICAgZmkKKyAgaWYgdGVzdCAkSEFWRV9GQ05UTCA9IDAgfHwg dGVzdCAkUkVQTEFDRV9GQ05UTCA9IDE7IHRoZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNv ZGVfZ2V0ZHRhYmxlc2l6ZQorICBmaQogICBpZiB0ZXN0ICRIQVZFX0ZET1BFTkRJUiA9IDA7 IHRoZW4KICAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdk MWZiMzIxYzMwMGIKICAgZmkKQEAgLTU2OCwxOSArNTg0LDE0IEBACiAgIGlmIHsgdGVzdCAk SEFWRV9TVFJUT0lNQVggPSAwIHx8IHRlc3QgJFJFUExBQ0VfU1RSVE9JTUFYID0gMTsgfSAm JiB0ZXN0ICRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KICAgICBmdW5j X2dsX2dudWxpYl9tNGNvZGVfc3RydG9sbAogICBmaQotICBpZiB0ZXN0ICRIQVZFX1NUUlRP SU1BWCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9TVFJUT0lNQVggPSAxOyB0aGVuCi0gICAgZnVu Y19nbF9nbnVsaWJfbTRjb2RlX3ZlcmlmeQotICBmaQogICBpZiB0ZXN0ICRhY19jdl9mdW5j X3N0cnRvdW1heCA9IG5vICYmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25n X2ludCA9IHllczsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9zdHJ0b3VsbAog ICBmaQotICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvdW1heCA9IG5vOyB0aGVuCi0gICAg ZnVuY19nbF9nbnVsaWJfbTRjb2RlX3ZlcmlmeQotICBmaQogICBtNF9wYXR0ZXJuX2FsbG93 KFteZ2xfR05VTElCX0VOQUJMRURfXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9F TkFCTEVEXzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBiXSwgWyRnbF9nbnVsaWJf ZW5hYmxlZF8yNjA5NDFjMGU1ZGM2N2VjOWU4N2QxZmIzMjFjMzAwYl0pCiAgIEFNX0NPTkRJ VElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9kb3NuYW1lXSwgWyRnbF9nbnVsaWJfZW5hYmxl ZF9kb3NuYW1lXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX2V1aWRh Y2Nlc3NdLCBbJGdsX2dudWxpYl9lbmFibGVkX2V1aWRhY2Nlc3NdKQorICBBTV9DT05ESVRJ T05BTChbZ2xfR05VTElCX0VOQUJMRURfZ2V0ZHRhYmxlc2l6ZV0sIFskZ2xfZ251bGliX2Vu YWJsZWRfZ2V0ZHRhYmxlc2l6ZV0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5B QkxFRF9nZXRncm91cHNdLCBbJGdsX2dudWxpYl9lbmFibGVkX2dldGdyb3Vwc10pCiAgIEFN X0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9iZTQ1M2NlYzVlZWNmNTczMWEyNzRm MmRlN2YyZGIzNl0sIFskZ2xfZ251bGliX2VuYWJsZWRfYmU0NTNjZWM1ZWVjZjU3MzFhMjc0 ZjJkZTdmMmRiMzZdKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfYTk3 ODY4NTBlOTk5YWU2NWE4MzZhNjA0MWU4ZTVlZDFdLCBbJGdsX2dudWxpYl9lbmFibGVkX2E5 Nzg2ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxXSkKQEAgLTU5MCw3ICs2MDEsNiBAQAog ICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfc3RhdF0sIFskZ2xfZ251bGli X2VuYWJsZWRfc3RhdF0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9z dHJ0b2xsXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9zdHJ0b2xsXSkKICAgQU1fQ09ORElUSU9O QUwoW2dsX0dOVUxJQl9FTkFCTEVEX3N0cnRvdWxsXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9z dHJ0b3VsbF0pCi0gIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF92ZXJpZnld LCBbJGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeV0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9H TlVMSUJfRU5BQkxFRF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlY10sIFskZ2xf Z251bGliX2VuYWJsZWRfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVhZWNdKQogICAj IEVuZCBvZiBjb2RlIGZyb20gbW9kdWxlcwogICBtNF9pZnZhbChnbF9MSUJTT1VSQ0VTX0xJ U1QsIFsKQEAgLTc2NCw2ICs3NzQsNyBAQAogICBsaWIvZXhlY2luZm8uYwogICBsaWIvZXhl Y2luZm8uaW4uaAogICBsaWIvZmFjY2Vzc2F0LmMKKyAgbGliL2ZjbnRsLmMKICAgbGliL2Zj bnRsLmluLmgKICAgbGliL2ZkYXRhc3luYy5jCiAgIGxpYi9mZG9wZW5kaXIuYwpAQCAtNzc2 LDYgKzc4Nyw3IEBACiAgIGxpYi9mc3luYy5jCiAgIGxpYi9mdG9hc3RyLmMKICAgbGliL2Z0 b2FzdHIuaAorICBsaWIvZ2V0ZHRhYmxlc2l6ZS5jCiAgIGxpYi9nZXRncm91cHMuYwogICBs aWIvZ2V0bG9hZGF2Zy5jCiAgIGxpYi9nZXRvcHQuYwpAQCAtNzk5LDYgKzgxMSw3IEBACiAg IGxpYi9vcGVuYXQtcHJvYy5jCiAgIGxpYi9vcGVuYXQuaAogICBsaWIvcGF0aG1heC5oCisg IGxpYi9waXBlMi5jCiAgIGxpYi9wc2VsZWN0LmMKICAgbGliL3B0aHJlYWRfc2lnbWFzay5j CiAgIGxpYi9wdXRlbnYuYwpAQCAtODcwLDYgKzg4Myw3IEBACiAgIG00L2V4dGVybi1pbmxp bmUubTQKICAgbTQvZmFjY2Vzc2F0Lm00CiAgIG00L2ZjbnRsLW8ubTQKKyAgbTQvZmNudGwu bTQKICAgbTQvZmNudGxfaC5tNAogICBtNC9mZGF0YXN5bmMubTQKICAgbTQvZmRvcGVuZGly Lm00CkBAIC04NzcsNiArODkxLDcgQEAKICAgbTQvZnBlbmRpbmcubTQKICAgbTQvZnN0YXRh dC5tNAogICBtNC9mc3luYy5tNAorICBtNC9nZXRkdGFibGVzaXplLm00CiAgIG00L2dldGdy b3Vwcy5tNAogICBtNC9nZXRsb2FkYXZnLm00CiAgIG00L2dldG9wdC5tNApAQCAtODk3LDYg KzkxMiw3IEBACiAgIG00L25vY3Jhc2gubTQKICAgbTQvb2ZmX3QubTQKICAgbTQvcGF0aG1h eC5tNAorICBtNC9waXBlMi5tNAogICBtNC9wc2VsZWN0Lm00CiAgIG00L3B0aHJlYWRfc2ln bWFzay5tNAogICBtNC9wdXRlbnYubTQKCj09PSBhZGRlZCBmaWxlICdtNC9waXBlMi5tNCcK LS0tIG00L3BpcGUyLm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIG00L3BpcGUy Lm00CTIwMTMtMDctMDUgMjI6NDQ6MDggKzAwMDAKQEAgLTAsMCArMSwxOCBAQAorIyBwaXBl Mi5tNCBzZXJpYWwgMgorZG5sIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1p c3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhv dXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQu CisKK0FDX0RFRlVOKFtnbF9GVU5DX1BJUEUyXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfVU5J U1REX0hfREVGQVVMVFNdKQorCisgIGRubCBQZXJzdWFkZSBnbGliYyA8dW5pc3RkLmg+IHRv IGRlY2xhcmUgcGlwZTIoKS4KKyAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJ T05TXSkKKworICBBQ19DSEVDS19GVU5DU19PTkNFKFtwaXBlMl0pCisgIGlmIHRlc3QgJGFj X2N2X2Z1bmNfcGlwZTIgIT0geWVzOyB0aGVuCisgICAgSEFWRV9QSVBFMj0wCisgIGZpCitd KQoKPT09IG1vZGlmaWVkIGZpbGUgJ250L0NoYW5nZUxvZycKLS0tIG50L0NoYW5nZUxvZwky MDEzLTA2LTI1IDE1OjA4OjQ3ICswMDAwCisrKyBudC9DaGFuZ2VMb2cJMjAxMy0wNy0wNyAw NjoyNDo1MCArMDAwMApAQCAtMSwzICsxLDEyIEBACisyMDEzLTA3LTA3ICBQYXVsIEVnZ2Vy dCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCU1ha2UgZmlsZSBkZXNjcmlwdG9ycyBjbG9z ZS1vbi1leGVjIHdoZW4gcG9zc2libGUgKEJ1ZyMxNDgwMykuCisJKiBnbnVsaWIubWs6IFJl bW92ZSBlbXB0eSBnbF9HTlVMSUJfRU5BQkxFRF92ZXJpZnkgc2VjdGlvbjsKKwlvdGhlcndp c2UsIGdudWxpYi10b29sIGNvbXBsYWlucyBnaXZlbiBjbG9zZS1vbi1leGVjIGNoYW5nZXMu CisJKiBpbmMvbXMtdzMyLmggKHBpcGUpOiBSZW1vdmUuCisJKiBtaW5ndy1jZmcuc2l0ZSAo YWNfY3ZfZnVuY19mY250bCwgZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWMpCisJ KGdsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF93b3JrcywgYWNfY3ZfZnVuY19waXBlMik6IE5l dyB2YXJzLgorCiAyMDEzLTA2LTI1ICBKdWFubWEgQmFycmFucXVlcm8gIDxsZWtrdHVAZ21h aWwuY29tPgogCiAJKiBjb25maWd1cmUuYmF0OiBBZGQgd2FybmluZyB0byB0aGUgaGVscCB0 ZXh0IGFib3V0IHVzaW5nIHRoZQoKPT09IG1vZGlmaWVkIGZpbGUgJ250L2dudWxpYi5taycK LS0tIG50L2dudWxpYi5tawkyMDEzLTA1LTE2IDA1OjUxOjM5ICswMDAwCisrKyBudC9nbnVs aWIubWsJMjAxMy0wNy0wNSAyMjowMzozNiArMDAwMApAQCAtODc2LDkgKzg3Niw2IEBACiAK ICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdmVyaWZ5CiAKLWlmIGdsX0dOVUxJQl9FTkFCTEVE X3ZlcmlmeQotCi1lbmRpZgogRVhUUkFfRElTVCArPSB2ZXJpZnkuaAogCiAjIyBlbmQgICBn bnVsaWIgbW9kdWxlIHZlcmlmeQoKPT09IG1vZGlmaWVkIGZpbGUgJ250L2luYy9tcy13MzIu aCcKLS0tIG50L2luYy9tcy13MzIuaAkyMDEzLTA1LTE1IDE3OjA2OjI2ICswMDAwCisrKyBu dC9pbmMvbXMtdzMyLmgJMjAxMy0wNy0wNyAwNjowMTowOSArMDAwMApAQCAtMjExLDcgKzIx MSw2IEBACiAjZGVmaW5lIG1rdGVtcCAgc3lzX21rdGVtcAogI3VuZGVmIG9wZW4KICNkZWZp bmUgb3BlbiAgICBzeXNfb3BlbgotI2RlZmluZSBwaXBlICAgIHN5c19waXBlCiAjdW5kZWYg cmVhZAogI2RlZmluZSByZWFkICAgIHN5c19yZWFkCiAjZGVmaW5lIHJlbmFtZSAgc3lzX3Jl bmFtZQoKPT09IG1vZGlmaWVkIGZpbGUgJ250L21pbmd3LWNmZy5zaXRlJwotLS0gbnQvbWlu Z3ctY2ZnLnNpdGUJMjAxMy0wNS0xOCAwNzoxNzowMyArMDAwMAorKysgbnQvbWluZ3ctY2Zn LnNpdGUJMjAxMy0wNy0wNyAwNjowMTo0MiArMDAwMApAQCAtNjcsNiArNjcsMTAgQEAKIGds X2N2X2Z1bmNfc3ltbGlua193b3Jrcz15ZXMKIGFjX2N2X2Z1bmNfcmVhZGxpbmthdD15ZXMK IGFjX2N2X2Z1bmNfZmFjY2Vzc2F0PXllcworIyBJbXBsZW1lbnRlZCBpbiB3MzIuYworYWNf Y3ZfZnVuY19mY250bD15ZXMKK2dsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF9jbG9leGVjPXll cworZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzPXllcwogIyBXZSBkb24ndCBuZWVk IGZkb3BlbmRpcgogYWNfY3ZfZnVuY19mZG9wZW5kaXI9Im5vdC1uZWVkZWQiCiBnbF9jdl9m dW5jX2Zkb3BlbmRpcl93b3Jrcz0ibm8tYnV0LW5vdC1uZWVkZWQtc28teWVzIgpAQCAtOTUs NiArOTksNyBAQAogIyBBdm9pZCBjb21waWxpbmcgZ251bGliIG1rdGltZQogZ2xfY3ZfZnVu Y193b3JraW5nX21rdGltZT15ZXMKICMgSW1wbGVtZW50ZWQgaW4gdzMyLmMKK2FjX2N2X2Z1 bmNfcGlwZTI9eWVzCiBhY19jdl9oYXZlX2RlY2xfdW5zZXRlbnY9eWVzCiBhY19jdl9mdW5j X3Vuc2V0ZW52PXllcwogZ3RfY3ZfZnVuY191bnNldGVudl9yZXQ9J2ludCcKCj09PSBtb2Rp ZmllZCBmaWxlICdzcmMvQ2hhbmdlTG9nJwotLS0gc3JjL0NoYW5nZUxvZwkyMDEzLTA3LTA2 IDE3OjU4OjQxICswMDAwCisrKyBzcmMvQ2hhbmdlTG9nCTIwMTMtMDctMDcgMDY6MDA6NTcg KzAwMDAKQEAgLTEsMyArMSw0MSBAQAorMjAxMy0wNy0wNyAgUGF1bCBFZ2dlcnQgIDxlZ2dl cnRAY3MudWNsYS5lZHU+CisKKwlNYWtlIGZpbGUgZGVzY3JpcHRvcnMgY2xvc2Utb24tZXhl YyB3aGVuIHBvc3NpYmxlIChCdWcjMTQ4MDMpLgorCVRoaXMgc2ltcGxpZmllcyBFbWFjcyBh IGJpdCwgc2luY2UgaXQgbm8gbG9uZ2VyIG5lZWRzIHRvIHdvcnJ5CisJYWJvdXQgY2xvc2lu ZyBmaWxlIGRlc2NyaXB0b3JzIGJ5IGhhbmQgaW4gc29tZSBjYXNlcy4KKwlJdCBhbHNvIGZp eGVzIHNvbWUgdW5saWtlbHkgcmFjZXMuICBOb3QgYWxsIHN1Y2ggcmFjZXMsIGFzCisJbGli cmFyaWVzIG9mdGVuIG9wZW4gZmlsZXMgaW50ZXJuYWxseSB3aXRob3V0IHNldHRpbmcKKwlj bG9zZS1vbi1leGVjLCBidXQgaXQncyBhbiBpbXByb3ZlbWVudC4KKwkqIGFsbG9jLmMgKHZh bGlkX3BvaW50ZXJfcCkgWyFXSU5ET1dTTlRdOgorCSogY2FsbHByb2MuYyAoRmNhbGxfcHJv Y2VzcykgWyFNU0RPU106CisJKiBlbWFjcy5jIChtYWluKSBbIURPU19OVF06CisJKiBuc3Rl cm0ubSAobnNfdGVybV9pbml0KToKKwkqIHByb2Nlc3MuYyAoY3JlYXRlX3Byb2Nlc3MpOgor CVVzZSAncGlwZTInIHdpdGggT19DTE9FWEVDIGluc3RlYWQgb2YgJ3BpcGUnLgorCSogZW1h Y3MuYyAoRmNhbGxfcHJvY2Vzc19yZWdpb24pIFtIQVZFX01LT1NURU1QXToKKwkqIGZpbGVs b2NrLmMgKGNyZWF0ZV9sb2NrX2ZpbGUpIFtIQVZFX01LT1NURU1QXToKKwlQcmVmZXIgbWtv c3RlbXAgd2l0aCBPX0NMT0VYRUMgdG8gbWtzdGVtcC4KKwkqIGNhbGxwcm9jLmMgKHJlbG9j YXRlX2ZkKSBbIVdJTkRPV1NOVF06CisJKiBlbWFjcy5jIChtYWluKTogVXNlIEZfRFVQRkRf Q0xPRVhFQywgbm90IHBsYWluIEZfRFVQRkQuCisJTm8gbmVlZCB0byB1c2UgZmNudGwgKC4u LiwgRl9TRVRGRCwgRkRfQ0xPRVhFQyksIHNpbmNlIHdlJ3JlCisJbm93IHVzaW5nIHBpcGUy LgorCSogZmlsZWxvY2suYyAoY3JlYXRlX2xvY2tfZmlsZSkgWyEgSEFWRV9NS09TVEVNUF06 CisJTWFrZSB0aGUgcmVzdWx0aW5nIGZpbGUgZGVzY3JpcHRvciBjbG9zZS1vbi1leGVjLgor CSogbGlzcC5oLCBscmVhZC5jLCBwcm9jZXNzLmMgKGNsb3NlX2xvYWRfZGVzY3MsIGNsb3Nl X3Byb2Nlc3NfZGVzY3MpOgorCSogbHJlYWQuYyAobG9hZF9kZXNjcmlwdG9yX2xpc3QsIGxv YWRfZGVzY3JpcHRvcl91bndpbmQpOgorCVJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4gIEFs bCB1c2VzIHJlbW92ZWQuCisJKiBwcm9jZXNzLmMgKFNPQ0tfQ0xPRVhFQyk6IERlZmluZSB0 byAwIGlmIG5vdCBzdXBwbGllZCBieSBzeXN0ZW0uCisJKGNsb3NlX29uX2V4ZWMsIGFjY2Vw dDQsIHByb2Nlc3Nfc29ja2V0KSBbIVNPQ0tfQ0xPRVhFQ106CisJTmV3IGZ1bmN0aW9ucy4K Kwkoc29ja2V0KSBbIVNPQ0tfQ0xPRVhFQ106IFN1cHBseSBhIHN1YnN0aXR1dGUuCisJKEZt YWtlX25ldHdvcmtfcHJvY2VzcywgRm5ldHdvcmtfaW50ZXJmYWNlX2xpc3QpOgorCShGbmV0 d29ya19pbnRlcmZhY2VfaW5mbywgc2VydmVyX2FjY2VwdF9jb25uZWN0aW9uKToKKwlNYWtl IG5ld2x5LWNyZWF0ZWQgc29ja2V0IGNsb3NlLW9uLWV4ZWMuCisJKiBzeXNkZXAuYyAoZW1h Y3Nfb3BlbiwgZW1hY3NfZm9wZW4pOgorCU1ha2UgbmV3LWNyZWF0ZWQgZGVzY3JpcHRvciBj bG9zZS1vbi1leGVjLgorCSogdzMyLmMgKGZjbnRsKTogU3VwcG9ydCBGX0RVUEZEX0NMT0VY RUMgd2VsbCBlbm91Z2ggZm9yIEVtYWNzLgorCSogdzMyLmMsIHczMi5oIChwaXBlMik6IFJl bmFtZSBmcm9tICdwaXBlJywgd2l0aCBuZXcgZmxhZ3MgYXJnLgorCiAyMDEzLTA3LTA2ICBK YW4gRGrDpHJ2ICA8amFuLmguZEBzd2lwbmV0LnNlPgogCiAJKiBuc3Rlcm0ubSAoc2VuZEV2 ZW50Oik6IEhhbmRsZSBOU0FQUF9EQVRBMl9SVU5GSUxFRElBTE9HLgoKPT09IG1vZGlmaWVk IGZpbGUgJ3NyYy9hbGxvYy5jJwotLS0gc3JjL2FsbG9jLmMJMjAxMy0wNy0wNSAxNjo1ODow MSArMDAwMAorKysgc3JjL2FsbG9jLmMJMjAxMy0wNy0wNiAwMDoxMDoyMiArMDAwMApAQCAt NDc0MSw3ICs0NzQxLDcgQEAKICAgICAgVW5mb3J0dW5hdGVseSwgd2UgY2Fubm90IHVzZSBO VUxMX0RFVklDRSBoZXJlLCBhcyBlbWFjc193cml0ZSBtYXkKICAgICAgbm90IHZhbGlkYXRl IHAgaW4gdGhhdCBjYXNlLiAgKi8KIAotICBpZiAocGlwZSAoZmQpID09IDApCisgIGlmIChw aXBlMiAoZmQsIE9fQ0xPRVhFQykgPT0gMCkKICAgICB7CiAgICAgICBib29sIHZhbGlkID0g ZW1hY3Nfd3JpdGUgKGZkWzFdLCAoY2hhciAqKSBwLCAxNikgPT0gMTY7CiAgICAgICBlbWFj c19jbG9zZSAoZmRbMV0pOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9jYWxscHJvYy5jJwot LS0gc3JjL2NhbGxwcm9jLmMJMjAxMy0wNy0wNiAwMjo0MDo1MCArMDAwMAorKysgc3JjL2Nh bGxwcm9jLmMJMjAxMy0wNy0wNyAwMTozNzoyMyArMDAwMApAQCAtNTE3LDcgKzUxNyw3IEBA CiAgICAgewogI2lmbmRlZiBNU0RPUwogICAgICAgaW50IGZkWzJdOwotICAgICAgaWYgKHBp cGUgKGZkKSA9PSAtMSkKKyAgICAgIGlmIChwaXBlMiAoZmQsIE9fQ0xPRVhFQykgIT0gMCkK IAl7CiAJICBpbnQgcGlwZV9lcnJubyA9IGVycm5vOwogCSAgZW1hY3NfY2xvc2UgKGZpbGVm ZCk7CkBAIC0xMDM0LDEyICsxMDM0LDE2IEBACiAgICAgbWVtY3B5ICh0ZW1wZmlsZSwgU0RB VEEgKGVuY29kZWRfdGVtKSwgU0JZVEVTIChlbmNvZGVkX3RlbSkgKyAxKTsKICAgICBjb2Rp bmdfc3lzdGVtcyA9IFF0OwogCi0jaWZkZWYgSEFWRV9NS1NURU1QCisjaWYgZGVmaW5lZCBI QVZFX01LT1NURU1QIHx8IGRlZmluZWQgSEFWRV9NS1NURU1QCiAgICAgewogICAgICAgaW50 IGZkOwogCiAgICAgICBibG9ja19pbnB1dCAoKTsKKyMgaWZkZWYgSEFWRV9NS09TVEVNUAor ICAgICAgZmQgPSBta29zdGVtcCAodGVtcGZpbGUsIE9fQ0xPRVhFQyk7CisjIGVsc2UKICAg ICAgIGZkID0gbWtzdGVtcCAodGVtcGZpbGUpOworIyBlbmRpZgogICAgICAgdW5ibG9ja19p bnB1dCAoKTsKICAgICAgIGlmIChmZCA9PSAtMSkKIAlyZXBvcnRfZmlsZV9lcnJvciAoIkZh aWxlZCB0byBvcGVuIHRlbXBvcmFyeSBmaWxlIiwKQEAgLTExODIsMTUgKzExODYsNiBAQAog CiAgIHBpZF90IHBpZCA9IGdldHBpZCAoKTsKIAotICAvKiBDbG9zZSBFbWFjcydzIGRlc2Ny aXB0b3JzIHRoYXQgdGhpcyBwcm9jZXNzIHNob3VsZCBub3QgaGF2ZS4gICovCi0gIGNsb3Nl X3Byb2Nlc3NfZGVzY3MgKCk7Ci0KLSAgLyogRE9TX05UIGlzbid0IGluIGEgdmZvcmssIHNv IGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGxvYWQtZmlsZSwKLSAgICAgd2Ugd2lsbCBs b3NlIGlmIHdlIGNhbGwgY2xvc2VfbG9hZF9kZXNjcyBoZXJlLiAgKi8KLSNpZm5kZWYgRE9T X05UCi0gIGNsb3NlX2xvYWRfZGVzY3MgKCk7Ci0jZW5kaWYKLQogICAvKiBOb3RlIHRoYXQg dXNlIG9mIGFsbG9jYSBpcyBhbHdheXMgc2FmZSBoZXJlLiAgSXQncyBvYnZpb3VzIGZvciBz eXN0ZW1zCiAgICAgIHRoYXQgZG8gbm90IGhhdmUgdHJ1ZSB2Zm9yayBvciB0aGF0IGhhdmUg dHJ1ZSAoc3RhY2spIGFsbG9jYS4KICAgICAgSWYgdXNpbmcgdmZvcmsgYW5kIENfQUxMT0NB ICh3aGVuIEVtYWNzIHVzZWQgdG8gaW5jbHVkZQpAQCAtMTM1Miw5ICsxMzQ3LDExIEBACiAg IGVtYWNzX2Nsb3NlICgxKTsKICAgZW1hY3NfY2xvc2UgKDIpOwogCisgIC8qIFJlZGlyZWN0 IGZpbGUgZGVzY3JpcHRvcnMgYW5kIGNsZWFyIEZEX0NMT0VYRUMgb24gdGhlIHJlZGlyZWN0 ZWQgb25lcy4gICovCiAgIGR1cDIgKGluLCAwKTsKICAgZHVwMiAob3V0LCAxKTsKICAgZHVw MiAoZXJyLCAyKTsKKwogICBlbWFjc19jbG9zZSAoaW4pOwogICBpZiAob3V0ICE9IGluKQog ICAgIGVtYWNzX2Nsb3NlIChvdXQpOwpAQCAtMTM5Miw3ICsxMzg5LDcgQEAKICAgICByZXR1 cm4gZmQ7CiAgIGVsc2UKICAgICB7Ci0gICAgICBpbnQgbmV3ID0gZmNudGwgKGZkLCBGX0RV UEZELCBtaW5mZCk7CisgICAgICBpbnQgbmV3ID0gZmNudGwgKGZkLCBGX0RVUEZEX0NMT0VY RUMsIG1pbmZkKTsKICAgICAgIGlmIChuZXcgPT0gLTEpCiAJewogCSAgY29uc3QgY2hhciAq bWVzc2FnZV8xID0gIkVycm9yIHdoaWxlIHNldHRpbmcgdXAgY2hpbGQ6ICI7Cgo9PT0gbW9k aWZpZWQgZmlsZSAnc3JjL2VtYWNzLmMnCi0tLSBzcmMvZW1hY3MuYwkyMDEzLTA3LTA2IDAy OjQwOjUwICswMDAwCisrKyBzcmMvZW1hY3MuYwkyMDEzLTA3LTA3IDAxOjM3OjIzICswMDAw CkBAIC04ODksNyArODg5LDcgQEAKIAkgIGVtYWNzX2Nsb3NlICgwKTsKIAkgIGVtYWNzX2Ns b3NlICgxKTsKIAkgIHJlc3VsdCA9IGVtYWNzX29wZW4gKHRlcm0sIE9fUkRXUiwgMCk7Ci0J ICBpZiAocmVzdWx0IDwgMCB8fCBkdXAgKDApIDwgMCkKKwkgIGlmIChyZXN1bHQgPCAwIHx8 IGZjbnRsICgwLCBGX0RVUEZEX0NMT0VYRUMsIDEpIDwgMCkKIAkgICAgewogCSAgICAgIGNo YXIgKmVycnN0cmluZyA9IHN0cmVycm9yIChlcnJubyk7CiAJICAgICAgZnByaW50ZiAoc3Rk ZXJyLCAiJXM6ICVzOiAlc1xuIiwgYXJndlswXSwgdGVybSwgZXJyc3RyaW5nKTsKQEAgLTk2 OSw3ICs5NjksNyBAQAogCSB1c2UgYSBwaXBlIGZvciBzeW5jaHJvbml6YXRpb24uICBUaGUg cGFyZW50IHdhaXRzIGZvciB0aGUgY2hpbGQKIAkgdG8gY2xvc2UgaXRzIGVuZCBvZiB0aGUg cGlwZSAodXNpbmcgYGRhZW1vbi1pbml0aWFsaXplZCcpCiAJIGJlZm9yZSBleGl0aW5nLiAg Ki8KLSAgICAgIGlmIChwaXBlIChkYWVtb25fcGlwZSkgPT0gLTEpCisgICAgICBpZiAocGlw ZTIgKGRhZW1vbl9waXBlLCBPX0NMT0VYRUMpICE9IDApCiAJewogCSAgZnByaW50ZiAoc3Rk ZXJyLCAiQ2Fubm90IHBpcGUhXG4iKTsKIAkgIGV4aXQgKDEpOwpAQCAtMTA2NSw5ICsxMDY1 LDYgQEAKICAgICAgICAJZGFlbW9uX25hbWUgPSB4c3RyZHVwIChkbmFtZV9hcmcpOwogICAg ICAgLyogQ2xvc2UgdW51c2VkIHJlYWRpbmcgZW5kIG9mIHRoZSBwaXBlLiAgKi8KICAgICAg IGNsb3NlIChkYWVtb25fcGlwZVswXSk7Ci0gICAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUg dXNlZCBlbmQgb2YgdGhlIHBpcGUgaXMgY2xvc2VkIG9uIGV4ZWMsIHNvCi0JIHRoYXQgaXQg aXMgbm90IGFjY2Vzc2libGUgdG8gcHJvZ3JhbXMgc3RhcnRlZCBmcm9tIC5lbWFjcy4gICov Ci0gICAgICBmY250bCAoZGFlbW9uX3BpcGVbMV0sIEZfU0VURkQsIEZEX0NMT0VYRUMpOwog CiAgICAgICBzZXRzaWQgKCk7CiAjZWxzZSAvKiBET1NfTlQgKi8KCj09PSBtb2RpZmllZCBm aWxlICdzcmMvZmlsZWxvY2suYycKLS0tIHNyYy9maWxlbG9jay5jCTIwMTMtMDUtMDUgMDA6 NTE6NDkgKzAwMDAKKysrIHNyYy9maWxlbG9jay5jCTIwMTMtMDctMDYgMDI6MTQ6NTcgKzAw MDAKQEAgLTQxNiw4ICs0MTYsMTMgQEAKICAgICAgIG1lbWNweSAobm9uY2UsIGxmbmFtZSwg bGZkaXJsZW4pOwogICAgICAgc3RyY3B5IChub25jZSArIGxmZGlybGVuLCBub25jZV9iYXNl KTsKIAotI2lmIEhBVkVfTUtTVEVNUAotICAgICAgLyogUHJlZmVyIG1rc3RlbXAgaWYgYXZh aWxhYmxlLCBhcyBpdCBhdm9pZHMgYSByYWNlIGJldHdlZW4KKyNpZiBIQVZFX01LT1NURU1Q CisgICAgICAvKiBQcmVmZXIgbWtvc3RlbXAgdG8gbWtzdGVtcCwgYXMgaXQgYXZvaWRzIGEg d2luZG93IHdoZXJlIEZEIGlzCisJIHRlbXBvcmFyaWx5IG9wZW4gd2l0aG91dCBjbG9zZS1v bi1leGVjLiAgKi8KKyAgICAgIGZkID0gbWtvc3RlbXAgKG5vbmNlLCBPX0JJTkFSWSB8IE9f Q0xPRVhFQyk7CisgICAgICBuZWVkX2ZjaG1vZCA9IDE7CisjZWxpZiBIQVZFX01LU1RFTVAK KyAgICAgIC8qIFByZWZlciBta3N0ZW1wIHRvIG1rdGVtcCwgYXMgaXQgYXZvaWRzIGEgcmFj ZSBiZXR3ZWVuCiAJIG1rdGVtcCBhbmQgZW1hY3Nfb3Blbi4gICovCiAgICAgICBmZCA9IG1r c3RlbXAgKG5vbmNlKTsKICAgICAgIG5lZWRfZmNobW9kID0gMTsKQEAgLTQzMiw3ICs0Mzcs MTEgQEAKIAllcnIgPSBlcnJubzsKICAgICAgIGVsc2UKIAl7Ci0JICBwdHJkaWZmX3QgbG9j a19pbmZvX2xlbiA9IHN0cmxlbiAobG9ja19pbmZvX3N0cik7CisJICBwdHJkaWZmX3QgbG9j a19pbmZvX2xlbjsKKyNpZiAhIEhBVkVfTUtPU1RFTVAKKwkgIGZjbnRsIChmZCwgRl9TRVRG RCwgRkRfQ0xPRVhFQyk7CisjZW5kaWYKKwkgIGxvY2tfaW5mb19sZW4gPSBzdHJsZW4gKGxv Y2tfaW5mb19zdHIpOwogCSAgZXJyID0gMDsKIAkgIGlmIChlbWFjc193cml0ZSAoZmQsIGxv Y2tfaW5mb19zdHIsIGxvY2tfaW5mb19sZW4pICE9IGxvY2tfaW5mb19sZW4KIAkgICAgICB8 fCAobmVlZF9mY2htb2QgJiYgZmNobW9kIChmZCwgd29ybGRfcmVhZGFibGUpICE9IDApKQoK PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9saXNwLmgnCi0tLSBzcmMvbGlzcC5oCTIwMTMtMDct MDQgMDk6Mjk6MjggKzAwMDAKKysrIHNyYy9saXNwLmgJMjAxMy0wNy0wNSAyMjowMzo0NSAr MDAwMApAQCAtMzY2OCw3ICszNjY4LDYgQEAKIGV4dGVybiB2b2lkIG1hcF9vYmFycmF5IChM aXNwX09iamVjdCwgdm9pZCAoKikgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QpOwogZXh0ZXJuIHZvaWQgZGlyX3dh cm5pbmcgKGNvbnN0IGNoYXIgKiwgTGlzcF9PYmplY3QpOwotZXh0ZXJuIHZvaWQgY2xvc2Vf bG9hZF9kZXNjcyAodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X29iYXJyYXkgKHZvaWQpOwog ZXh0ZXJuIHZvaWQgaW5pdF9scmVhZCAodm9pZCk7CiBleHRlcm4gdm9pZCBzeW1zX29mX2xy ZWFkICh2b2lkKTsKQEAgLTM5OTUsNyArMzk5NCw2IEBACiBleHRlcm4gdm9pZCBhZGRfZ3Bt X3dhaXRfZGVzY3JpcHRvciAoaW50KTsKIGV4dGVybiB2b2lkIGRlbGV0ZV9ncG1fd2FpdF9k ZXNjcmlwdG9yIChpbnQpOwogI2VuZGlmCi1leHRlcm4gdm9pZCBjbG9zZV9wcm9jZXNzX2Rl c2NzICh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfcHJvY2Vzc19lbWFjcyAodm9pZCk7CiBl eHRlcm4gdm9pZCBzeW1zX29mX3Byb2Nlc3MgKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0dXBf cHJvY2Vzc19jb2Rpbmdfc3lzdGVtcyAoTGlzcF9PYmplY3QpOwoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy9scmVhZC5jJwotLS0gc3JjL2xyZWFkLmMJMjAxMy0wNy0wNiAwMjo0MDo1MCAr MDAwMAorKysgc3JjL2xyZWFkLmMJMjAxMy0wNy0wNSAyMjozNDo1NiArMDAwMApAQCAtOTUs OSArOTUsNiBAQAogICAgSXQgbXVzdCBiZSBzZXQgdG8gbmlsIGJlZm9yZSBhbGwgdG9wLWxl dmVsIGNhbGxzIHRvIHJlYWQwLiAgKi8KIHN0YXRpYyBMaXNwX09iamVjdCByZWFkX29iamVj dHM7CiAKLS8qIExpc3Qgb2YgZGVzY3JpcHRvcnMgbm93IG9wZW4gZm9yIEZsb2FkLiAgKi8K LXN0YXRpYyBMaXNwX09iamVjdCBsb2FkX2Rlc2NyaXB0b3JfbGlzdDsKLQogLyogRmlsZSBm b3IgZ2V0X2ZpbGVfY2hhciB0byByZWFkIGZyb20uICBVc2UgYnkgbG9hZC4gICovCiBzdGF0 aWMgRklMRSAqaW5zdHJlYW07CiAKQEAgLTE0OSw3ICsxNDYsNiBAQAogICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7CiBzdGF0aWMgTGlzcF9P YmplY3QgbG9hZF91bndpbmQgKExpc3BfT2JqZWN0KTsKLXN0YXRpYyBMaXNwX09iamVjdCBs b2FkX2Rlc2NyaXB0b3JfdW53aW5kIChMaXNwX09iamVjdCk7CiAMCiAvKiBGdW5jdGlvbnMg dGhhdCByZWFkIG9uZSBieXRlIGZyb20gdGhlIGN1cnJlbnQgc291cmNlIFJFQURDSEFSRlVO CiAgICBvciB1bnJlYWRzIG9uZSBieXRlLiAgSWYgdGhlIGludGVnZXIgYXJndW1lbnQgQyBp cyAtMSwgaXQgcmV0dXJucwpAQCAtMTMyOCwxMSArMTMyNCw4IEBACiAgICAgfQogCiAgIHJl Y29yZF91bndpbmRfcHJvdGVjdCAobG9hZF91bndpbmQsIG1ha2Vfc2F2ZV9wb2ludGVyIChz dHJlYW0pKTsKLSAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChsb2FkX2Rlc2NyaXB0b3JfdW53 aW5kLCBsb2FkX2Rlc2NyaXB0b3JfbGlzdCk7CiAgIHNwZWNiaW5kIChRbG9hZF9maWxlX25h bWUsIGZvdW5kKTsKICAgc3BlY2JpbmQgKFFpbmhpYml0X2ZpbGVfbmFtZV9vcGVyYXRpb24s IFFuaWwpOwotICBsb2FkX2Rlc2NyaXB0b3JfbGlzdAotICAgID0gRmNvbnMgKG1ha2VfbnVt YmVyIChmaWxlbm8gKHN0cmVhbSkpLCBsb2FkX2Rlc2NyaXB0b3JfbGlzdCk7CiAgIHNwZWNi aW5kIChRbG9hZF9pbl9wcm9ncmVzcywgUXQpOwogCiAgIGluc3RyZWFtID0gc3RyZWFtOwpA QCAtMTM5NSwyNiArMTM4OCw2IEBACiAgICAgfQogICByZXR1cm4gUW5pbDsKIH0KLQotc3Rh dGljIExpc3BfT2JqZWN0Ci1sb2FkX2Rlc2NyaXB0b3JfdW53aW5kIChMaXNwX09iamVjdCBv bGRsaXN0KQotewotICBsb2FkX2Rlc2NyaXB0b3JfbGlzdCA9IG9sZGxpc3Q7Ci0gIHJldHVy biBRbmlsOwotfQotCi0vKiBDbG9zZSBhbGwgZGVzY3JpcHRvcnMgaW4gdXNlIGZvciBGbG9h ZHMuCi0gICBUaGlzIGlzIHVzZWQgd2hlbiBzdGFydGluZyBhIHN1YnByb2Nlc3MuICAqLwot Ci12b2lkCi1jbG9zZV9sb2FkX2Rlc2NzICh2b2lkKQotewotI2lmbmRlZiBXSU5ET1dTTlQK LSAgTGlzcF9PYmplY3QgdGFpbDsKLSAgZm9yICh0YWlsID0gbG9hZF9kZXNjcmlwdG9yX2xp c3Q7IENPTlNQICh0YWlsKTsgdGFpbCA9IFhDRFIgKHRhaWwpKQotICAgIGVtYWNzX2Nsb3Nl IChYRkFTVElOVCAoWENBUiAodGFpbCkpKTsKLSNlbmRpZgotfQogDAogc3RhdGljIGJvb2wK IGNvbXBsZXRlX2ZpbGVuYW1lX3AgKExpc3BfT2JqZWN0IHBhdGhuYW1lKQpAQCAtNDM0OSw5 ICs0MzIyLDYgQEAKIAogICBsb2FkX2luX3Byb2dyZXNzID0gMDsKICAgVmxvYWRfZmlsZV9u YW1lID0gUW5pbDsKLQotICBsb2FkX2Rlc2NyaXB0b3JfbGlzdCA9IFFuaWw7Ci0KICAgVnN0 YW5kYXJkX2lucHV0ID0gUXQ7CiAgIFZsb2Fkc19pbl9wcm9ncmVzcyA9IFFuaWw7CiB9CkBA IC00NjI0LDkgKzQ1OTQsNiBAQAogCiAgIC8qIFZzb3VyY2VfZGlyZWN0b3J5IHdhcyBpbml0 aWFsaXplZCBpbiBpbml0X2xyZWFkLiAgKi8KIAotICBsb2FkX2Rlc2NyaXB0b3JfbGlzdCA9 IFFuaWw7Ci0gIHN0YXRpY3BybyAoJmxvYWRfZGVzY3JpcHRvcl9saXN0KTsKLQogICBERUZT WU0gKFFjdXJyZW50X2xvYWRfbGlzdCwgImN1cnJlbnQtbG9hZC1saXN0Iik7CiAgIERFRlNZ TSAoUXN0YW5kYXJkX2lucHV0LCAic3RhbmRhcmQtaW5wdXQiKTsKICAgREVGU1lNIChRcmVh ZF9jaGFyLCAicmVhZC1jaGFyIik7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL25zdGVybS5t JwotLS0gc3JjL25zdGVybS5tCTIwMTMtMDctMDYgMTc6NTg6NDEgKzAwMDAKKysrIHNyYy9u c3Rlcm0ubQkyMDEzLTA3LTA2IDE5OjEyOjM5ICswMDAwCkBAIC00MTQyLDcgKzQxNDIsNyBA QAogCiAgIGlmIChzZWxmZHNbMF0gPT0gLTEpCiAgICAgewotICAgICAgaWYgKHBpcGUgKHNl bGZkcykgPT0gLTEpCisgICAgICBpZiAocGlwZTIgKHNlbGZkcywgT19DTE9FWEVDKSAhPSAw KQogICAgICAgICB7CiAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIGNy ZWF0ZSBwaXBlOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICBlbWFjc19zdHJlcnJvciAo ZXJybm8pKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvcHJvY2Vzcy5jJwotLS0gc3JjL3By b2Nlc3MuYwkyMDEzLTA3LTA1IDE2OjU4OjAxICswMDAwCisrKyBzcmMvcHJvY2Vzcy5jCTIw MTMtMDctMDYgMDk6MDY6MjYgKzAwMDAKQEAgLTEzNSw2ICsxMzUsMzQgQEAKIAkJICAgICAg IEVNQUNTX1RJTUUgKiwgdm9pZCAqKTsKICNlbmRpZgogCisjaWZuZGVmIFNPQ0tfQ0xPRVhF QworIyBkZWZpbmUgU09DS19DTE9FWEVDIDAKKworLyogRW11bGF0ZSBHTlUvTGludXggYWNj ZXB0NCBhbmQgc29ja2V0IHdlbGwgZW5vdWdoIGZvciB0aGlzIG1vZHVsZS4gICovCisKK3N0 YXRpYyBpbnQKK2Nsb3NlX29uX2V4ZWMgKGludCBmZCkKK3sKKyAgaWYgKDAgPD0gZmQpCisg ICAgZmNudGwgKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKKyAgcmV0dXJuIGZkOworfQor CitzdGF0aWMgaW50CithY2NlcHQ0IChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFk ZHIsIHNvY2tsZW5fdCAqYWRkcmxlbiwgaW50IGZsYWdzKQoreworICByZXR1cm4gY2xvc2Vf b25fZXhlYyAoYWNjZXB0IChzb2NrZmQsIGFkZHIsIGFkZHJsZW4pKTsKK30KKworc3RhdGlj IGludAorcHJvY2Vzc19zb2NrZXQgKGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9j b2wpCit7CisgIHJldHVybiBjbG9zZV9vbl9leGVjIChzb2NrZXQgKGRvbWFpbiwgdHlwZSwg cHJvdG9jb2wpKTsKK30KKyMgdW5kZWYgc29ja2V0CisjIGRlZmluZSBzb2NrZXQoZG9tYWlu LCB0eXBlLCBwcm90b2NvbCkgcHJvY2Vzc19zb2NrZXQgKGRvbWFpbiwgdHlwZSwgcHJvdG9j b2wpCisjZW5kaWYKKwogLyogV29yayBhcm91bmQgR0NDIDQuNy4wIGJ1ZyB3aXRoIHN0cmlj dCBvdmVyZmxvdyBjaGVja2luZzsgc2VlCiAgICA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3pp bGxhL3Nob3dfYnVnLmNnaT9pZD01MjkwND4uCiAgICBUaGVzZSBsaW5lcyBjYW4gYmUgcmVt b3ZlZCBvbmNlIHRoZSBHQ0MgYnVnIGlzIGZpeGVkLiAgKi8KQEAgLTE2MTksMTQgKzE2NDcs MTEgQEAKICAgZWxzZQogI2VuZGlmIC8qIEhBVkVfUFRZUyAqLwogICAgIHsKLSAgICAgIGlu dCB0ZW07Ci0gICAgICB0ZW0gPSBwaXBlIChzdik7Ci0gICAgICBpZiAodGVtIDwgMCkKKyAg ICAgIGlmIChwaXBlMiAoc3YsIE9fQ0xPRVhFQykgIT0gMCkKIAlyZXBvcnRfZmlsZV9lcnJv ciAoIkNyZWF0aW5nIHBpcGUiLCBRbmlsKTsKICAgICAgIGluY2hhbm5lbCA9IHN2WzBdOwog ICAgICAgZm9ya291dCA9IHN2WzFdOwotICAgICAgdGVtID0gcGlwZSAoc3YpOwotICAgICAg aWYgKHRlbSA8IDApCisgICAgICBpZiAocGlwZTIgKHN2LCBPX0NMT0VYRUMpICE9IDApCiAJ ewogCSAgZW1hY3NfY2xvc2UgKGluY2hhbm5lbCk7CiAJICBlbWFjc19jbG9zZSAoZm9ya291 dCk7CkBAIC0xNjM3LDI5ICsxNjYyLDE0IEBACiAgICAgfQogCiAjaWZuZGVmIFdJTkRPV1NO VAotICAgIHsKLSAgICAgIGludCB0ZW07Ci0KLSAgICAgIHRlbSA9IHBpcGUgKHdhaXRfY2hp bGRfc2V0dXApOwotICAgICAgaWYgKHRlbSA8IDApCi0JcmVwb3J0X2ZpbGVfZXJyb3IgKCJD cmVhdGluZyBwaXBlIiwgUW5pbCk7Ci0gICAgICB0ZW0gPSBmY250bCAod2FpdF9jaGlsZF9z ZXR1cFsxXSwgRl9HRVRGRCwgMCk7Ci0gICAgICBpZiAodGVtID49IDApCi0JdGVtID0gZmNu dGwgKHdhaXRfY2hpbGRfc2V0dXBbMV0sIEZfU0VURkQsIHRlbSB8IEZEX0NMT0VYRUMpOwot ICAgICAgaWYgKHRlbSA8IDApCi0JewotCSAgZW1hY3NfY2xvc2UgKHdhaXRfY2hpbGRfc2V0 dXBbMF0pOwotCSAgZW1hY3NfY2xvc2UgKHdhaXRfY2hpbGRfc2V0dXBbMV0pOwotCSAgcmVw b3J0X2ZpbGVfZXJyb3IgKCJTZXR0aW5nIGZpbGUgZGVzY3JpcHRvciBmbGFncyIsIFFuaWwp OwotCX0KLSAgICB9CisgIGlmIChwaXBlMiAod2FpdF9jaGlsZF9zZXR1cCwgT19DTE9FWEVD KSAhPSAwKQorICAgIHJlcG9ydF9maWxlX2Vycm9yICgiQ3JlYXRpbmcgcGlwZSIsIFFuaWwp OwogI2VuZGlmCiAKICAgZmNudGwgKGluY2hhbm5lbCwgRl9TRVRGTCwgT19OT05CTE9DSyk7 CiAgIGZjbnRsIChvdXRjaGFubmVsLCBGX1NFVEZMLCBPX05PTkJMT0NLKTsKIAotICAvKiBS ZWNvcmQgdGhpcyBhcyBhbiBhY3RpdmUgcHJvY2Vzcywgd2l0aCBpdHMgY2hhbm5lbHMuCi0g ICAgIEFzIGEgcmVzdWx0LCBjaGlsZF9zZXR1cCB3aWxsIGNsb3NlIEVtYWNzJ3Mgc2lkZSBv ZiB0aGUgcGlwZXMuICAqLworICAvKiBSZWNvcmQgdGhpcyBhcyBhbiBhY3RpdmUgcHJvY2Vz cywgd2l0aCBpdHMgY2hhbm5lbHMuICAqLwogICBjaGFuX3Byb2Nlc3NbaW5jaGFubmVsXSA9 IHByb2Nlc3M7CiAgIFhQUk9DRVNTIChwcm9jZXNzKS0+aW5mZCA9IGluY2hhbm5lbDsKICAg WFBST0NFU1MgKHByb2Nlc3MpLT5vdXRmZCA9IG91dGNoYW5uZWw7CkBAIC0zMTM1LDcgKzMx NDUsOCBAQAogICAgIHJldHJ5X2Nvbm5lY3Q6CiAjZW5kaWYKIAotICAgICAgcyA9IHNvY2tl dCAobHJlcy0+YWlfZmFtaWx5LCBscmVzLT5haV9zb2NrdHlwZSwgbHJlcy0+YWlfcHJvdG9j b2wpOworICAgICAgcyA9IHNvY2tldCAobHJlcy0+YWlfZmFtaWx5LCBscmVzLT5haV9zb2Nr dHlwZSB8IFNPQ0tfQ0xPRVhFQywKKwkJICBscmVzLT5haV9wcm90b2NvbCk7CiAgICAgICBp ZiAocyA8IDApCiAJewogCSAgeGVycm5vID0gZXJybm87CkBAIC0zNTMyLDcgKzM1NDMsNyBA QAogICBpbnQgczsKICAgTGlzcF9PYmplY3QgcmVzOwogCi0gIHMgPSBzb2NrZXQgKEFGX0lO RVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgcyA9IHNvY2tldCAoQUZfSU5FVCwgU09DS19TVFJF QU0gfCBTT0NLX0NMT0VYRUMsIDApOwogICBpZiAocyA8IDApCiAgICAgcmV0dXJuIFFuaWw7 CiAKQEAgLTM2ODgsNyArMzY5OSw3IEBACiAgICAgZXJyb3IgKCJpbnRlcmZhY2UgbmFtZSB0 b28gbG9uZyIpOwogICBzdHJjcHkgKHJxLmlmcl9uYW1lLCBTU0RBVEEgKGlmbmFtZSkpOwog Ci0gIHMgPSBzb2NrZXQgKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgcyA9IHNvY2tl dCAoQUZfSU5FVCwgU09DS19TVFJFQU0gfCBTT0NLX0NMT0VYRUMsIDApOwogICBpZiAocyA8 IDApCiAgICAgcmV0dXJuIFFuaWw7CiAKQEAgLTM5ODQsNyArMzk5NSw3IEBACiAgIH0gc2Fk ZHI7CiAgIHNvY2tsZW5fdCBsZW4gPSBzaXplb2Ygc2FkZHI7CiAKLSAgcyA9IGFjY2VwdCAo Y2hhbm5lbCwgJnNhZGRyLnNhLCAmbGVuKTsKKyAgcyA9IGFjY2VwdDQgKGNoYW5uZWwsICZz YWRkci5zYSwgJmxlbiwgU09DS19DTE9FWEVDKTsKIAogICBpZiAocyA8IDApCiAgICAgewpA QCAtNjg1OCwzMiArNjg2OSw2IEBACiAjZW5kaWYKIH0KIAotLyogQ2xvc2UgYWxsIGRlc2Ny aXB0b3JzIGN1cnJlbnRseSBpbiB1c2UgZm9yIGNvbW11bmljYXRpb24KLSAgIHdpdGggc3Vi cHJvY2Vzcy4gIFRoaXMgaXMgdXNlZCBpbiBhIG5ld2x5LWZvcmtlZCBzdWJwcm9jZXNzCi0g ICB0byBnZXQgcmlkIG9mIGlycmVsZXZhbnQgZGVzY3JpcHRvcnMuICAqLwotCi12b2lkCi1j bG9zZV9wcm9jZXNzX2Rlc2NzICh2b2lkKQotewotI2lmbmRlZiBET1NfTlQKLSAgaW50IGk7 Ci0gIGZvciAoaSA9IDA7IGkgPCBNQVhERVNDOyBpKyspCi0gICAgewotICAgICAgTGlzcF9P YmplY3QgcHJvY2VzczsKLSAgICAgIHByb2Nlc3MgPSBjaGFuX3Byb2Nlc3NbaV07Ci0gICAg ICBpZiAoIU5JTFAgKHByb2Nlc3MpKQotCXsKLQkgIGludCBpbiAgPSBYUFJPQ0VTUyAocHJv Y2VzcyktPmluZmQ7Ci0JICBpbnQgb3V0ID0gWFBST0NFU1MgKHByb2Nlc3MpLT5vdXRmZDsK LQkgIGlmIChpbiA+PSAwKQotCSAgICBlbWFjc19jbG9zZSAoaW4pOwotCSAgaWYgKG91dCA+ PSAwICYmIGluICE9IG91dCkKLQkgICAgZW1hY3NfY2xvc2UgKG91dCk7Ci0JfQotICAgIH0K LSNlbmRpZgotfQotCiBERUZVTiAoImdldC1idWZmZXItcHJvY2VzcyIsIEZnZXRfYnVmZmVy X3Byb2Nlc3MsIFNnZXRfYnVmZmVyX3Byb2Nlc3MsIDEsIDEsIDAsCiAgICAgICAgZG9jOiAv KiBSZXR1cm4gdGhlIChvciBhKSBwcm9jZXNzIGFzc29jaWF0ZWQgd2l0aCBCVUZGRVIuCiBC VUZGRVIgbWF5IGJlIGEgYnVmZmVyIG9yIHRoZSBuYW1lIG9mIG9uZS4gICovKQoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9zeXNkZXAuYycKLS0tIHNyYy9zeXNkZXAuYwkyMDEzLTA3LTA2 IDAyOjQwOjUwICswMDAwCisrKyBzcmMvc3lzZGVwLmMJMjAxMy0wNy0wNiAwNzowNTo0MSAr MDAwMApAQCAtNTQzLDggKzU0Myw2IEBACiAjZW5kaWYKIAl9CiAKLSAgICAgIGNsb3NlX3By b2Nlc3NfZGVzY3MgKCk7CS8qIENsb3NlIEVtYWNzJ3MgcGlwZXMvcHR5cyAqLwotCiAjaWZk ZWYgTVNET1MgICAgLyogRGVtYWNzIDEuMS4yIDkxLzEwLzIwIE1hbmFidSBIaWdhc2hpZGEg Ki8KICAgICAgIHsKIAljaGFyICplcHdkID0gZ2V0ZW52ICgiUFdEIik7CkBAIC0yMTUyLDYg KzIxNTAsOCBAQAogI2VuZGlmCiAKIC8qIE9wZW4gRklMRSBmb3IgRW1hY3MgdXNlLCB1c2lu ZyBvcGVuIGZsYWdzIE9GTEFHIGFuZCBtb2RlIE1PREUuCisgICBBcnJhbmdlIGZvciBzdWJw cm9ncmFtcyB0byBub3QgaW5oZXJpdCB0aGUgZmlsZSBkZXNjcmlwdG9yLgorICAgUHJlZmVy IGEgbWV0aG9kIHRoYXQgaXMgbXVsdGl0aHJlYWQtc2FmZSwgaWYgYXZhaWxhYmxlLgogICAg RG8gbm90IGZhaWwgbWVyZWx5IGJlY2F1c2UgdGhlIG9wZW4gd2FzIGludGVycnVwdGVkIGJ5 IGEgc2lnbmFsLgogICAgQWxsb3cgdGhlIHVzZXIgdG8gcXVpdC4gICovCiAKQEAgLTIxNTks OCArMjE1OSwxMSBAQAogZW1hY3Nfb3BlbiAoY29uc3QgY2hhciAqZmlsZSwgaW50IG9mbGFn cywgaW50IG1vZGUpCiB7CiAgIGludCBmZDsKKyAgb2ZsYWdzIHw9IE9fQ0xPRVhFQzsKICAg d2hpbGUgKChmZCA9IG9wZW4gKGZpbGUsIG9mbGFncywgbW9kZSkpIDwgMCAmJiBlcnJubyA9 PSBFSU5UUikKICAgICBRVUlUOworICBpZiAoISBPX0NMT0VYRUMgJiYgMCA8PSBmZCkKKyAg ICBmY250bCAoZmQsIEZfU0VURkQsIEZEX0NMT0VYRUMpOwogICByZXR1cm4gZmQ7CiB9CiAK QEAgLTIxNzAsMTAgKzIxNzMsMjkgQEAKIEZJTEUgKgogZW1hY3NfZm9wZW4gKGNoYXIgY29u c3QgKmZpbGUsIGNoYXIgY29uc3QgKm1vZGUpCiB7Ci0gIEZJTEUgKmZwOwotICB3aGlsZSAo ISAoZnAgPSBmb3BlbiAoZmlsZSwgbW9kZSkpICYmIGVycm5vID09IEVJTlRSKQotICAgIFFV SVQ7Ci0gIHJldHVybiBmcDsKKyAgaW50IGZkLCBvbW9kZSwgb2ZsYWdzOworICBpbnQgYmZs YWcgPSAwOworICBjaGFyIGNvbnN0ICptID0gbW9kZTsKKworICBzd2l0Y2ggKCptKyspCisg ICAgeworICAgIGNhc2UgJ3InOiBvbW9kZSA9IE9fUkRPTkxZOyBvZmxhZ3MgPSAwOyBicmVh azsKKyAgICBjYXNlICd3Jzogb21vZGUgPSBPX1dST05MWTsgb2ZsYWdzID0gT19DUkVBVCB8 IE9fVFJVTkM7IGJyZWFrOworICAgIGNhc2UgJ2EnOiBvbW9kZSA9IE9fV1JPTkxZOyBvZmxh Z3MgPSBPX0NSRUFUIHwgT19BUFBFTkQ7IGJyZWFrOworICAgIGRlZmF1bHQ6IGVtYWNzX2Fi b3J0ICgpOworICAgIH0KKworICB3aGlsZSAoKm0pCisgICAgc3dpdGNoICgqbSsrKQorICAg ICAgeworICAgICAgY2FzZSAnKyc6IG9tb2RlID0gT19SRFdSOyBicmVhazsKKyAgICAgIGNh c2UgJ2InOiBiZmxhZyA9IE9fQklOQVJZOyBicmVhazsKKyAgICAgIGNhc2UgJ3QnOiBiZmxh ZyA9IE9fVEVYVDsgYnJlYWs7CisgICAgICBkZWZhdWx0OiAvKiBJZ25vcmUuICAqLyBicmVh azsKKyAgICAgIH0KKworICBmZCA9IGVtYWNzX29wZW4gKGZpbGUsIG9tb2RlIHwgb2ZsYWdz IHwgYmZsYWcsIDA2NjYpOworICByZXR1cm4gZmQgPCAwID8gMCA6IGZkb3BlbiAoZmQsIG1v ZGUpOwogfQogCiBpbnQKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvdzMyLmMnCi0tLSBzcmMv dzMyLmMJMjAxMy0wNi0yMSAyMDoxMTo0NCArMDAwMAorKysgc3JjL3czMi5jCTIwMTMtMDct MDcgMDY6MDA6MDIgKzAwMDAKQEAgLTY3MTksMTAgKzY3MTksMTYgQEAKIH0KIAogLyogV2lu ZG93cyBkb2VzIG5vdCBoYXZlIGFuIGZjbnRsIGZ1bmN0aW9uLiAgUHJvdmlkZSBhbiBpbXBs ZW1lbnRhdGlvbgotICAgc29sZWx5IGZvciBtYWtpbmcgc29ja2V0cyBub24tYmxvY2tpbmcu ICAqLworICAgZ29vZCBlbm91Z2ggZm9yIEVtYWNzLiAgKi8KIGludAogZmNudGwgKGludCBz LCBpbnQgY21kLCBpbnQgb3B0aW9ucykKIHsKKyAgLyogSW4gdGhlIHczMiBFbWFjcyBwb3J0 LCBmY250bCAoZmQsIEZfRFVQRkRfQ0xPRVhFQywgZmQxKSBpcyBhbHdheXMKKyAgICAgaW52 b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgZmQxIGlzIGNsb3NlZCBhbmQgYWxsIGRlc2NyaXB0 b3JzIGxlc3MKKyAgICAgdGhhbiBmZDEgYXJlIG9wZW4sIHNvIHN5c19kdXAgaXMgYW4gYWRl cXVhdGUgaW1wbGVtZW50YXRpb24uICAqLworICBpZiAoY21kID09IEZfRFVQRkRfQ0xPRVhF QykKKyAgICByZXR1cm4gc3lzX2R1cCAocyk7CisKICAgaWYgKHdpbnNvY2tfbGliID09IE5V TEwpCiAgICAgewogICAgICAgZXJybm8gPSBFTkVURE9XTjsKQEAgLTY4NjQsMTMgKzY4NzAs MTQgQEAKICAgcmV0dXJuIHJjOwogfQogCi0vKiBVbml4IHBpcGUoKSBoYXMgb25seSBvbmUg YXJnICovCiBpbnQKLXN5c19waXBlIChpbnQgKiBwaGFuZGxlcykKK3BpcGUyIChpbnQgKiBw aGFuZGxlcywgaW50IHBpcGUyX2ZsYWdzKQogewogICBpbnQgcmM7CiAgIHVuc2lnbmVkIGZs YWdzOwogCisgIGVhc3NlcnQgKHBpcGUyX2ZsYWdzID09IE9fQ0xPRVhFQyk7CisKICAgLyog bWFrZSBwaXBlIGhhbmRsZXMgbm9uLWluaGVyaXRhYmxlOyB3aGVuIHdlIHNwYXduIGEgY2hp bGQsIHdlCiAgICAgIHJlcGxhY2UgdGhlIHJlbGV2YW50IGhhbmRsZSB3aXRoIGFuIGluaGVy aXRhYmxlIG9uZS4gIEFsc28gcHV0CiAgICAgIHBpcGVzIGludG8gYmluYXJ5IG1vZGU7IHdl IHdpbGwgZG8gdGV4dCBtb2RlIHRyYW5zbGF0aW9uIG91cnNlbHZlcwoKPT09IG1vZGlmaWVk IGZpbGUgJ3NyYy93MzIuaCcKLS0tIHNyYy93MzIuaAkyMDEzLTAzLTA1IDIyOjM1OjQxICsw MDAwCisrKyBzcmMvdzMyLmgJMjAxMy0wNy0wNyAwNjowMDoxOCArMDAwMApAQCAtMTg4LDcg KzE4OCw3IEBACiAKIGV4dGVybiBpbnQgZmNobW9kIChpbnQsIG1vZGVfdCk7CiBleHRlcm4g aW50IHN5c19yZW5hbWVfcmVwbGFjZSAoY2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICosIEJP T0wpOwotZXh0ZXJuIGludCBzeXNfcGlwZSAoaW50ICopOworZXh0ZXJuIGludCBwaXBlMiAo aW50ICosIGludCk7CiAKIGV4dGVybiB2b2lkIHNldF9wcm9jZXNzX2RpciAoY2hhciAqKTsK IGV4dGVybiBpbnQgc3lzX3NwYXdudmUgKGludCwgY2hhciAqLCBjaGFyICoqLCBjaGFyICoq KTsKCg== --------------000309000805020605030606-- From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 07 12:46:03 2013 Received: (at 14803) by debbugs.gnu.org; 7 Jul 2013 16:46:03 +0000 Received: from localhost ([127.0.0.1]:37521 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Uvs66-0007cI-Sj for submit@debbugs.gnu.org; Sun, 07 Jul 2013 12:46:03 -0400 Received: from mtaout20.012.net.il ([80.179.55.166]:56281) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Uvs62-0007bi-BW for 14803@debbugs.gnu.org; Sun, 07 Jul 2013 12:45:59 -0400 Received: from conversion-daemon.a-mtaout20.012.net.il by a-mtaout20.012.net.il (HyperSendmail v2007.08) id <0MPK00500RT5G300@a-mtaout20.012.net.il> for 14803@debbugs.gnu.org; Sun, 07 Jul 2013 19:45:33 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout20.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0MPK005GWRVXG900@a-mtaout20.012.net.il>; Sun, 07 Jul 2013 19:45:33 +0300 (IDT) Date: Sun, 07 Jul 2013 19:45:32 +0300 From: Eli Zaretskii Subject: Re: bug#14803: Setting close-on-exec flag consistently In-reply-to: <51D90BEA.20308@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <83txk6wc7n.fsf@gnu.org> References: <51D7DFAF.3030500@cs.ucla.edu> <83obafylf1.fsf@gnu.org> <51D8514F.8090307@cs.ucla.edu> <834nc7y3o2.fsf@gnu.org> <51D88F7E.3080502@cs.ucla.edu> <83zjtzw0ho.fsf@gnu.org> <51D90BEA.20308@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 14803 Cc: 14803@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Sat, 06 Jul 2013 23:34:18 -0700 > From: Paul Eggert > CC: 14803@debbugs.gnu.org > > On 07/06/2013 07:46 PM, Eli Zaretskii wrote: > > This should probably go into nt/mingw-cfg.site. > > Thanks, I didn't know about that file. Well, it was your idea ;-) > Also, it strikes me that since MinGW doesn't have pipe2, > there's no need to have "#define pipe2 sys_pipe2". Right. > Revised patch attached. Thanks, this looks OK to me. From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 07 14:01:27 2013 Received: (at 14803-done) by debbugs.gnu.org; 7 Jul 2013 18:01:27 +0000 Received: from localhost ([127.0.0.1]:37571 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvtH4-00033B-Oi for submit@debbugs.gnu.org; Sun, 07 Jul 2013 14:01:26 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:54750) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UvtH1-00032r-To for 14803-done@debbugs.gnu.org; Sun, 07 Jul 2013 14:01:24 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id F3646A60054; Sun, 7 Jul 2013 11:01:17 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Vc+8wa4CqIYq; Sun, 7 Jul 2013 11:01:17 -0700 (PDT) Received: from [192.168.1.9] (pool-71-108-49-126.lsanca.fios.verizon.net [71.108.49.126]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id AF0AEA6003A; Sun, 7 Jul 2013 11:01:17 -0700 (PDT) Message-ID: <51D9ACE9.8020902@cs.ucla.edu> Date: Sun, 07 Jul 2013 11:01:13 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: bug#14803: Setting close-on-exec flag consistently References: <51D7DFAF.3030500@cs.ucla.edu> <83obafylf1.fsf@gnu.org> <51D8514F.8090307@cs.ucla.edu> <834nc7y3o2.fsf@gnu.org> <51D88F7E.3080502@cs.ucla.edu> <83zjtzw0ho.fsf@gnu.org> <51D90BEA.20308@cs.ucla.edu> <83txk6wc7n.fsf@gnu.org> In-Reply-To: <83txk6wc7n.fsf@gnu.org> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -2.6 (--) X-Debbugs-Envelope-To: 14803-done Cc: 14803-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.6 (--) On 07/07/2013 09:45 AM, Eli Zaretskii wrote: > Thanks, this looks OK to me. OK, committed as trunk bzr 113315; marking this as done. From unknown Tue Aug 19 02:53:02 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Mon, 05 Aug 2013 11:24:03 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator