www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2023/01/31/03:46:23

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
X-Recipient: djgpp AT delorie DOT com
X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20210112;
h=to:subject:message-id:date:from:references:in-reply-to:mime-version
:from:to:cc:subject:date:message-id:reply-to;
bh=Cy+2UShq3YpWU5ZSmom3hlJOyb/JruAjXXptdZMXcT0=;
b=UdpbowyHiuIcLr4muK8jQRU7HOao4XLL60rTr6EoIBpHhI7IJB93Rgavc+WTOogfKe
CSzq8Vw+oAWP6LGVzSyrEEgCRcPyQ4nCxA8UMsxQgj6poZrWPrYI6RkXUX6AUSxxvcrp
aqKu0HAzafd7zyE3fv7j3hGSwEAHW+HlO/Cwd1rYcZ93cx3o/hXcD5roJITXgAaxHb4T
ijU+DOy34gVr7nuv1ZZudDYc8FUNY4I6ianXwL8hbfndzFynn9PPptXTN1gGlJfXHOJj
6UO09BkqGk7cSlKm5yt9sJA2ZG9YFtszMt1JlCD2Lw6/Ps6+2t0XRXM1p8VZ8iKP0dY7
vDpA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20210112;
h=to:subject:message-id:date:from:references:in-reply-to:mime-version
:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
bh=Cy+2UShq3YpWU5ZSmom3hlJOyb/JruAjXXptdZMXcT0=;
b=bNatG7rl7hUHkmQZnh9kUQHg3r4uw7VPvAGCZoJLE9HoTh+odkbFQgNIxvSWq22rIx
FRKB3Y3SL8sag84TXEJ5Su24FLFLzMT+LuaNZcHtw3e+hG4KqL6IaN/IQGH+5SMQVZCu
bqDFt8NS0BTrW+j9CMuOfhKj0BgD1DtN/Xy11W04GsczGmuULOC10wge+e1Ph47SwzNL
4DXAQCFdI/iGYq75AvQCYrgsjB4m7SVGL+Mw1rctqPFVOSwXahXwDUWGl2YZxqsixi8h
XZOnoUC5Qn/+4K1tUTK5mLeu3plOyUvb9GCZ/SKG0hZiDnnaCB2MIXu8T0OBjOashLiS
PvfA==
X-Gm-Message-State: AO0yUKULm7tlAo7vA3P6Ggnc0M/vst//7quVhxHn+5M91ZWv1Roqi5VE
mvnrT/qf6KQBELFh6f+DmvahO0IViaRi5cQs43mYA68z
X-Google-Smtp-Source: AK7set8zd+lfNkzcG3/qaMUw7PpDjT//TUTP3jfSmuWHPILy9UuSzmEoGsb6ivgfAdZt2QPC+6RVDT5KKM3m3Z9m3P8=
X-Received: by 2002:a5d:5b0b:0:b0:2bf:bc64:bb40 with SMTP id
bx11-20020a5d5b0b000000b002bfbc64bb40mr499828wrb.34.1675154582068; Tue, 31
Jan 2023 00:43:02 -0800 (PST)
MIME-Version: 1.0
In-Reply-To: <CAA2C=vD8V=rpNwvuC+1Mj6GjNjyfByWVND8eiuOkF6R7ECYVvQ@mail.gmail.com>
References: <CAA2C=vCcrB4r7Z_1zOC+dvQnLiQjhp_zbhhuqJ7RQpQnrLuwMQ AT mail DOT gmail DOT com>
<835ycn529o DOT fsf AT gnu DOT org> <CAA2C=vCP=M-r5Fb6YU5gpOqxHmk-rRXJLMSG8vieB84fE8ZAPA AT mail DOT gmail DOT com>
<CAA2C=vD8V=rpNwvuC+1Mj6GjNjyfByWVND8eiuOkF6R7ECYVvQ AT mail DOT gmail DOT com>
From: "Ozkan Sezer (sezeroz AT gmail DOT com) [via djgpp AT delorie DOT com]" <djgpp AT delorie DOT com>
Date: Tue, 31 Jan 2023 11:43:00 +0300
Message-ID: <CAA2C=vCMFJmBv6P_dAiDCRzCCn=gNZpjdPcfWH=e3QtR6NTi+w@mail.gmail.com>
Subject: Re: [PATCH] dxe3gen: add support for using an exports file.
To: djgpp AT delorie DOT com
Reply-To: djgpp AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: djgpp AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

--000000000000cefd5105f38b5192
Content-Type: text/plain; charset="UTF-8"

>>> LGTM,
>>
>> OK, can apply tomorrow unless I get further reviews/objections.
>>
>>> but why did you use binary mode for reading the exports file?
>>
>> Easier forme that way -- uniform parsing across platforms.
>
> Version 2 of patch attached. Changes:
>
> - Fixes segfault if the exports file has no newline at end
> - Reports missing exports in verbose mode.
>
> For convenience, an interdiff to first version is inlined below
> (cosmetic changes excluded.)
>
> --- dxe3gen.c~
> +++ dxe3gen.c
> @@ -519,7 +520,7 @@
>      opt.export_names[opt.num_names++] = ptr++;
>
>      loc1:
> -    while (*ptr != '\r' && *ptr != '\n')
> +    while (*ptr && *ptr != '\r' && *ptr != '\n')
>        ++ptr;
>    }
>  }
> @@ -1277,9 +1278,12 @@
>          BOOL ok = FALSE;
>          for (j = 0; j < opt.num_names; j++)
>          {
> +          if (!opt.export_names[j])
> +            continue;
>            if (strcmp(opt.export_names[j], name) == 0)
>            {
>              ok = TRUE;
> +            opt.export_names[j] = NULL;
>              break;
>            }
>          }
> @@ -1310,6 +1314,15 @@
>    }
>    DEBUG_PRINT_SYMBOL_TABLE_EPILOG();
>
> +  if (opt.verbose && opt.num_names && opt.num_names != dh.n_exp_syms)
> +  {
> +    for (j = 0; j < opt.num_names; j++)
> +    {
> +      if (opt.export_names[j])
> +        printf("missing export: `%s'\n", opt.export_names[j]);
> +    }
> +  }
> +
>    if (errcount)
>    {
>      fclose(outf);

Version 3 of the patch attached. Changes:

- Leading or trailing whitespace in symbol name line are now tolerated.

For convenience, an interdiff to version-2 is inlined below.

--- dxe3gen.c~
+++ dxe3gen.c
@@ -503,25 +503,28 @@ static void process_exp_file(const char

   ptr = expfile;
   for (;;)
   {
-    while (*ptr == '\r' || *ptr == '\n')
+    while (*ptr == '\r' || *ptr == '\n' || *ptr == ' ' || *ptr == '\t')
       *ptr++ = '\0';

     if (!*ptr) break;

     if (*ptr == '#') /* comment */
-      goto loc1;
+    {
+      while (*ptr && *ptr != '\r' && *ptr != '\n')
+        ++ptr;
+      continue;
+    }

     if (opt.num_names >= opt.max_names)
     {
       opt.max_names += 16;
       opt.export_names = (char **)realloc(opt.export_names,
opt.max_names * sizeof(char *));
     }
     opt.export_names[opt.num_names++] = ptr++;

-    loc1:
-    while (*ptr && *ptr != '\r' && *ptr != '\n')
+    while (*ptr && *ptr != '\r' && *ptr != '\n' && *ptr != ' ' && *ptr != '\t')
       ++ptr;
   }
 }


If you guys don't catch any gotchas, I plan to apply this 3r version to cvs.

--000000000000cefd5105f38b5192
Content-Type: text/x-patch; charset="US-ASCII"; name="exports3.patch"
Content-Disposition: attachment; filename="exports3.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file0

ZHhlM2dlbjogYWRkIHN1cHBvcnQgZm9yIHVzaW5nIGFuIGV4cG9ydHMgZmlsZS4KCk5ldyBjb21t
YW5kIGxpbmUgb3B0aW9uOiAtLWV4cG9ydHMgZmlsZQoKVGhlIGV4aXN0aW5nIG1lY2hhbmlzbSBm
b3IgZXhwb3J0ZWQgc3ltYm9scyB3YXMgdGhyb3VnaCBzeW1ib2wgcHJlZml4ZXMsCmkuZS4gdGhl
IC1FIGFuZCAtWCBzd2l0Y2hlcywgYnV0IGNhbiBiZSByZWFsbHkgaGFyZCB0byB1c2UgZXNwZWNp
YWxseSBpZgp0aGVyZSBhcmUgbWFueSBzeW1ib2xzIHdoaWNoIGRvbid0IG5lY2Vzc2FyaWx5IHNo
YXJlIGEgY29tbW9uIHByZWZpeCwgb3IKaWYgc29tZSBvZiB0aGUgc3ltYm9scyB0byBleGNsdWRl
IHNoYXJlIHRoZSBjb21tb24gcHJlZml4IHdpdGggc3ltYm9scwp0byBleHBvcnQuICBBZnRlciB0
aGlzLCB0aGUgLUUgYW5kIC1YIHN3aXRjaGVzIGFyZSBzdGlsbCBzdXBwb3J0ZWQsIGJ1dAp0aG9z
ZSB0d28gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIC0tZXhwb3J0cy4KClRoZSBleHBvcnRz
IGZpbGUgaXMgYSBwbGFpbiB0ZXh0IGZpbGUgd2l0aCBvbmUgc3ltYm9sIG5hbWUgYXQgZWFjaCBs
aW5lLApsaWtlIGFuIGV4cG9ydHMgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIGluIG1hY09TIHByb2pl
Y3RzLiAgQW55IGxlYWRpbmcgb3IKdHJhaWxpbmcgc3BhY2UvdGFiIGlzIGlnbm9yZWQuICBBIGxp
bmUgc3RhcnRpbmcgd2l0aCBhICcjJyBjaGFyYWN0ZXIgaXMKYSBjb21tZW50IGxpbmUgYW5kIHdp
bGwgYmUgaWdub3JlZC4gIE1pc3NpbmcgZXhwb3J0cyBhcmUgcmVwb3J0ZWQgdG8gdGhlCnVzZXIg
aW4gdmVyYm9zZSBtb2RlLgoKSW5kZXg6IGR4ZTNnZW4uYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL2RqZ3BwL2RqZ3BwL3NyYy9keGUvZHhlM2dlbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjI3CmRpZmYgLXUgLXAgLXIxLjI3IGR4ZTNnZW4uYwotLS0gZHhlM2dlbi5jCTI4IEphbiAyMDIz
IDE0OjEwOjAzIC0wMDAwCTEuMjcKKysrIGR4ZTNnZW4uYwkzMSBKYW4gMjAyMyAwODozMjozOCAt
MDAwMApAQCAtMjc3LDYgKzI3Nyw5IEBAIHN0YXRpYyBzdHJ1Y3QKICAgY2hhciAqaW1wbGliOyAg
ICAgICAgICAgICAgICAgLyogbmFtZSBvZiBpbXBvcnQgbGlicmFyeSAqLwogICBjaGFyICpkeGVm
aWxlOyAgICAgICAgICAgICAgICAvKiB0aGUgbmFtZSBvZiBkeGUgZmlsZSBvbiBjb21tYW5kIGxp
bmUgKi8KICAgY2hhciAqZGVzY3JpcHRpb247ICAgICAgICAgICAgLyogYSBkZXNjcmlwdGlvbiBv
ZiB0aGUgbW9kdWxlICovCisgIHVuc2lnbmVkIGludCBudW1fbmFtZXM7ICAgICAgIC8qIG51bWJl
ciBvZiBleHBvcnRlZCBzeW1ib2wgbmFtZXMgKi8KKyAgdW5zaWduZWQgaW50IG1heF9uYW1lczsg
ICAgICAgLyogbWF4aW1hbCBudW1iZXIgb2YgZXhwb3J0ZWQgc3ltYm9sIG5hbWVzICovCisgIGNo
YXIgKipleHBvcnRfbmFtZXM7ICAgICAgICAgIC8qIGV4cG9ydGVkIHN5bWJvbCBuYW1lcyAqLwog
ICB1bnNpZ25lZCBpbnQgbnVtX3ByZWZpeDsgICAgICAvKiBudW1iZXIgb2YgZXhwb3J0ZWQgcHJl
Zml4ZXMgKi8KICAgdW5zaWduZWQgaW50IG1heF9wcmVmaXg7ICAgICAgLyogbWF4aW1hbCBudW1i
ZXIgb2YgZXhwb3J0ZWQgcHJlZml4ZXMgKi8KICAgY2hhciAqKmV4cG9ydF9wcmVmaXg7ICAgICAg
ICAgLyogZXhwb3J0ZWQgc3ltYm9sIHByZWZpeGVzICovCkBAIC0zMDcsNiArMzEwLDkgQEAgc3Rh
dGljIHN0cnVjdAogICBOVUxMLAogICAwLAogICAwLAorICBOVUxMLAorICAwLAorICAwLAogICBO
VUxMCiB9OwogCkBAIC0zMTksNiArMzI1LDggQEAgc3RhdGljIGNoYXIgKmR4ZV9hcjsgLyogZGVm
YXVsdDogImFyIiAqLwogc3RhdGljIGNoYXIgKmR4ZV9sZDsgLyogZGVmYXVsdDogImxkIiAqLwog
LyogbGlua2VyIHNjcmlwdCAqLwogc3RhdGljIGNoYXIgKmR4ZV9zYzsgLyogZGVmYXVsdDogImR4
ZS5sZCIgKi8KKy8qIGV4cG9ydHMgZmlsZSAqLworc3RhdGljIGNoYXIgKmV4cGZpbGU7CiAKIAog
LyogRGVzYzogcmVwbGFjZXMgYmFja3NsYXNoIHdpdGggc2xhc2ggaW4gYSBwYXRoCkBAIC00MjIs
NiArNDMwLDcgQEAgc3RhdGljIHZvaWQgZGlzcGxheV9oZWxwKHZvaWQpCiAgIHByaW50ZigiLVgg
cHJlZml4XHRFeGNsdWRlIHN5bWJvbHMgdGhhdCBzdGFydCB3aXRoIDxwcmVmaXg+IChjdW11bGF0
aXZlKVxuIik7CiAgIHByaW50ZigiLVVcdFx0QWxsb3cgdW5yZXNvbHZlZCBzeW1ib2xzIGluIERY
RSBmaWxlXG4iKTsKICAgcHJpbnRmKCItVlx0XHRWZXJib3NlIG91dHB1dCAobWluaW1hbCBvdXRw
dXQgYnkgZGVmYXVsdClcbiIpOworICBwcmludGYoIi0tZXhwb3J0cyBmaWxlXHRFeHBvcnQgc3lt
Ym9scyBmcm9tIHRoaXMgZmlsZSAobXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggLUUvLVgpXG4iKTsK
ICAgcHJpbnRmKCItLXNob3ctZGVwXHRTaG93IGRlcGVuZGVuY2llcyBmb3Igc3BlY2lmaWVkIG1v
ZHVsZVxuIik7CiAgIHByaW50ZigiLS1zaG93LWV4cFx0U2hvdyBzeW1ib2xzIGV4cG9ydGVkIGJ5
IHRoZSBEWEUgbW9kdWxlXG4iKTsKICAgcHJpbnRmKCItLXNob3ctdW5yZXNcdFNob3cgdW5yZXNv
bHZlZCBzeW1ib2xzIGluIHRoZSBEWEUgbW9kdWxlXG4iKTsKQEAgLTQ2NSw2ICs0NzQsNjEgQEAg
c3RhdGljIHZvaWQgcHJvY2Vzc19lbnYodm9pZCkKIH0KIAogCisvKiBEZXNjOiBwcm9jZXNzIHRo
ZSBleHBvcnRzIGZpbGUgcG9pbnRlZCB0byBieSAtLWV4cG9ydHMgb3B0aW9uLgorICoKKyAqIElu
ICA6IC0KKyAqIE91dCA6IC0KKyAqCisgKiBOb3RlOiAtCisgKi8KK3N0YXRpYyB2b2lkIHByb2Nl
c3NfZXhwX2ZpbGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgRklMRSAqZiA9IGZvcGVuKG5hbWUs
ICJyYiIpOworICBjaGFyICpwdHI7CisgIGxvbmcgbGVuOworCisgIGlmICghZikKKyAgeworICAg
IGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IENvdWxkbid0IG9wZW4gZXhwb3J0cyBmaWxlICVzLlxu
IiwgbmFtZSk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGZzZWVrKGYsIDAsIFNFRUtfRU5EKTsK
KyAgbGVuID0gZnRlbGwoZik7CisgIGZzZWVrKGYsIDAsIFNFRUtfU0VUKTsKKyAgZXhwZmlsZSA9
IG1hbGxvYyhsZW4gKyAxKTsKKyAgZnJlYWQoZXhwZmlsZSwgMSwgbGVuLCBmKTsKKyAgZmNsb3Nl
KGYpOworICBleHBmaWxlW2xlbl0gPSAnXDAnOworCisgIHB0ciA9IGV4cGZpbGU7CisgIGZvciAo
OzspCisgIHsKKyAgICB3aGlsZSAoKnB0ciA9PSAnXHInIHx8ICpwdHIgPT0gJ1xuJyB8fCAqcHRy
ID09ICcgJyB8fCAqcHRyID09ICdcdCcpCisgICAgICAqcHRyKysgPSAnXDAnOworCisgICAgaWYg
KCEqcHRyKSBicmVhazsKKworICAgIGlmICgqcHRyID09ICcjJykgLyogY29tbWVudCAqLworICAg
IHsKKyAgICAgIHdoaWxlICgqcHRyICYmICpwdHIgIT0gJ1xyJyAmJiAqcHRyICE9ICdcbicpCisg
ICAgICAgICsrcHRyOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgaWYgKG9wdC5udW1f
bmFtZXMgPj0gb3B0Lm1heF9uYW1lcykKKyAgICB7CisgICAgICBvcHQubWF4X25hbWVzICs9IDE2
OworICAgICAgb3B0LmV4cG9ydF9uYW1lcyA9IChjaGFyICoqKXJlYWxsb2Mob3B0LmV4cG9ydF9u
YW1lcywgb3B0Lm1heF9uYW1lcyAqIHNpemVvZihjaGFyICopKTsKKyAgICB9CisgICAgb3B0LmV4
cG9ydF9uYW1lc1tvcHQubnVtX25hbWVzKytdID0gcHRyKys7CisKKyAgICB3aGlsZSAoKnB0ciAm
JiAqcHRyICE9ICdccicgJiYgKnB0ciAhPSAnXG4nICYmICpwdHIgIT0gJyAnICYmICpwdHIgIT0g
J1x0JykKKyAgICAgICsrcHRyOworICB9Cit9CisKKwogLyogRGVzYzogcHJvY2VzcyBjb21tYW5k
IGxpbmUgYXJncwogICoKICAqIEluICA6IG5vIG9mIGFyZ3VtZW50cywgYXJndW1lbnQgbGlzdCwg
cHRyIHRvIHN0b3JlIGxpbmtlciBhcmdzCkBAIC00NzUsNiArNTM5LDcgQEAgc3RhdGljIHZvaWQg
cHJvY2Vzc19lbnYodm9pZCkKIHN0YXRpYyB2b2lkIHByb2Nlc3NfYXJncyhpbnQgYXJnYywgY2hh
ciAqYXJndltdLCBjb25zdCBjaGFyICpuZXdfYXJndltdKQogewogICBpbnQgaSwgbmV3X2FyZ2Mg
PSBOVU1CRVJfT0ZfTElOS0VSX0FSR1M7CisgIGludCB1c2VfZXhwb3J0cyA9IDA7CiAKICAgaWYg
KCFsaWJkaXIpCiAgIHsKQEAgLTQ4Miw2ICs1NDcsMTcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19h
cmdzKGludCBhcmdjLCBjaGFyIAogICAgIGV4aXQoMSk7CiAgIH0KIAorICBmb3IgKGkgPSAxOyBp
IDwgYXJnYzsgKytpKQorICB7CisgICAgIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLWV4cG9ydHMi
KSkKKyAgICAgICArK3VzZV9leHBvcnRzOworICB9CisgIGlmICh1c2VfZXhwb3J0cyA+IDEpCisg
IHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBtdWx0aXBsZSAtLWV4cG9ydHMgYXJndW1l
bnRzIG5vdCBhbGxvd2VkLlxuIik7CisgICAgZXhpdCgxKTsKKyAgfQorCiAgIG5ld19hcmd2WzBd
ID0gZHhlX2xkOwogICBuZXdfYXJndlsxXSA9ICItWCI7CiAgIG5ld19hcmd2WzJdID0gIi1TIjsK
QEAgLTUxMyw2ICs1ODksMTEgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19hcmdzKGludCBhcmdjLCBj
aGFyIAogICAgICAgcHJpbnRmKCJVc2FnZTogJXMgb3V0cHV0LmR4ZSBzeW1ib2wgaW5wdXQubyBb
aW5wdXQyLm8gLi4uIC1sZ2NjIC1sY11cbiIsIHByb2duYW1lKTsKICAgICAgIGV4aXQoLTEpOwog
ICAgIH0KKyAgICBpZiAodXNlX2V4cG9ydHMpCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIs
ICJFcnJvcjogLS1leHBvcnRzIG5vdCBhbGxvd2VkIGluIGxlZ2FjeSBtb2RlLlxuIik7CisgICAg
ICBleGl0KDEpOworICAgIH0KIAogICAgIG9wdC5tYXhfcHJlZml4ID0gMTY7CiAgICAgb3B0LmV4
cG9ydF9wcmVmaXggPSAoY2hhciAqKiltYWxsb2Mob3B0Lm1heF9wcmVmaXggKiBzaXplb2YoY2hh
ciAqKSk7CkBAIC01NTIsOCArNjMzLDEzIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfYXJncyhpbnQg
YXJnYywgY2hhciAKICAgICAgICAgb3B0LmltcGxpYiA9IGFyZ3ZbKytpXTsKICAgICAgICAgb3B0
LmF1dG9yZXNvbHZlID0gVFJVRTsKICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJn
dltpXSwgIi0tZXhwb3J0cyIpKQorICAgICAgeworICAgICAgICBwcm9jZXNzX2V4cF9maWxlKGFy
Z3ZbKytpXSk7CisgICAgICB9CiAgICAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItRSIp
KQogICAgICAgeworICAgICAgICBpZiAodXNlX2V4cG9ydHMpIGdvdG8gYmFkX29wdDE7CiAgICAg
ICAgIGlmIChvcHQubnVtX3ByZWZpeCA+PSBvcHQubWF4X3ByZWZpeCkKICAgICAgICAgewogICAg
ICAgICAgIG9wdC5tYXhfcHJlZml4ICs9IDE2OwpAQCAtNTYzLDYgKzY0OSwxMSBAQCBzdGF0aWMg
dm9pZCBwcm9jZXNzX2FyZ3MoaW50IGFyZ2MsIGNoYXIgCiAgICAgICB9CiAgICAgICBlbHNlIGlm
ICghc3RyY21wKGFyZ3ZbaV0sICItWCIpKQogICAgICAgeworICAgICAgICBpZiAodXNlX2V4cG9y
dHMpCisgICAgICAgIHsgYmFkX29wdDE6CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
cjogLS1leHBvcnRzIGFuZCAtRSAvIC1YIG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5c
biIpOworICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKG9wdC5udW1f
ZXhjbCA+PSBvcHQubWF4X2V4Y2wpCiAgICAgICAgIHsKICAgICAgICAgICAgb3B0Lm1heF9leGNs
ICs9IDE2OwpAQCAtMTE4NSw2ICsxMjc2LDI0IEBAIHN0YXRpYyBpbnQgd3JpdGVfZHhlKEZJTEUg
KmluZiwgRklMRSAqb3UKICAgICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIAorICAgICAgaWYg
KG9wdC5udW1fbmFtZXMpCisgICAgICB7CisgICAgICAgIEJPT0wgb2sgPSBGQUxTRTsKKyAgICAg
ICAgZm9yIChqID0gMDsgaiA8IG9wdC5udW1fbmFtZXM7IGorKykKKyAgICAgICAgeworICAgICAg
ICAgIGlmICghb3B0LmV4cG9ydF9uYW1lc1tqXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgIGlmIChzdHJjbXAob3B0LmV4cG9ydF9uYW1lc1tqXSwgbmFtZSkgPT0gMCkKKyAgICAg
ICAgICB7CisgICAgICAgICAgICBvayA9IFRSVUU7CisgICAgICAgICAgICBvcHQuZXhwb3J0X25h
bWVzW2pdID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAoIW9rKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCiAgICAg
ICAvKiBleHBvcnRlZCBzeW1ib2wgKi8KICAgICAgIGRoLm5fZXhwX3N5bXMrKzsKIApAQCAtMTIw
OCw2ICsxMzE3LDE1IEBAIHN0YXRpYyBpbnQgd3JpdGVfZHhlKEZJTEUgKmluZiwgRklMRSAqb3UK
ICAgfQogICBERUJVR19QUklOVF9TWU1CT0xfVEFCTEVfRVBJTE9HKCk7CiAKKyAgaWYgKG9wdC52
ZXJib3NlICYmIG9wdC5udW1fbmFtZXMgJiYgb3B0Lm51bV9uYW1lcyAhPSBkaC5uX2V4cF9zeW1z
KQorICB7CisgICAgZm9yIChqID0gMDsgaiA8IG9wdC5udW1fbmFtZXM7IGorKykKKyAgICB7Cisg
ICAgICBpZiAob3B0LmV4cG9ydF9uYW1lc1tqXSkKKyAgICAgICAgcHJpbnRmKCJtaXNzaW5nIGV4
cG9ydDogYCVzJ1xuIiwgb3B0LmV4cG9ydF9uYW1lc1tqXSk7CisgICAgfQorICB9CisKICAgaWYg
KGVycmNvdW50KQogICB7CiAgICAgZmNsb3NlKG91dGYpOwo=
--000000000000cefd5105f38b5192--

- Raw text -


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