X-Recipient: archive-cygwin AT delorie DOT com X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BBBBD3858402 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=harkless.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1645720497; bh=eRqY6loqQaqnb6l8VWZ60FH2pQCM0X1vdE3PCsWFjbA=; h=Date:From:Subject:To:References:In-Reply-To:From:Subject:Reply-To; b=YbWZjGoBFDghUMS+ORTB/0bbQ6kGQ0i7oV1l4MUX2mZA+7eSXeLMT37wQp2TVu2g33Qi8HIqmukm4o/k9cjrY4X4SFuoBUA7zdtD+RtlLqncXGDUQQ4luLuroShh6VpXPv44MHSYx4Fl6Boygic1DnMds1viIV+hqkxrRGPJS47wCiZthUb3aFaiSU18eXyCM6UsfUS0X4uOdkthb+QZTwSWtYX27So7wbZQWPfyGqrt7+kkgt7WOWqqja9nxFq8ZsaCjOUOyPfeht66RQ2F0ivaAFg85zL/lmkpkshZZNdLydQ9Pe8Mljlvg1+r69VztFX+MUOkzli+GT75aOLvvg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1645720497; bh=1EGnaPFZ2L/7qbvefSZPG95RSdZ0ynbzZbcrVBMQijx=; h=X-Sonic-MF:Date:From:Subject:To:From:Subject; b=GYCuvmQX6bxfCNrc/uN5ixEicsKuZ1/1vdLjCdyTPOe5vv381Ayit8Tot8czTr0qYFGFz4SZE7YhxCK5woxNW26VFQ/Qpw2BhET0M1cUNhaFLc584sgCpVQRTsqPpE2q431XloXpdWF2lhnnZ+OFEGD7kCLYEF1OweEgl33NydEt5ek11SrfUH1gATRbRMKXfssfDdteoGfi6r1E9UrG26603+kn6J4eu2NBgFEnvl19ErqTnIwX1T+VYfHpbuhvAed+hGd2YVIh12zE7CGZjGI41UP5fzcZ8yjceIPnfCcIPgCn8kzheFpZcIQ3NQwR2IUS4NJjAdFvdd0fFQ0OCg== X-YMail-OSG: u4k.h4kVM1nGBoRdztUiFTilyp21iE43NsED7XYxx0arweWeJX9nlN6I8tZE498 AneHEWbkVHyL320PWQkJnZ6jLeK_aOYlq4pBkojNO6H_5lBm8maHyO8n9ak1BZZlJPThhA6zlsmE rAtJ03yUHlEmG7A0XfCU0ETnUhub_a.n6DYNAPnQdi3wsJhnho3lqwZeO_A7u8.hoP0tLvhLM24s _pxMgP8NSO0O8ctGDgJ7UPiiQ_rP_Cxe8diKVMQhnotj1wCVFaQlyykGKxWLMeI_QFI3ghb0Zr5H HAyLV3PeK9oR.5mii8vyGdjGogA5_nASqZ5MIclYQzijqeWaOhCXUrCPPn4ZeOb2qoEyLqXkVTpf SZRSO9sA2.uDUy8BCtljeS1NzCYjdFy3bl6CbEVLkTB2Uh4fmXqv6F6tkeE7Xj85KpV5MnlBsH_A JUEk7OkAm2zfROG3pjPLhvtwXcrKo2_kv_fyRf4sJnAdIv1u0AeDj0jh3KEYcMW8wQdHGnwaiiBc GwGdkTpPI5EHabswYCpo2uR6TIn7cPFeF4dz28OzkKdjEYWoJg8IVIPPofoTnV.sF_Kg34WN58wk KuAknwY3zTgRQ6_g7Za4BLumsXnR6vEIlyDHBckccTSx8YkRefF3kHogZuoi.flgGIbxUQqIyr80 QriWGbXMF_eWk.CKR2ToRIJ2qlvqL7s61stuTH.S5b2SquuZO_Z09t4RSW.ga..NW0hbHYrkJ7IJ y9qZbJELyulMOBz553NLpXrcVssAJ7nFt9SDgJQD8V3U.3.0mlnENKaHOBcDlrFnyatmDF0RH2Jn 3BQSD.4qvqUpw3GfRFi5.AEZYVV._lpa4bKzOA6oo2oM4Qmf8kBGqNN0JwrCFm5s.YFhrcANkdaC iSpATzKQ8mVOdCLjMDoDSOEqwFD4oKchIx_TpSoHpbWRZ6ntLB9h4kHiLB7.yfFMFDIbAT.zaxMd Umg1Tl9Z6RgenkMF51mmATGW5gy9JAmyx1157YzTuuJYSDJEX8hEEuSQi_NtsC1Zi1bmN04qs1YI h7X4hNv2UF2qNvC0blXB3FCtntNmsLEfZM0mQNqUX8vfucaRN3KjgZ0BOqLTxjs5f88xiIDURNDg rWD2v_fgJ5Iv7BmewMMNtOtN6klwgAlpLEbE0uvg0QToJzOC_JCnqkDFdjiHQTpuvJJBWBqYvTnu Kkp78l5uUQDP1fapI0FMRQRhYiM_GOaF0GKzbvhWJEqq5aIOe.pC9a3F0aG5uFpKuShTUxU18ubW UWjvnhpkNy9V89xRzIL.12DvA.KO.eDMMuJtB_VYxrmCZ_dQrSWj1ufDNXmd1kxFSEHk3G_NpVqm wV.UFis9X4NjSolC3lDZXbOlflqbCw.R_ToNkUtItQ30UZ26q7v0HPxItODmYqYT5js0ttfwklTQ HYol0arSUoaJ5Vc165swcG4hENHXkogdIpEWLghdLWeYWVa3gxoEh14isfKN5r.m9dv1u3VH_YrI G3GQoJlf_ZC9i089Thwho9cXM4E6dUfEt3xPspFkO0CmkHeeDnygFtEYck2SEseBeOQm7PC6Eioq 4ThvhtGTr1Xe1RfqA7qaoYNBoGnOzuRdpxL9Ay_gxXlpm9Zv4xE1pvDDUVDhd0pIzl8p5.hviHzH byqsLJKQLZ6BoSj3zlr8bwzce2qSc0GfKCMk0kBtvRPI6ojW_L44ngDsQNDCuZ496ThE7VixPjGw ECfuBdbcafh6F3KKGFxVkCF29hhrGC_KmsP5WtH96aoPfFT0Vf_re_qMzgyOaMjSMGAbeAWfLY0E WPKSQIpDyM3xOpAvctPx0qWI5siibucyIGEE5MLgcFm5F07Mx0xvBpf9NNqSyqKVweM56ilVqumJ 1_Z0XlLU2CSnU9aNRhP_U_BdME2GyBKelc2NkrwnAf5zmL1LuaL9_pnbL_u79ynqBhWyam8DAQxs _0_01O_4kFpcCdJbEutsW_wQlrhAGbJVrdIrtT6uIQUE74lHf23_OKz.XVil9GKwejTVRCNo.Z.n xdsKFOceO2MtEQN99XGzCxfijzcj.c_L3dzc1RN955LDxkXnYfWBurg54kwa1fVDaPgto4Y1hbkF Omv59EmW9Dam7tpW41bBh1q123E9WhYBj6eXmUZ6flAgZgjsfi0QXya9d.4d2yfsm1XFCiEY1yuv dypijteXamqKTo32AsttLNWkBxvXNYNyvsvqvoZ4_HKFJ3qEPvMzFcE2Y.HnGhviN5qEANAUjuy4 mc72KZWGQQVGlKqEzKkcr2QH88HqDoXm_ X-Sonic-MF: Content-Type: multipart/mixed; boundary="------------Rc0dG5cqRTsWqdOiM0eF20FW" Message-ID: <88b29ca4-313f-2318-c2ed-b55f86aafac0@harkless.org> Date: Thu, 24 Feb 2022 08:32:55 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.6.0 From: Dan Harkless Subject: Patches to findutils 4.9.0-1's updatedb to do locking, allow filenames with spaces & progress monitoring, exclude /dev on Cygwin, etc. To: bug-findutils AT gnu DOT org, cygwin AT cygwin DOT com References: <986736274 DOT 144968 DOT 1630167325057 DOT ref AT mail DOT yahoo DOT com> <986736274 DOT 144968 DOT 1630167325057 AT mail DOT yahoo DOT com> <3457cee1-18b5-2916-adee-afdfaf9769ea AT t-online DOT de> <525a832a-78fd-5a32-e195-5747120da922 AT harkless DOT org> Content-Language: en-US In-Reply-To: X-Mailer: WebService/1.1.19797 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com Sender: "Cygwin" This is a multi-part message in MIME format. --------------Rc0dG5cqRTsWqdOiM0eF20FW Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Howdy.=C2=A0 I posted last August to the Cygwin list about some problems = I=20 was having with the updatedb script, including that it was taking more=20 than 24 hours to complete, and then colliding with the next cron run,=20 and that I had no way to monitor progress (short of using Sysinternals=20 Process Explorer's very awkward GUI for this). I'm finally getting around to sending in a patch (to bug-findutils and=20 the Cygwin list, to which I'm currently subscribed) to address these=20 issues, along with some others, a few of which represent small changes=20 in behavior: 1. Changed the direct 'find' -> 'sort' pipelining of the file list to=20 instead go to a temporary file first (and then a second one, when=20 sorting).=C2=A0 This allows monitoring of progress with 'tail -f'. 2. By default, these .txt and .txt.sort files get deleted on exit (or=20 fatal signal), but I've added a --keeptext option which can be set to=20 'sort' or 'both' to preserve them, either for debugging purposes, or for=20 running special-purpose text-munging/matching scripts on. 3. The script now does locking, outputting its PID to (by default)=20 /var/locatedb.running_updatedb_pid (I was first just going to just call=20 it locatedb.lock, but I decided to be more user-friendly).=C2=A0 If that = file=20 exists when another instance starts to run, the script will abort with=20 an error. 4. Improved signal-handling, catching more fatal signals.=C2=A0 I also=20 changed SIGHUP to not be treated as fatal, in line with most programs. 5. /dev was not being excluded by default on Cygwin, since there we=20 can't recognize it by filesystem type.=C2=A0 This was causing some=20 time-consuming looping problems for me, with falsely self-nested paths. 6. I tried a whole bunch of different quoting variations, but I couldn't=20 get --prunepaths to work with paths containing spaces (which are of=20 course very common on Windows).=C2=A0 The PRUNEREGEX would always end up=20 incorrectly splitting on the spaces.=C2=A0 I tried to improve the regexp = to=20 treat '\ ' differently than ' ', but I couldn't get it to work (I'm more=20 expert with Perl regexps than POSIX ones).=C2=A0 In the end, I used a=20 not-TOO-ugly kludge: in the first sed -e expression, I change '\ ' to=20 '///', and then in the last one I change '///' back to ' ' (the=20 backslash isn't needed in the regexp).=C2=A0 Of course '///' should never= =20 appear in a path; I didn't use simply '//' because it's a relatively=20 common artifact of path concatenation. 7. make_tempdir() wasn't being used in the current version of findutils,=20 so I removed it. 8. Previously, the only protection the script did of the prior version=20 of the database was to write to locatedb.n, and then overwrite locatedb=20 with it at the end.=C2=A0 This was a problem for me when trying to debug = the=20 updatedb issues I was having, since, for instance, if you killed the=20 'find', it'd still overwrite the old DB with a partial file list.=C2=A0 T= he=20 script now saves the previous version of the DB as locatedb.prev.=C2=A0 T= his=20 is also quite handy when a file you expect to be able to find goes=20 missing, in case it disappeared since the last updatedb run.=C2=A0 (I did= n't=20 address the underlying problem of the script not aborting if 'find' did;=20 the bizarre 4-way 'find' construction with file redirection from the=20 middle of the if {} is unlike anything I've seen in a shell script before= .) 9. I also made some minor changes, including not outputting the full=20 script path on errors, standardizing error formatting, putting quotes=20 around arguments in errors, and various cleanups and comment improvements= . 10. The most significant of the minor changes I made was standardizing=20 the indentation, which was all over the place, making it difficult to=20 understand some of the code while debugging. Because of that, in=20 addition to the attached 'diff -u' patch, here's the output of 'diff=20 -uw' to make it easier to review my changes.=C2=A0 My Linux systems use a= =20 different version of locate, thus I didn't test there, but I think I=20 remained platform-agnostic (and also didn't write any code that wouldn't=20 work under Bourne/POSIX shell).=C2=A0 BTW, I assign my copyright to GNU (= I=20 filled out the official form some years ago when I was co-maintainer of=20 Wget), and if you feel my self-credit in the author list comment is=20 unwarranted, of course feel free to get rid of it. Here's that 'diff -uw' output (again, 'diff -u' patch attached): --- updatedb.orig=C2=A0=C2=A0=C2=A0 2022-02-05 09:37:55.000000000 -0800 +++ updatedb=C2=A0=C2=A0=C2=A0 2022-02-24 03:27:10.749175300 -0800 @@ -15,13 +15,20 @@ =C2=A0# You should have received a copy of the GNU General Public Licens= e =C2=A0# along with this program.=C2=A0 If not, see . -# csh original by James Woods; sh conversion by David MacKenzie. +# csh original by James Woods; sh conversion by David MacKenzie; +# cleanup and enhancements by Dan Harkless. =C2=A0#exec 2> /tmp/updatedb-trace.txt =C2=A0#set -x +ourname=3D`basename $0`=C2=A0 # don't verbosely report path to the scrip= t in=20 errors + +stderr() { +=C2=A0=C2=A0=C2=A0 echo "$ourname: $*" >&2 +} + =C2=A0version=3D' -updatedb (GNU findutils) 4.9.0 +updatedb (GNU findutils) 4.9.0+patches =C2=A0Copyright (C) 1994-2022 Free Software Foundation, Inc. =C2=A0License GPLv3+: GNU GPL version 3 or later=20 =C2=A0This is free software: you are free to change and redistribute it. @@ -47,11 +54,12 @@ =C2=A0# (correctly) points to https://www.gnu.org/software/findutils/ in= stead =C2=A0# of the bug reporting page. =C2=A0usage=3D"\ -Usage: $0 [--findoptions=3D'-option1 -option2...'] +Usage: $ourname [--findoptions=3D'-option1 -option2...'] =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--localpaths=3D'dir1 dir2...= '] [--netpaths=3D'dir1 dir2...'] =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--prunepaths=3D'dir1 dir2...= '] [--prunefs=3D'fs1 fs2...'] =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--output=3Ddbfile] [--netuse= r=3Duser] [--localuser=3Duser] -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--dbformat] [--version] [--help] +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--dbformat=3D(LOCATE02|slocate)] [= --keeptxt=3D(sort|both)] +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--version] [--help] =C2=A0Please see also the documentation at=20 https://www.gnu.org/software/findutils/. =C2=A0Report (and track progress on fixing) bugs in the updatedb @@ -61,8 +69,7 @@ =C2=A0" =C2=A0changeto=3D/ -for arg -do +for arg; do =C2=A0=C2=A0 # If we are unable to fork, the back-tick operator will =C2=A0=C2=A0 # fail (and the shell will emit an error message).=C2=A0 Wh= en =C2=A0=C2=A0 # this happens, we exit with error value 71 (EX_OSERR). @@ -80,10 +87,11 @@ =C2=A0=C2=A0=C2=A0=C2=A0 --localuser) LOCALUSER=3D"$val" ;; =C2=A0=C2=A0=C2=A0=C2=A0 --changecwd)=C2=A0 changeto=3D"$val" ;; =C2=A0=C2=A0=C2=A0=C2=A0 --dbformat)=C2=A0=C2=A0 dbformat=3D"$val" ;; -=C2=A0=C2=A0=C2=A0 --version) fail=3D0; echo "$version" || fail=3D1; exi= t $fail ;; -=C2=A0=C2=A0=C2=A0 --help)=C2=A0=C2=A0=C2=A0 fail=3D0; echo "$usage"=C2=A0= =C2=A0 || fail=3D1; exit $fail ;; -=C2=A0=C2=A0=C2=A0 *) echo "updatedb: invalid option $opt -Try '$0 --help' for more information." >&2 +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 --keeptxt)=C2=A0=C2=A0=C2=A0=C2= =A0 keeptxt=3D"$val" ;; +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 --version) fail=3D0; echo "$v= ersion" >&2 || fail=3D1; exit $fail ;; +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 --help)=C2=A0=C2=A0=C2=A0 fai= l=3D0; echo "$usage"=C2=A0=C2=A0 >&2 || fail=3D1; exit $fail ;; +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 *) stderr 'Invalid option "'$= opt'".' +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo "=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Try '$ourname --help' fo= r more information." >&2 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit 1 ;; =C2=A0=C2=A0 esac =C2=A0done @@ -100,13 +108,87 @@ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ;; =C2=A0=C2=A0=C2=A0=C2=A0 *) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # The "old" database fo= rmat is no longer supported. -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo "Unsupported locate data= base format ${dbformat}: Supported=20 formats are:" >&2 -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo "LOCATE02, slocate" >&2 +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stderr 'Unsupported locate da= tabase format "'$dbformat'".' +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo '=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Supported formats are "LOCATE02" or "sloca= te".' >&2 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit 1 =C2=A0esac +# The database file to build (overridable via commandline or=20 environment var.). +: ${LOCATE_DB=3D/var/locatedb} +LOCATE_DB_DIR=3D`dirname $LOCATE_DB` + +# Prevent overlapping with ourselves.=C2=A0 Large filesystem collections= can=20 easily +# take over 24 hours to complete, even on pretty speedy systems / hard=20 drives. +# Ideally this would go in /var/run on systems that have that, but this=20 is OK. +lockfile=3D$LOCATE_DB.running_updatedb_pid + +if [ -e $lockfile ]; then +=C2=A0=C2=A0=C2=A0 stderr "Aborting since prior run's lockfile still exi= sts:" +=C2=A0=C2=A0=C2=A0 ls -lF $lockfile >&2 +=C2=A0=C2=A0=C2=A0 exit 1 +fi + +keeptxt=3Dneither +reported_lockfile_failure=3D0 + +cleanup_on_exit_or_signal() { +=C2=A0=C2=A0=C2=A0 rm -f $LOCATE_DB.n + +=C2=A0=C2=A0=C2=A0 if [ $reported_lockfile_failure -ne 1 ]; then +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # We didn't already have a fa= ilure trying to initially create the +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # lockfile, so we can assume = the temporary .txt files are ours=20 (not +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # saved on a previous run wit= h --keeptxt), and it's safe to +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # (optionally) delete them. +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if [ x"$keeptxt" =3D x"sort" = ]; then +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 rm -f= $LOCATE_DB.txt +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 elif [ x"$keeptxt" !=3D x"bot= h" ]; then +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # TBD= : Report undefined values of --keeptxt? +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 rm -f= $LOCATE_DB.txt $LOCATE_DB.txt.sort +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fi +=C2=A0=C2=A0=C2=A0 fi + +=C2=A0=C2=A0=C2=A0 if ! rm -f $lockfile; then +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 report_lockfile_failure "remo= ve" +=C2=A0=C2=A0=C2=A0 fi +} + +report_lockfile_failure() { +=C2=A0=C2=A0=C2=A0 if [ $reported_lockfile_failure -ne 1 ]; then +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo -n "$ourname: Failed to = $1 lockfile $lockfile" >&2 + +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if [ -e $lockfile ]; then +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo = ":" >&2 +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ls -l= F $lockfile >&2 +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 else +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo = " in dir:" >&2 +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ls -d= lF $LOCATE_DB_DIR >&2 +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fi + +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 reported_lockfile_failure=3D1 +=C2=A0=C2=A0=C2=A0 fi +} + +# Now that we've checked for a previous lockfile above, it's safe to=20 install +# cleanup signal handler.=C2=A0 We'll try to catch all potentially fatal= =20 signals, +# along with exit.=C2=A0 From CentOS 7's /usr/include/asm/signal.h: +#[shell exit=3D0] SIGHUP=3D1=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 S= IGINT=3D2=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGQUIT=3D3 SIGILL=3D= 4 +#SIGTRAP=3D5=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGABRT=3D6=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 SIGIOT=3D6=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 S= IGBUS=3D7 SIGFPE=3D8 +#SIGKILL=3D9=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGUSR1=3D10=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 SIGSEGV=3D11=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGUSR2=3D12 SIGP= IPE=3D13 +#SIGALRM=3D14=C2=A0=C2=A0=C2=A0=C2=A0 SIGTERM=3D15=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 SIGSTKFLT=3D16=C2=A0=C2=A0=C2=A0 SIGCHLD=3D17 SIGCONT=3D18 +#SIGSTOP=3D19=C2=A0=C2=A0=C2=A0=C2=A0 SIGTSTP=3D20=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 SIGTTIN=3D21=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGTTOU=3D22 SIGURG=3D2= 3 +#SIGXCPU=3D24=C2=A0=C2=A0=C2=A0=C2=A0 SIGXFSZ=3D25=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 SIGVTALRM=3D26=C2=A0=C2=A0=C2=A0 SIGPROF=3D27 SIGWINCH=3D28 +#SIGIO=3D29=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGPOLL=3DSIGIO=C2=A0=C2= =A0 SIGLOST=3D29=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGPWR=3D30 SIGSYS=3D31 +trap cleanup_on_exit_or_signal 0 2 3 4 6 7 8 9 11 15 16 30 31 + +# Now that we've installed the signal handler, it's safe to create=20 lockfile. +if ! echo $$ > $lockfile; then +=C2=A0=C2=A0=C2=A0 report_lockfile_failure "write to" +=C2=A0=C2=A0=C2=A0 exit 1 +fi -if true +# Don't use NUL as a path separator, now that we write to a temporary=20 text file +# (may want to make that controllable with a commandline option in the=20 future). +if false =C2=A0then =C2=A0=C2=A0=C2=A0=C2=A0 sort=3D"/usr/bin/sort -z" =C2=A0=C2=A0=C2=A0=C2=A0 print_option=3D"-print0" @@ -123,7 +205,7 @@ =C2=A0=C2=A0=C2=A0=C2=A0 id | cut -d'(' -f 1 | cut -d'=3D' -f2 =C2=A0} -# figure out if su supports the -s option +# Figure out if su supports the -s option. =C2=A0select_shell() { =C2=A0=C2=A0=C2=A0=C2=A0 if su "$1" -s $SHELL -c false < /dev/null=C2=A0= ; then =C2=A0=C2=A0=C2=A0=C2=A0 # No. @@ -140,8 +222,7 @@ =C2=A0=C2=A0=C2=A0=C2=A0 fi =C2=A0} - -# You can set these in the environment, or use command-line options, +# You can set these in the environment, or use command-line options =C2=A0# to override their defaults: =C2=A0# Any global options for find? @@ -156,10 +237,13 @@ =C2=A0# Network (NFS, AFS, RFS, etc.) directories to put in the database= . =C2=A0: ${NETPATHS=3D} -# Directories to not put in the database, which would otherwise be. +# Default list of directories (overridable with options) to be omitted=20 from the +# database.=C2=A0 Note that /dev and /proc need to be specified=20 "redundantly" here, +# since on Cygwin, they can't be detected based on filesystem type. =C2=A0: ${PRUNEPATHS=3D" =C2=A0/afs =C2=A0/amd +/dev =C2=A0/proc =C2=A0/sfs =C2=A0/tmp @@ -167,24 +251,26 @@ =C2=A0/var/tmp =C2=A0"} -# Trailing slashes result in regex items that are never matched, which -# is not what the user will expect.=C2=A0=C2=A0 Therefore we now reject = such -# constructs. +# Trailing slashes result in regex items that are never matched, which i= s +# not what the user will expect.=C2=A0 Therefore we now reject such cons= tructs. +# TBD: Just remove any trailing slashes instead? =C2=A0for p in $PRUNEPATHS; do =C2=A0=C2=A0=C2=A0=C2=A0 case "$p" in -=C2=A0=C2=A0=C2=A0 /*/)=C2=A0=C2=A0 echo "$0: $p: pruned paths should no= t contain trailing=20 slashes" >&2 +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /*/) stderr "Prune path '$p' = has a trailing slash, which isn't=20 allowed." =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit 1 =C2=A0=C2=A0=C2=A0=C2=A0 esac =C2=A0done -# The same, in the form of a regex that find can use. +# Convert $PRUNEPATHS to a regex that find can use.=C2=A0 Note that to a= llow=20 paths +# containing spaces, the first -e changes '\ ' to '///' ('//' isn't=20 used since +# it's a semi-common artifact of path concatenation), and then the last = -e +# changes '///' back to ' ' (it doesn't need backslashing in the regex). =C2=A0test -z "$PRUNEREGEX" && -=C2=A0 PRUNEREGEX=3D`echo $PRUNEPATHS|sed -e 's,^,\\\(^,' -e 's,=20 ,$\\\)\\\|\\\(^,g' -e 's,$,$\\\),'` +=C2=A0 PRUNEREGEX=3D`echo $PRUNEPATHS | sed -e 's,\\\ ,///,g' -e 's,^,\\= \(^,'=20 -e 's, ,$\\\)\\\|\\\(^,g' -e 's,$,$\\\),' -e 's,///, ,g'` -# The database file to build. -: ${LOCATE_DB=3D/var/locatedb} - -# Directory to hold intermediate files. +# Directory for sort (& possibly other executables) to hold=20 intermediate files. +# The script's own temporary files go in the same directory as the=20 database, +# since they aren't always temporary (--keeptxt or left-behind lockfile)= . =C2=A0if test -z "$TMPDIR"; then =C2=A0=C2=A0 if test -d /var/tmp; then =C2=A0=C2=A0=C2=A0=C2=A0 : ${TMPDIR=3D/var/tmp} @@ -217,42 +303,19 @@ =C2=A0: ${find:=3D${BINDIR}/find} =C2=A0: ${frcode:=3D${LIBEXECDIR}/frcode} -make_tempdir () { -=C2=A0=C2=A0=C2=A0 # This implementation is adapted from the GNU Autocon= f manual. -=C2=A0=C2=A0=C2=A0 { -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 tmp=3D` -=C2=A0=C2=A0=C2=A0 (umask 077 && mktemp -d "$TMPDIR/updatedbXXXXXX") 2>/= dev/null -=C2=A0=C2=A0=C2=A0 ` && -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 test -n "$tmp" && test -d "$t= mp" -=C2=A0=C2=A0=C2=A0 } || { -=C2=A0=C2=A0=C2=A0 # This method is less secure than mktemp -d, but it's= a fallback. -=C2=A0=C2=A0=C2=A0 # -=C2=A0=C2=A0=C2=A0 # We use $$ as well as $RANDOM since $RANDOM may not = be available. -=C2=A0=C2=A0=C2=A0 # We also add a time-dependent suffix.=C2=A0 This is = actually somewhat -=C2=A0=C2=A0=C2=A0 # predictable, but then so is $$.=C2=A0 POSIX does no= t require date to -=C2=A0=C2=A0=C2=A0 # support +%N. -=C2=A0=C2=A0=C2=A0 ts=3D`date +%N%S || date +%S 2>/dev/null` -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 tmp=3D"$TMPDIR"/updatedb"$$"-= "${RANDOM:-}${ts}" -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (umask 077 && mkdir "$tmp") -=C2=A0=C2=A0=C2=A0 } -=C2=A0=C2=A0=C2=A0 echo "$tmp" -} - =C2=A0checkbinary () { =C2=A0=C2=A0=C2=A0=C2=A0 if test -x "$1" ; then =C2=A0=C2=A0=C2=A0=C2=A0 : ok =C2=A0=C2=A0=C2=A0=C2=A0 else -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 eval echo "updatedb needs to be able to e= xecute $1, but cannot." >&2 +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stderr "We need to be able to= execute $1, but cannot." =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit 1 =C2=A0=C2=A0=C2=A0=C2=A0 fi =C2=A0} -for binary in $find $frcode -do +for binary in $find $frcode; do =C2=A0=C2=A0 checkbinary $binary =C2=A0done - =C2=A0: ${PRUNEFS=3D" =C2=A09P =C2=A0NFS @@ -283,10 +346,20 @@ =C2=A0fi =C2=A0# Make and code the file list. -# Sort case insensitively for users' convenience. -rm -f $LOCATE_DB.n -trap 'rm -f $LOCATE_DB.n; exit' HUP TERM +if ! echo test > $LOCATE_DB.n; then +=C2=A0=C2=A0=C2=A0 stderr "Failed to write to temporary database file $L= OCATE_DB.n." +=C2=A0=C2=A0=C2=A0 exit 1 +fi + +# We now write to a temporary text file instead of going direct over a=20 pipe, as +# the latter makes it very difficult to monitor progress and to debug=20 failures. +if ! echo test > $LOCATE_DB.txt; then +=C2=A0=C2=A0=C2=A0 stderr "Failed to write to text list of files $LOCATE= _DB.txt." +=C2=A0=C2=A0=C2=A0 exit 1 +fi + +failed_to_generate_locate_db=3D0 =C2=A0if { =C2=A0cd "$changeto" @@ -314,29 +387,43 @@ =C2=A0=C2=A0=C2=A0=C2=A0 exit $? =C2=A0=C2=A0 else =C2=A0=C2=A0=C2=A0=C2=A0 # : A4 -=C2=A0=C2=A0=C2=A0 $find $NETPATHS $FINDOPTIONS \( -type d -regex "$PRUN= EREGEX" -prune=20 \) -o $print_option || +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 $find= $NETPATHS $FINDOPTIONS \( -type d -regex "$PRUNEREGEX" \ +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 -prune \) -o $print_option || =C2=A0=C2=A0=C2=A0=C2=A0 exit $? =C2=A0=C2=A0 fi =C2=A0fi -} | $sort | $frcode $frcode_options > $LOCATE_DB.n +} > $LOCATE_DB.txt =C2=A0then -=C2=A0=C2=A0=C2=A0 : OK so far -=C2=A0=C2=A0=C2=A0 true +=C2=A0=C2=A0=C2=A0 # OK, find completed.=C2=A0 Going through all the fil= es is very=20 time-consuming +=C2=A0=C2=A0=C2=A0 # on some systems, so (try to) save a copy of the pre= vious DB in case +=C2=A0=C2=A0=C2=A0 # something goes wrong at this point. +=C2=A0=C2=A0=C2=A0 cp -fp $LOCATE_DB $LOCATE_DB.prev + +=C2=A0=C2=A0=C2=A0 # Now sort results, case-insensitively for user conve= nience, then=20 generate +=C2=A0=C2=A0=C2=A0 # the new DB. +=C2=A0=C2=A0=C2=A0 if ! $sort -f $LOCATE_DB.txt > $LOCATE_DB.txt.sort; t= hen +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 failed_return_value=3D$? +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 failed_to_generate_locate_db=3D= 1 +=C2=A0=C2=A0=C2=A0 elif ! $frcode $frcode_options < $LOCATE_DB.txt.sort = >=20 $LOCATE_DB.n; then +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 failed_return_value=3D$? +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 failed_to_generate_locate_db=3D= 1 +=C2=A0=C2=A0=C2=A0 fi =C2=A0else -=C2=A0=C2=A0=C2=A0 rv=3D$? -=C2=A0=C2=A0=C2=A0 echo "Failed to generate $LOCATE_DB.n" >&2 +=C2=A0=C2=A0=C2=A0 failed_to_generate_locate_db=3D1 +fi + +if [ $failed_to_generate_locate_db -eq 1 ]; then +=C2=A0=C2=A0=C2=A0 stderr "Failed to generate new database temp file $LO= CATE_DB.n." =C2=A0=C2=A0=C2=A0=C2=A0 rm -f $LOCATE_DB.n -=C2=A0=C2=A0=C2=A0 exit $rv +=C2=A0=C2=A0=C2=A0 exit $failed_return_value =C2=A0fi -# To avoid breaking locate while this script is running, put the +# To avoid breaking locate while this script is running, we put the =C2=A0# results in a temp file, then rename it atomically. =C2=A0if test -s $LOCATE_DB.n; then -=C2=A0 chmod 644 ${LOCATE_DB}.n -=C2=A0 mv ${LOCATE_DB}.n $LOCATE_DB +=C2=A0=C2=A0=C2=A0 chmod 644 $LOCATE_DB.n +=C2=A0=C2=A0=C2=A0 mv -f $LOCATE_DB.n $LOCATE_DB =C2=A0else -=C2=A0 echo "updatedb: new database would be empty" >&2 +=C2=A0=C2=A0=C2=A0 stderr "New database would be empty, so not creating = it." =C2=A0=C2=A0 rm -f $LOCATE_DB.n =C2=A0fi - -exit 0 Dan Harkless http://harkless.org/dan/ --------------Rc0dG5cqRTsWqdOiM0eF20FW Content-Type: text/plain; charset=UTF-8; name="updatedb.patch" Content-Disposition: attachment; filename="updatedb.patch" Content-Transfer-Encoding: base64 LS0tIHVwZGF0ZWRiLm9yaWcJMjAyMi0wMi0wNSAwOTozNzo1NS4wMDAwMDAwMDAgLTA4MDAK KysrIHVwZGF0ZWRiCTIwMjItMDItMjQgMDM6Mjc6MTAuNzQ5MTc1MzAwIC0wODAwCkBAIC0x NSwxMyArMTUsMjAgQEAKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICMgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCi0j IGNzaCBvcmlnaW5hbCBieSBKYW1lcyBXb29kczsgc2ggY29udmVyc2lvbiBieSBEYXZpZCBN YWNLZW56aWUuCisjIGNzaCBvcmlnaW5hbCBieSBKYW1lcyBXb29kczsgc2ggY29udmVyc2lv biBieSBEYXZpZCBNYWNLZW56aWU7CisjIGNsZWFudXAgYW5kIGVuaGFuY2VtZW50cyBieSBE YW4gSGFya2xlc3MuCiAKICNleGVjIDI+IC90bXAvdXBkYXRlZGItdHJhY2UudHh0CiAjc2V0 IC14CiAKK291cm5hbWU9YGJhc2VuYW1lICQwYCAgIyBkb24ndCB2ZXJib3NlbHkgcmVwb3J0 IHBhdGggdG8gdGhlIHNjcmlwdCBpbiBlcnJvcnMKKworc3RkZXJyKCkgeworICAgIGVjaG8g IiRvdXJuYW1lOiAkKiIgPiYyCit9CisKIHZlcnNpb249JwotdXBkYXRlZGIgKEdOVSBmaW5k dXRpbHMpIDQuOS4wCit1cGRhdGVkYiAoR05VIGZpbmR1dGlscykgNC45LjArcGF0Y2hlcwog Q29weXJpZ2h0IChDKSAxOTk0LTIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CiBMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHBzOi8v Z251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD4KIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91 IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgpAQCAtNDcsMTEgKzU0 LDEyIEBACiAjIChjb3JyZWN0bHkpIHBvaW50cyB0byBodHRwczovL3d3dy5nbnUub3JnL3Nv ZnR3YXJlL2ZpbmR1dGlscy8gaW5zdGVhZAogIyBvZiB0aGUgYnVnIHJlcG9ydGluZyBwYWdl LgogdXNhZ2U9IlwKLVVzYWdlOiAkMCBbLS1maW5kb3B0aW9ucz0nLW9wdGlvbjEgLW9wdGlv bjIuLi4nXQorVXNhZ2U6ICRvdXJuYW1lIFstLWZpbmRvcHRpb25zPSctb3B0aW9uMSAtb3B0 aW9uMi4uLiddCiAgICAgICAgWy0tbG9jYWxwYXRocz0nZGlyMSBkaXIyLi4uJ10gWy0tbmV0 cGF0aHM9J2RpcjEgZGlyMi4uLiddCiAgICAgICAgWy0tcHJ1bmVwYXRocz0nZGlyMSBkaXIy Li4uJ10gWy0tcHJ1bmVmcz0nZnMxIGZzMi4uLiddCiAgICAgICAgWy0tb3V0cHV0PWRiZmls ZV0gWy0tbmV0dXNlcj11c2VyXSBbLS1sb2NhbHVzZXI9dXNlcl0KLSAgICAgICBbLS1kYmZv cm1hdF0gWy0tdmVyc2lvbl0gWy0taGVscF0KKyAgICAgICBbLS1kYmZvcm1hdD0oTE9DQVRF MDJ8c2xvY2F0ZSldIFstLWtlZXB0eHQ9KHNvcnR8Ym90aCldIAorICAgICAgIFstLXZlcnNp b25dIFstLWhlbHBdCiAKIFBsZWFzZSBzZWUgYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBhdCBo dHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2ZpbmR1dGlscy8uCiBSZXBvcnQgKGFuZCB0 cmFjayBwcm9ncmVzcyBvbiBmaXhpbmcpIGJ1Z3MgaW4gdGhlIHVwZGF0ZWRiCkBAIC02MSwz MSArNjksMzEgQEAKICIKIGNoYW5nZXRvPS8KIAotZm9yIGFyZwotZG8KLSAgIyBJZiB3ZSBh cmUgdW5hYmxlIHRvIGZvcmssIHRoZSBiYWNrLXRpY2sgb3BlcmF0b3Igd2lsbAotICAjIGZh aWwgKGFuZCB0aGUgc2hlbGwgd2lsbCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UpLiAgV2hlbgot ICAjIHRoaXMgaGFwcGVucywgd2UgZXhpdCB3aXRoIGVycm9yIHZhbHVlIDcxIChFWF9PU0VS UikuCi0gICMgQWx0ZXJuYXRpdmUgY2FuZGlkYXRlIC0gNzUsIEVYX1RFTVBGQUlMLgotICBv cHQ9YGVjaG8gJGFyZ3xzZWQgJ3MvXlwoW149XSpcKS4qL1wxLydgICB8fCBleGl0IDcxCi0g IHZhbD1gZWNobyAkYXJnfHNlZCAncy9eW149XSo9XCguKlwpL1wxLydgIHx8IGV4aXQgNzEK LSAgY2FzZSAiJG9wdCIgaW4KLSAgICAtLWZpbmRvcHRpb25zKSBGSU5ET1BUSU9OUz0iJHZh bCIgOzsKLSAgICAtLWxvY2FscGF0aHMpIFNFQVJDSFBBVEhTPSIkdmFsIiA7OwotICAgIC0t bmV0cGF0aHMpIE5FVFBBVEhTPSIkdmFsIiA7OwotICAgIC0tcHJ1bmVwYXRocykgUFJVTkVQ QVRIUz0iJHZhbCIgOzsKLSAgICAtLXBydW5lZnMpIFBSVU5FRlM9IiR2YWwiIDs7Ci0gICAg LS1vdXRwdXQpIExPQ0FURV9EQj0iJHZhbCIgOzsKLSAgICAtLW5ldHVzZXIpIE5FVFVTRVI9 IiR2YWwiIDs7Ci0gICAgLS1sb2NhbHVzZXIpIExPQ0FMVVNFUj0iJHZhbCIgOzsKLSAgICAt LWNoYW5nZWN3ZCkgIGNoYW5nZXRvPSIkdmFsIiA7OwotICAgIC0tZGJmb3JtYXQpICAgZGJm b3JtYXQ9IiR2YWwiIDs7Ci0gICAgLS12ZXJzaW9uKSBmYWlsPTA7IGVjaG8gIiR2ZXJzaW9u IiB8fCBmYWlsPTE7IGV4aXQgJGZhaWwgOzsKLSAgICAtLWhlbHApICAgIGZhaWw9MDsgZWNo byAiJHVzYWdlIiAgIHx8IGZhaWw9MTsgZXhpdCAkZmFpbCA7OwotICAgICopIGVjaG8gInVw ZGF0ZWRiOiBpbnZhbGlkIG9wdGlvbiAkb3B0Ci1UcnkgJyQwIC0taGVscCcgZm9yIG1vcmUg aW5mb3JtYXRpb24uIiA+JjIKLSAgICAgICBleGl0IDEgOzsKLSAgZXNhYworZm9yIGFyZzsg ZG8KKyAgICAjIElmIHdlIGFyZSB1bmFibGUgdG8gZm9yaywgdGhlIGJhY2stdGljayBvcGVy YXRvciB3aWxsCisgICAgIyBmYWlsIChhbmQgdGhlIHNoZWxsIHdpbGwgZW1pdCBhbiBlcnJv ciBtZXNzYWdlKS4gIFdoZW4KKyAgICAjIHRoaXMgaGFwcGVucywgd2UgZXhpdCB3aXRoIGVy cm9yIHZhbHVlIDcxIChFWF9PU0VSUikuCisgICAgIyBBbHRlcm5hdGl2ZSBjYW5kaWRhdGUg LSA3NSwgRVhfVEVNUEZBSUwuCisgICAgb3B0PWBlY2hvICRhcmcgfCBzZWQgJ3MvXlwoW149 XSpcKS4qL1wxLydgICB8fCBleGl0IDcxCisgICAgdmFsPWBlY2hvICRhcmcgfCBzZWQgJ3Mv XltePV0qPVwoLipcKS9cMS8nYCB8fCBleGl0IDcxCisgICAgY2FzZSAiJG9wdCIgaW4KKyAg ICAgICAgLS1maW5kb3B0aW9ucykgRklORE9QVElPTlM9IiR2YWwiIDs7CisgICAgICAgIC0t bG9jYWxwYXRocykgU0VBUkNIUEFUSFM9IiR2YWwiIDs7CisgICAgICAgIC0tbmV0cGF0aHMp IE5FVFBBVEhTPSIkdmFsIiA7OworICAgICAgICAtLXBydW5lcGF0aHMpIFBSVU5FUEFUSFM9 IiR2YWwiIDs7CisgICAgICAgIC0tcHJ1bmVmcykgUFJVTkVGUz0iJHZhbCIgOzsKKyAgICAg ICAgLS1vdXRwdXQpIExPQ0FURV9EQj0iJHZhbCIgOzsKKyAgICAgICAgLS1uZXR1c2VyKSBO RVRVU0VSPSIkdmFsIiA7OworICAgICAgICAtLWxvY2FsdXNlcikgTE9DQUxVU0VSPSIkdmFs IiA7OworICAgICAgICAtLWNoYW5nZWN3ZCkgIGNoYW5nZXRvPSIkdmFsIiA7OworICAgICAg ICAtLWRiZm9ybWF0KSAgIGRiZm9ybWF0PSIkdmFsIiA7OworICAgICAgICAtLWtlZXB0eHQp ICAgICBrZWVwdHh0PSIkdmFsIiA7OworICAgICAgICAtLXZlcnNpb24pIGZhaWw9MDsgZWNo byAiJHZlcnNpb24iID4mMiB8fCBmYWlsPTE7IGV4aXQgJGZhaWwgOzsKKyAgICAgICAgLS1o ZWxwKSAgICBmYWlsPTA7IGVjaG8gIiR1c2FnZSIgICA+JjIgfHwgZmFpbD0xOyBleGl0ICRm YWlsIDs7CisgICAgICAgICopIHN0ZGVyciAnSW52YWxpZCBvcHRpb24gIickb3B0JyIuJwor ICAgICAgICAgICBlY2hvICIgICAgICAgICAgVHJ5ICckb3VybmFtZSAtLWhlbHAnIGZvciBt b3JlIGluZm9ybWF0aW9uLiIgPiYyCisgICAgICAgICAgIGV4aXQgMSA7OworICAgIGVzYWMK IGRvbmUKIAogZnJjb2RlX29wdGlvbnM9IiIKQEAgLTEwMCwxMyArMTA4LDg3IEBACiAgICAg ICAgIDs7CiAgICAgKikKICAgICAgICAgIyBUaGUgIm9sZCIgZGF0YWJhc2UgZm9ybWF0IGlz IG5vIGxvbmdlciBzdXBwb3J0ZWQuCi0gICAgICAgIGVjaG8gIlVuc3VwcG9ydGVkIGxvY2F0 ZSBkYXRhYmFzZSBmb3JtYXQgJHtkYmZvcm1hdH06IFN1cHBvcnRlZCBmb3JtYXRzIGFyZToi ID4mMgotICAgICAgICBlY2hvICJMT0NBVEUwMiwgc2xvY2F0ZSIgPiYyCisgICAgICAgIHN0 ZGVyciAnVW5zdXBwb3J0ZWQgbG9jYXRlIGRhdGFiYXNlIGZvcm1hdCAiJyRkYmZvcm1hdCci LicKKyAgICAgICAgZWNobyAnICAgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAiTE9D QVRFMDIiIG9yICJzbG9jYXRlIi4nID4mMgogICAgICAgICBleGl0IDEKIGVzYWMKIAorIyBU aGUgZGF0YWJhc2UgZmlsZSB0byBidWlsZCAob3ZlcnJpZGFibGUgdmlhIGNvbW1hbmRsaW5l IG9yIGVudmlyb25tZW50IHZhci4pLgorOiAke0xPQ0FURV9EQj0vdmFyL2xvY2F0ZWRifQor TE9DQVRFX0RCX0RJUj1gZGlybmFtZSAkTE9DQVRFX0RCYAorCisjIFByZXZlbnQgb3Zlcmxh cHBpbmcgd2l0aCBvdXJzZWx2ZXMuICBMYXJnZSBmaWxlc3lzdGVtIGNvbGxlY3Rpb25zIGNh biBlYXNpbHkgCisjIHRha2Ugb3ZlciAyNCBob3VycyB0byBjb21wbGV0ZSwgZXZlbiBvbiBw cmV0dHkgc3BlZWR5IHN5c3RlbXMgLyBoYXJkIGRyaXZlcy4KKyMgSWRlYWxseSB0aGlzIHdv dWxkIGdvIGluIC92YXIvcnVuIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoYXQsIGJ1dCB0aGlz IGlzIE9LLgorbG9ja2ZpbGU9JExPQ0FURV9EQi5ydW5uaW5nX3VwZGF0ZWRiX3BpZAorCitp ZiBbIC1lICRsb2NrZmlsZSBdOyB0aGVuCisgICAgc3RkZXJyICJBYm9ydGluZyBzaW5jZSBw cmlvciBydW4ncyBsb2NrZmlsZSBzdGlsbCBleGlzdHM6IgorICAgIGxzIC1sRiAkbG9ja2Zp bGUgPiYyCisgICAgZXhpdCAxCitmaQorCitrZWVwdHh0PW5laXRoZXIKK3JlcG9ydGVkX2xv Y2tmaWxlX2ZhaWx1cmU9MAorCitjbGVhbnVwX29uX2V4aXRfb3Jfc2lnbmFsKCkgeworICAg IHJtIC1mICRMT0NBVEVfREIubgorCisgICAgaWYgWyAkcmVwb3J0ZWRfbG9ja2ZpbGVfZmFp bHVyZSAtbmUgMSBdOyB0aGVuCisgICAgICAgICMgV2UgZGlkbid0IGFscmVhZHkgaGF2ZSBh IGZhaWx1cmUgdHJ5aW5nIHRvIGluaXRpYWxseSBjcmVhdGUgdGhlIAorICAgICAgICAjIGxv Y2tmaWxlLCBzbyB3ZSBjYW4gYXNzdW1lIHRoZSB0ZW1wb3JhcnkgLnR4dCBmaWxlcyBhcmUg b3VycyAobm90IAorICAgICAgICAjIHNhdmVkIG9uIGEgcHJldmlvdXMgcnVuIHdpdGggLS1r ZWVwdHh0KSwgYW5kIGl0J3Mgc2FmZSB0byAKKyAgICAgICAgIyAob3B0aW9uYWxseSkgZGVs ZXRlIHRoZW0uCisgICAgICAgIGlmIFsgeCIka2VlcHR4dCIgPSB4InNvcnQiIF07IHRoZW4K KyAgICAgICAgICAgIHJtIC1mICRMT0NBVEVfREIudHh0CisgICAgICAgIGVsaWYgWyB4IiRr ZWVwdHh0IiAhPSB4ImJvdGgiIF07IHRoZW4KKyAgICAgICAgICAgICMgVEJEOiBSZXBvcnQg dW5kZWZpbmVkIHZhbHVlcyBvZiAtLWtlZXB0eHQ/CisgICAgICAgICAgICBybSAtZiAkTE9D QVRFX0RCLnR4dCAkTE9DQVRFX0RCLnR4dC5zb3J0CisgICAgICAgIGZpCisgICAgZmkKIAot aWYgdHJ1ZQorICAgIGlmICEgcm0gLWYgJGxvY2tmaWxlOyB0aGVuCisgICAgICAgIHJlcG9y dF9sb2NrZmlsZV9mYWlsdXJlICJyZW1vdmUiCisgICAgZmkKK30KKworcmVwb3J0X2xvY2tm aWxlX2ZhaWx1cmUoKSB7CisgICAgaWYgWyAkcmVwb3J0ZWRfbG9ja2ZpbGVfZmFpbHVyZSAt bmUgMSBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIiRvdXJuYW1lOiBGYWlsZWQgdG8gJDEg bG9ja2ZpbGUgJGxvY2tmaWxlIiA+JjIKKworICAgICAgICBpZiBbIC1lICRsb2NrZmlsZSBd OyB0aGVuCisgICAgICAgICAgICBlY2hvICI6IiA+JjIKKyAgICAgICAgICAgIGxzIC1sRiAk bG9ja2ZpbGUgPiYyCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIiBpbiBkaXI6 IiA+JjIKKyAgICAgICAgICAgIGxzIC1kbEYgJExPQ0FURV9EQl9ESVIgPiYyCisgICAgICAg IGZpCisKKyAgICAgICAgcmVwb3J0ZWRfbG9ja2ZpbGVfZmFpbHVyZT0xCisgICAgZmkKK30K KworIyBOb3cgdGhhdCB3ZSd2ZSBjaGVja2VkIGZvciBhIHByZXZpb3VzIGxvY2tmaWxlIGFi b3ZlLCBpdCdzIHNhZmUgdG8gaW5zdGFsbCAKKyMgY2xlYW51cCBzaWduYWwgaGFuZGxlci4g IFdlJ2xsIHRyeSB0byBjYXRjaCBhbGwgcG90ZW50aWFsbHkgZmF0YWwgc2lnbmFscywgCisj IGFsb25nIHdpdGggZXhpdC4gIEZyb20gQ2VudE9TIDcncyAvdXNyL2luY2x1ZGUvYXNtL3Np Z25hbC5oOgorI1tzaGVsbCBleGl0PTBdIFNJR0hVUD0xICAgICAgICBTSUdJTlQ9MiAgICAg ICAgU0lHUVVJVD0zICAgICAgIFNJR0lMTD00CisjU0lHVFJBUD01ICAgICAgU0lHQUJSVD02 ICAgICAgIFNJR0lPVD02ICAgICAgICBTSUdCVVM9NyAgICAgICAgU0lHRlBFPTgKKyNTSUdL SUxMPTkgICAgICBTSUdVU1IxPTEwICAgICAgU0lHU0VHVj0xMSAgICAgIFNJR1VTUjI9MTIg ICAgICBTSUdQSVBFPTEzCisjU0lHQUxSTT0xNCAgICAgU0lHVEVSTT0xNSAgICAgIFNJR1NU S0ZMVD0xNiAgICBTSUdDSExEPTE3ICAgICAgU0lHQ09OVD0xOAorI1NJR1NUT1A9MTkgICAg IFNJR1RTVFA9MjAgICAgICBTSUdUVElOPTIxICAgICAgU0lHVFRPVT0yMiAgICAgIFNJR1VS Rz0yMworI1NJR1hDUFU9MjQgICAgIFNJR1hGU1o9MjUgICAgICBTSUdWVEFMUk09MjYgICAg U0lHUFJPRj0yNyAgICAgIFNJR1dJTkNIPTI4CisjU0lHSU89MjkgICAgICAgU0lHUE9MTD1T SUdJTyAgIFNJR0xPU1Q9MjkgICAgICBTSUdQV1I9MzAgICAgICAgU0lHU1lTPTMxCit0cmFw IGNsZWFudXBfb25fZXhpdF9vcl9zaWduYWwgMCAyIDMgNCA2IDcgOCA5IDExIDE1IDE2IDMw IDMxIAorCisjIE5vdyB0aGF0IHdlJ3ZlIGluc3RhbGxlZCB0aGUgc2lnbmFsIGhhbmRsZXIs IGl0J3Mgc2FmZSB0byBjcmVhdGUgbG9ja2ZpbGUuCitpZiAhIGVjaG8gJCQgPiAkbG9ja2Zp bGU7IHRoZW4KKyAgICByZXBvcnRfbG9ja2ZpbGVfZmFpbHVyZSAid3JpdGUgdG8iCisgICAg ZXhpdCAxCitmaQorCisjIERvbid0IHVzZSBOVUwgYXMgYSBwYXRoIHNlcGFyYXRvciwgbm93 IHRoYXQgd2Ugd3JpdGUgdG8gYSB0ZW1wb3JhcnkgdGV4dCBmaWxlCisjIChtYXkgd2FudCB0 byBtYWtlIHRoYXQgY29udHJvbGxhYmxlIHdpdGggYSBjb21tYW5kbGluZSBvcHRpb24gaW4g dGhlIGZ1dHVyZSkuCitpZiBmYWxzZQogdGhlbgogICAgIHNvcnQ9Ii91c3IvYmluL3NvcnQg LXoiCiAgICAgcHJpbnRfb3B0aW9uPSItcHJpbnQwIgpAQCAtMTIzLDI1ICsyMDUsMjQgQEAK ICAgICBpZCB8IGN1dCAtZCcoJyAtZiAxIHwgY3V0IC1kJz0nIC1mMgogfQogCi0jIGZpZ3Vy ZSBvdXQgaWYgc3Ugc3VwcG9ydHMgdGhlIC1zIG9wdGlvbgorIyBGaWd1cmUgb3V0IGlmIHN1 IHN1cHBvcnRzIHRoZSAtcyBvcHRpb24uCiBzZWxlY3Rfc2hlbGwoKSB7Ci0gICAgaWYgc3Ug IiQxIiAtcyAkU0hFTEwgLWMgZmFsc2UgPCAvZGV2L251bGwgIDsgdGhlbgotCSMgTm8uCi0J ZWNobyAiIgorICAgIGlmIHN1ICIkMSIgLXMgJFNIRUxMIC1jIGZhbHNlIDwgL2Rldi9udWxs OyB0aGVuCisgICAgICAgICMgTm8uCisgICAgICAgIGVjaG8gIiIKICAgICBlbHNlCi0JaWYg c3UgIiQxIiAtcyAkU0hFTEwgLWMgdHJ1ZSA8IC9kZXYvbnVsbCAgOyB0aGVuCi0JICAgICMg WWVzLgotCSAgICBlY2hvICItcyAkU0hFTEwiCisgICAgICAgIGlmIHN1ICIkMSIgLXMgJFNI RUxMIC1jIHRydWUgPCAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICMgWWVzLgorICAg ICAgICAgICAgZWNobyAiLXMgJFNIRUxMIgogICAgICAgICBlbHNlCi0JICAgICMgc3UgaXMg dW5jb25kaXRpb25hbGx5IGZhaWxpbmcuICBXZSB3b24ndCBiZSBhYmxlIHRvCi0JICAgICMg ZmlndXJlIG91dCB3aGF0IGlzIHdyb25nLCBzbyBiZSBjb25zZXJ2YXRpdmUuCi0JICAgIGVj aG8gIiIKLQlmaQorICAgICAgICAgICAgIyBzdSBpcyB1bmNvbmRpdGlvbmFsbHkgZmFpbGlu Zy4gIFdlIHdvbid0IGJlIGFibGUgdG8KKyAgICAgICAgICAgICMgZmlndXJlIG91dCB3aGF0 IGlzIHdyb25nLCBzbyBiZSBjb25zZXJ2YXRpdmUuCisgICAgICAgICAgICBlY2hvICIiCisg ICAgICAgIGZpCiAgICAgZmkKIH0KIAotCi0jIFlvdSBjYW4gc2V0IHRoZXNlIGluIHRoZSBl bnZpcm9ubWVudCwgb3IgdXNlIGNvbW1hbmQtbGluZSBvcHRpb25zLAorIyBZb3UgY2FuIHNl dCB0aGVzZSBpbiB0aGUgZW52aXJvbm1lbnQsIG9yIHVzZSBjb21tYW5kLWxpbmUgb3B0aW9u cwogIyB0byBvdmVycmlkZSB0aGVpciBkZWZhdWx0czoKIAogIyBBbnkgZ2xvYmFsIG9wdGlv bnMgZm9yIGZpbmQ/CkBAIC0xNTYsMTAgKzIzNywxMyBAQAogIyBOZXR3b3JrIChORlMsIEFG UywgUkZTLCBldGMuKSBkaXJlY3RvcmllcyB0byBwdXQgaW4gdGhlIGRhdGFiYXNlLgogOiAk e05FVFBBVEhTPX0KIAotIyBEaXJlY3RvcmllcyB0byBub3QgcHV0IGluIHRoZSBkYXRhYmFz ZSwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGJlLgorIyBEZWZhdWx0IGxpc3Qgb2YgZGlyZWN0 b3JpZXMgKG92ZXJyaWRhYmxlIHdpdGggb3B0aW9ucykgdG8gYmUgb21pdHRlZCBmcm9tIHRo ZQorIyBkYXRhYmFzZS4gIE5vdGUgdGhhdCAvZGV2IGFuZCAvcHJvYyBuZWVkIHRvIGJlIHNw ZWNpZmllZCAicmVkdW5kYW50bHkiIGhlcmUsCisjIHNpbmNlIG9uIEN5Z3dpbiwgdGhleSBj YW4ndCBiZSBkZXRlY3RlZCBiYXNlZCBvbiBmaWxlc3lzdGVtIHR5cGUuCiA6ICR7UFJVTkVQ QVRIUz0iCiAvYWZzCiAvYW1kCisvZGV2CiAvcHJvYwogL3NmcwogL3RtcApAQCAtMTY3LDMy ICsyNTEsMzQgQEAKIC92YXIvdG1wCiAifQogCi0jIFRyYWlsaW5nIHNsYXNoZXMgcmVzdWx0 IGluIHJlZ2V4IGl0ZW1zIHRoYXQgYXJlIG5ldmVyIG1hdGNoZWQsIHdoaWNoCi0jIGlzIG5v dCB3aGF0IHRoZSB1c2VyIHdpbGwgZXhwZWN0LiAgIFRoZXJlZm9yZSB3ZSBub3cgcmVqZWN0 IHN1Y2gKLSMgY29uc3RydWN0cy4KKyMgVHJhaWxpbmcgc2xhc2hlcyByZXN1bHQgaW4gcmVn ZXggaXRlbXMgdGhhdCBhcmUgbmV2ZXIgbWF0Y2hlZCwgd2hpY2ggaXMKKyMgbm90IHdoYXQg dGhlIHVzZXIgd2lsbCBleHBlY3QuICBUaGVyZWZvcmUgd2Ugbm93IHJlamVjdCBzdWNoIGNv bnN0cnVjdHMuCisjIFRCRDogSnVzdCByZW1vdmUgYW55IHRyYWlsaW5nIHNsYXNoZXMgaW5z dGVhZD8KIGZvciBwIGluICRQUlVORVBBVEhTOyBkbwogICAgIGNhc2UgIiRwIiBpbgotCS8q LykgICBlY2hvICIkMDogJHA6IHBydW5lZCBwYXRocyBzaG91bGQgbm90IGNvbnRhaW4gdHJh aWxpbmcgc2xhc2hlcyIgPiYyCi0JICAgICAgIGV4aXQgMQorICAgICAgICAvKi8pIHN0ZGVy ciAiUHJ1bmUgcGF0aCAnJHAnIGhhcyBhIHRyYWlsaW5nIHNsYXNoLCB3aGljaCBpc24ndCBh bGxvd2VkLiIKKyAgICAgICAgICAgICBleGl0IDEKICAgICBlc2FjCiBkb25lCiAKLSMgVGhl IHNhbWUsIGluIHRoZSBmb3JtIG9mIGEgcmVnZXggdGhhdCBmaW5kIGNhbiB1c2UuCisjIENv bnZlcnQgJFBSVU5FUEFUSFMgdG8gYSByZWdleCB0aGF0IGZpbmQgY2FuIHVzZS4gIE5vdGUg dGhhdCB0byBhbGxvdyBwYXRocworIyBjb250YWluaW5nIHNwYWNlcywgdGhlIGZpcnN0IC1l IGNoYW5nZXMgJ1wgJyB0byAnLy8vJyAoJy8vJyBpc24ndCB1c2VkIHNpbmNlCisjIGl0J3Mg YSBzZW1pLWNvbW1vbiBhcnRpZmFjdCBvZiBwYXRoIGNvbmNhdGVuYXRpb24pLCBhbmQgdGhl biB0aGUgbGFzdCAtZQorIyBjaGFuZ2VzICcvLy8nIGJhY2sgdG8gJyAnIChpdCBkb2Vzbid0 IG5lZWQgYmFja3NsYXNoaW5nIGluIHRoZSByZWdleCkuCiB0ZXN0IC16ICIkUFJVTkVSRUdF WCIgJiYKLSAgUFJVTkVSRUdFWD1gZWNobyAkUFJVTkVQQVRIU3xzZWQgLWUgJ3MsXixcXFwo XiwnIC1lICdzLCAsJFxcXClcXFx8XFxcKF4sZycgLWUgJ3MsJCwkXFxcKSwnYAorICBQUlVO RVJFR0VYPWBlY2hvICRQUlVORVBBVEhTIHwgc2VkIC1lICdzLFxcXCAsLy8vLGcnIC1lICdz LF4sXFxcKF4sJyAtZSAncywgLCRcXFwpXFxcfFxcXCheLGcnIC1lICdzLCQsJFxcXCksJyAt ZSAncywvLy8sICxnJ2AKIAotIyBUaGUgZGF0YWJhc2UgZmlsZSB0byBidWlsZC4KLTogJHtM T0NBVEVfREI9L3Zhci9sb2NhdGVkYn0KLQotIyBEaXJlY3RvcnkgdG8gaG9sZCBpbnRlcm1l ZGlhdGUgZmlsZXMuCisjIERpcmVjdG9yeSBmb3Igc29ydCAoJiBwb3NzaWJseSBvdGhlciBl eGVjdXRhYmxlcykgdG8gaG9sZCBpbnRlcm1lZGlhdGUgZmlsZXMuCisjIFRoZSBzY3JpcHQn cyBvd24gdGVtcG9yYXJ5IGZpbGVzIGdvIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUg ZGF0YWJhc2UsCisjIHNpbmNlIHRoZXkgYXJlbid0IGFsd2F5cyB0ZW1wb3JhcnkgKC0ta2Vl cHR4dCBvciBsZWZ0LWJlaGluZCBsb2NrZmlsZSkuCiBpZiB0ZXN0IC16ICIkVE1QRElSIjsg dGhlbgotICBpZiB0ZXN0IC1kIC92YXIvdG1wOyB0aGVuCi0gICAgOiAke1RNUERJUj0vdmFy L3RtcH0KLSAgZWxpZiB0ZXN0IC1kIC91c3IvdG1wOyB0aGVuCi0gICAgOiAke1RNUERJUj0v dXNyL3RtcH0KLSAgZWxzZQotICAgIDogJHtUTVBESVI9L3RtcH0KLSAgZmkKKyAgICBpZiB0 ZXN0IC1kIC92YXIvdG1wOyB0aGVuCisgICAgICAgIDogJHtUTVBESVI9L3Zhci90bXB9Cisg ICAgZWxpZiB0ZXN0IC1kIC91c3IvdG1wOyB0aGVuCisgICAgICAgIDogJHtUTVBESVI9L3Vz ci90bXB9CisgICAgZWxzZQorICAgICAgICA6ICR7VE1QRElSPS90bXB9CisgICAgZmkKIGZp CiBleHBvcnQgVE1QRElSCiAKQEAgLTIwMCwxNCArMjg2LDE0IEBACiA6ICR7TkVUVVNFUj1k YWVtb259CiAKICMgVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzdWJwcm9ncmFtcy4K LWlmIHRlc3QgLW4gIiRMSUJFWEVDRElSIiA7IHRoZW4KK2lmIHRlc3QgLW4gIiRMSUJFWEVD RElSIjsgdGhlbgogICAgIDogTElCRVhFQ0RJUiBhbHJlYWR5IHNldCwgZG8gbm90aGluZwog ZWxzZQogICAgIDogJHtMSUJFWEVDRElSPS91c3IvbGliZXhlY30KIGZpCiAKICMgVGhlIGRp cmVjdG9yeSBjb250YWluaW5nIGZpbmQuCi1pZiB0ZXN0IC1uICIkQklORElSIiA7IHRoZW4K K2lmIHRlc3QgLW4gIiRCSU5ESVIiOyB0aGVuCiAgICAgOiBCSU5ESVIgYWxyZWFkeSBzZXQs IGRvIG5vdGhpbmcKIGVsc2UKICAgICA6ICR7QklORElSPS91c3IvYmlufQpAQCAtMjE3LDQy ICszMDMsMTkgQEAKIDogJHtmaW5kOj0ke0JJTkRJUn0vZmluZH0KIDogJHtmcmNvZGU6PSR7 TElCRVhFQ0RJUn0vZnJjb2RlfQogCi1tYWtlX3RlbXBkaXIgKCkgewotICAgICMgVGhpcyBp bXBsZW1lbnRhdGlvbiBpcyBhZGFwdGVkIGZyb20gdGhlIEdOVSBBdXRvY29uZiBtYW51YWwu Ci0gICAgewotICAgICAgICB0bXA9YAotICAgICh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIk VE1QRElSL3VwZGF0ZWRiWFhYWFhYIikgMj4vZGV2L251bGwKLSAgICBgICYmCi0gICAgICAg IHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCi0gICAgfSB8fCB7Ci0JIyBUaGlz IG1ldGhvZCBpcyBsZXNzIHNlY3VyZSB0aGFuIG1rdGVtcCAtZCwgYnV0IGl0J3MgYSBmYWxs YmFjay4KLQkjCi0JIyBXZSB1c2UgJCQgYXMgd2VsbCBhcyAkUkFORE9NIHNpbmNlICRSQU5E T00gbWF5IG5vdCBiZSBhdmFpbGFibGUuCi0JIyBXZSBhbHNvIGFkZCBhIHRpbWUtZGVwZW5k ZW50IHN1ZmZpeC4gIFRoaXMgaXMgYWN0dWFsbHkgc29tZXdoYXQKLQkjIHByZWRpY3RhYmxl LCBidXQgdGhlbiBzbyBpcyAkJC4gIFBPU0lYIGRvZXMgbm90IHJlcXVpcmUgZGF0ZSB0bwot CSMgc3VwcG9ydCArJU4uCi0JdHM9YGRhdGUgKyVOJVMgfHwgZGF0ZSArJVMgMj4vZGV2L251 bGxgCi0gICAgICAgIHRtcD0iJFRNUERJUiIvdXBkYXRlZGIiJCQiLSIke1JBTkRPTTotfSR7 dHN9IgotICAgICAgICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKLSAgICB9Ci0gICAg ZWNobyAiJHRtcCIKLX0KLQotY2hlY2tiaW5hcnkgKCkgewotICAgIGlmIHRlc3QgLXggIiQx IiA7IHRoZW4KLQk6IG9rCitjaGVja2JpbmFyeSgpIHsKKyAgICBpZiB0ZXN0IC14ICIkMSI7 IHRoZW4KKyAgICAgICAgOiBvawogICAgIGVsc2UKLSAgICAgIGV2YWwgZWNobyAidXBkYXRl ZGIgbmVlZHMgdG8gYmUgYWJsZSB0byBleGVjdXRlICQxLCBidXQgY2Fubm90LiIgPiYyCi0g ICAgICBleGl0IDEKKyAgICAgICAgc3RkZXJyICJXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXhl Y3V0ZSAkMSwgYnV0IGNhbm5vdC4iCisgICAgICAgIGV4aXQgMQogICAgIGZpCiB9CiAKLWZv ciBiaW5hcnkgaW4gJGZpbmQgJGZyY29kZQotZG8KLSAgY2hlY2tiaW5hcnkgJGJpbmFyeQor Zm9yIGJpbmFyeSBpbiAkZmluZCAkZnJjb2RlOyBkbworICAgIGNoZWNrYmluYXJ5ICRiaW5h cnkKIGRvbmUKIAotCiA6ICR7UFJVTkVGUz0iCiA5UAogTkZTCkBAIC0yNzYsNjcgKzMzOSw5 MSBAQAogIn0KIAogaWYgdGVzdCAtbiAiJFBSVU5FRlMiOyB0aGVuCi1wcnVuZWZzX2V4cD1g ZWNobyAkUFJVTkVGUyB8c2VkIC1lICdzL1woW14gXVteIF0qXCkvLW8gLWZzdHlwZSBcMS9n JyBcCi0gLWUgJ3MvLW8gLy8nIC1lICdzLyQvIC1vLydgCisgICAgcHJ1bmVmc19leHA9YGVj aG8gJFBSVU5FRlMgfCBzZWQgLWUgJ3MvXChbXiBdW14gXSpcKS8tbyAtZnN0eXBlIFwxL2cn IFwKKyAgICAgIC1lICdzLy1vIC8vJyAtZSAncy8kLyAtby8nYAogZWxzZQotICBwcnVuZWZz X2V4cD0nJworICAgIHBydW5lZnNfZXhwPScnCiBmaQogCiAjIE1ha2UgYW5kIGNvZGUgdGhl IGZpbGUgbGlzdC4KLSMgU29ydCBjYXNlIGluc2Vuc2l0aXZlbHkgZm9yIHVzZXJzJyBjb252 ZW5pZW5jZS4KIAotcm0gLWYgJExPQ0FURV9EQi5uCi10cmFwICdybSAtZiAkTE9DQVRFX0RC Lm47IGV4aXQnIEhVUCBURVJNCitpZiAhIGVjaG8gdGVzdCA+ICRMT0NBVEVfREIubjsgdGhl bgorICAgIHN0ZGVyciAiRmFpbGVkIHRvIHdyaXRlIHRvIHRlbXBvcmFyeSBkYXRhYmFzZSBm aWxlICRMT0NBVEVfREIubi4iCisgICAgZXhpdCAxCitmaQogCi1pZiB7Ci1jZCAiJGNoYW5n ZXRvIgotaWYgdGVzdCAtbiAiJFNFQVJDSFBBVEhTIjsgdGhlbgotICBpZiBbICIkTE9DQUxV U0VSIiAhPSAiIiBdOyB0aGVuCi0gICAgIyA6IEExCi0gICAgc3UgJExPQ0FMVVNFUiBgc2Vs ZWN0X3NoZWxsICRMT0NBTFVTRVJgIC1jIFwKLSAgICAiJGZpbmQgJFNFQVJDSFBBVEhTICRG SU5ET1BUSU9OUyBcCi0gICAgIFxcKCAkcHJ1bmVmc19leHAgXAotICAgICAtdHlwZSBkIC1y ZWdleCAnJFBSVU5FUkVHRVgnIFxcKSAtcHJ1bmUgLW8gJHByaW50X29wdGlvbiIKLSAgZWxz ZQotICAgICMgOiBBMgotICAgICRmaW5kICRTRUFSQ0hQQVRIUyAkRklORE9QVElPTlMgXAot ICAgICBcKCAkcHJ1bmVmc19leHAgXAotICAgICAtdHlwZSBkIC1yZWdleCAiJFBSVU5FUkVH RVgiIFwpIC1wcnVuZSAtbyAkcHJpbnRfb3B0aW9uCi0gIGZpCi1maQotCi1pZiB0ZXN0IC1u ICIkTkVUUEFUSFMiOyB0aGVuCi1teXVpZD1gZ2V0dWlkYAotaWYgWyAiJG15dWlkIiA9IDAg XTsgdGhlbgotICAgICMgOiBBMwotICAgIHN1ICRORVRVU0VSIGBzZWxlY3Rfc2hlbGwgJE5F VFVTRVJgIC1jIFwKLSAgICAgIiRmaW5kICRORVRQQVRIUyAkRklORE9QVElPTlMgXFwoIC10 eXBlIGQgLXJlZ2V4ICckUFJVTkVSRUdFWCcgLXBydW5lIFxcKSAtbyAkcHJpbnRfb3B0aW9u IiB8fAotICAgIGV4aXQgJD8KLSAgZWxzZQotICAgICMgOiBBNAotICAgICRmaW5kICRORVRQ QVRIUyAkRklORE9QVElPTlMgXCggLXR5cGUgZCAtcmVnZXggIiRQUlVORVJFR0VYIiAtcHJ1 bmUgXCkgLW8gJHByaW50X29wdGlvbiB8fAotICAgIGV4aXQgJD8KLSAgZmkKKyMgV2Ugbm93 IHdyaXRlIHRvIGEgdGVtcG9yYXJ5IHRleHQgZmlsZSBpbnN0ZWFkIG9mIGdvaW5nIGRpcmVj dCBvdmVyIGEgcGlwZSwgYXMKKyMgdGhlIGxhdHRlciBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3Vs dCB0byBtb25pdG9yIHByb2dyZXNzIGFuZCB0byBkZWJ1ZyBmYWlsdXJlcy4KK2lmICEgZWNo byB0ZXN0ID4gJExPQ0FURV9EQi50eHQ7IHRoZW4KKyAgICBzdGRlcnIgIkZhaWxlZCB0byB3 cml0ZSB0byB0ZXh0IGxpc3Qgb2YgZmlsZXMgJExPQ0FURV9EQi50eHQuIgorICAgIGV4aXQg MQogZmkKLX0gfCAkc29ydCB8ICRmcmNvZGUgJGZyY29kZV9vcHRpb25zID4gJExPQ0FURV9E Qi5uCisKK2ZhaWxlZF90b19nZW5lcmF0ZV9sb2NhdGVfZGI9MAorCitpZiB7CisgICAgY2Qg IiRjaGFuZ2V0byIKKyAgICBpZiB0ZXN0IC1uICIkU0VBUkNIUEFUSFMiOyB0aGVuCisgICAg ICAgIGlmIFsgIiRMT0NBTFVTRVIiICE9ICIiIF07IHRoZW4KKyAgICAgICAgICAgICMgOiBB MQorICAgICAgICAgICAgc3UgJExPQ0FMVVNFUiBgc2VsZWN0X3NoZWxsICRMT0NBTFVTRVJg IC1jIFwKKyAgICAgICAgICAgICAgIiRmaW5kICRTRUFSQ0hQQVRIUyAkRklORE9QVElPTlMg XAorICAgICAgICAgICAgICBcXCggJHBydW5lZnNfZXhwIFwKKyAgICAgICAgICAgICAgLXR5 cGUgZCAtcmVnZXggJyRQUlVORVJFR0VYJyBcXCkgLXBydW5lIC1vICRwcmludF9vcHRpb24i CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgOiBBMgorICAgICAgICAgICAgJGZpbmQg JFNFQVJDSFBBVEhTICRGSU5ET1BUSU9OUyBcCisgICAgICAgICAgICAgIFwoICRwcnVuZWZz X2V4cCBcCisgICAgICAgICAgICAgIC10eXBlIGQgLXJlZ2V4ICIkUFJVTkVSRUdFWCIgXCkg LXBydW5lIC1vICRwcmludF9vcHRpb24KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYg dGVzdCAtbiAiJE5FVFBBVEhTIjsgdGhlbgorICAgICAgICBteXVpZD1gZ2V0dWlkYAorICAg ICAgICBpZiBbICIkbXl1aWQiID0gMCBdOyB0aGVuCisgICAgICAgICAgICAjIDogQTMKKyAg ICAgICAgICAgIHN1ICRORVRVU0VSIGBzZWxlY3Rfc2hlbGwgJE5FVFVTRVJgIC1jIFwKKyAg ICAgICAgICAgICAgIiRmaW5kICRORVRQQVRIUyAkRklORE9QVElPTlMgXFwoIC10eXBlIGQg LXJlZ2V4ICckUFJVTkVSRUdFWCcgLXBydW5lIFxcKSAtbyAkcHJpbnRfb3B0aW9uIiB8fAor ICAgICAgICAgICAgICBleGl0ICQ/CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgOiBB NAorICAgICAgICAgICAgJGZpbmQgJE5FVFBBVEhTICRGSU5ET1BUSU9OUyBcKCAtdHlwZSBk IC1yZWdleCAiJFBSVU5FUkVHRVgiIFwKKyAgICAgICAgICAgICAgLXBydW5lIFwpIC1vICRw cmludF9vcHRpb24gfHwKKyAgICAgICAgICAgIGV4aXQgJD8KKyAgICAgICAgZmkKKyAgICBm aQorfSA+ICRMT0NBVEVfREIudHh0CiB0aGVuCi0gICAgOiBPSyBzbyBmYXIKLSAgICB0cnVl CisgICAgIyBPSywgZmluZCBjb21wbGV0ZWQuICBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZmls ZXMgaXMgdmVyeSB0aW1lLWNvbnN1bWluZyAKKyAgICAjIG9uIHNvbWUgc3lzdGVtcywgc28g KHRyeSB0bykgc2F2ZSBhIGNvcHkgb2YgdGhlIHByZXZpb3VzIERCIGluIGNhc2UKKyAgICAj IHNvbWV0aGluZyBnb2VzIHdyb25nIGF0IHRoaXMgcG9pbnQuCisgICAgY3AgLWZwICRMT0NB VEVfREIgJExPQ0FURV9EQi5wcmV2CisKKyAgICAjIE5vdyBzb3J0IHJlc3VsdHMsIGNhc2Ut aW5zZW5zaXRpdmVseSBmb3IgdXNlciBjb252ZW5pZW5jZSwgdGhlbiBnZW5lcmF0ZQorICAg ICMgdGhlIG5ldyBEQi4KKyAgICBpZiAhICRzb3J0IC1mICRMT0NBVEVfREIudHh0ID4gJExP Q0FURV9EQi50eHQuc29ydDsgdGhlbgorICAgICAgICBmYWlsZWRfcmV0dXJuX3ZhbHVlPSQ/ CisgICAgICAgIGZhaWxlZF90b19nZW5lcmF0ZV9sb2NhdGVfZGI9MQorICAgIGVsaWYgISAk ZnJjb2RlICRmcmNvZGVfb3B0aW9ucyA8ICRMT0NBVEVfREIudHh0LnNvcnQgPiAkTE9DQVRF X0RCLm47IHRoZW4KKyAgICAgICAgZmFpbGVkX3JldHVybl92YWx1ZT0kPworICAgICAgICBm YWlsZWRfdG9fZ2VuZXJhdGVfbG9jYXRlX2RiPTEKKyAgICBmaQogZWxzZQotICAgIHJ2PSQ/ Ci0gICAgZWNobyAiRmFpbGVkIHRvIGdlbmVyYXRlICRMT0NBVEVfREIubiIgPiYyCisgICAg ZmFpbGVkX3RvX2dlbmVyYXRlX2xvY2F0ZV9kYj0xCitmaQorCitpZiBbICRmYWlsZWRfdG9f Z2VuZXJhdGVfbG9jYXRlX2RiIC1lcSAxIF07IHRoZW4KKyAgICBzdGRlcnIgIkZhaWxlZCB0 byBnZW5lcmF0ZSBuZXcgZGF0YWJhc2UgdGVtcCBmaWxlICRMT0NBVEVfREIubi4iCiAgICAg cm0gLWYgJExPQ0FURV9EQi5uCi0gICAgZXhpdCAkcnYKKyAgICBleGl0ICRmYWlsZWRfcmV0 dXJuX3ZhbHVlCiBmaQogCi0jIFRvIGF2b2lkIGJyZWFraW5nIGxvY2F0ZSB3aGlsZSB0aGlz IHNjcmlwdCBpcyBydW5uaW5nLCBwdXQgdGhlCisjIFRvIGF2b2lkIGJyZWFraW5nIGxvY2F0 ZSB3aGlsZSB0aGlzIHNjcmlwdCBpcyBydW5uaW5nLCB3ZSBwdXQgdGhlCiAjIHJlc3VsdHMg aW4gYSB0ZW1wIGZpbGUsIHRoZW4gcmVuYW1lIGl0IGF0b21pY2FsbHkuCiBpZiB0ZXN0IC1z ICRMT0NBVEVfREIubjsgdGhlbgotICBjaG1vZCA2NDQgJHtMT0NBVEVfREJ9Lm4KLSAgbXYg JHtMT0NBVEVfREJ9Lm4gJExPQ0FURV9EQgorICAgIGNobW9kIDY0NCAkTE9DQVRFX0RCLm4K KyAgICBtdiAtZiAkTE9DQVRFX0RCLm4gJExPQ0FURV9EQgogZWxzZQotICBlY2hvICJ1cGRh dGVkYjogbmV3IGRhdGFiYXNlIHdvdWxkIGJlIGVtcHR5IiA+JjIKLSAgcm0gLWYgJExPQ0FU RV9EQi5uCisgICAgc3RkZXJyICJOZXcgZGF0YWJhc2Ugd291bGQgYmUgZW1wdHksIHNvIG5v dCBjcmVhdGluZyBpdC4iCisgICAgcm0gLWYgJExPQ0FURV9EQi5uCiBmaQotCi1leGl0IDAK --------------Rc0dG5cqRTsWqdOiM0eF20FW Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple --------------Rc0dG5cqRTsWqdOiM0eF20FW--