delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2015/06/05/04:48:17

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
X-Recipient: dj AT delorie DOT com
X-Recipient: djgpp AT delorie DOT com
X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20120113;
h=mime-version:in-reply-to:references:date:message-id:subject:from:to
:cc:content-type;
bh=jWmG+FgWGUAM1v1252Uf5qMw6KKz4HgDtST4pUdleeI=;
b=W2KxteRF6N68Dn/qyIvEjBTIwMeDBYuG08e0h74gnDMbQ7GbLI4e9rVw87lu2GaDGW
/KZj4xMuMuUE1/1vdMxhcPLB5y88FWZzwHwoREY/nF9VaZeZHMg+FQUikxvxbObuRMim
0WNoSS1QS5FqQDYkZxHl+HXvWTHivq5nydtcHItrnwiYc03tob/FrDTOjDsVJ7YVDNkv
EHLP/fuR4N9a0DLfwXaGftVE+RUHD2cfV/1CbfVaTGA3vyXA6IMSK0r7n06K4uEVaEGy
a4mBah7sN5ZcH9BPsELJkpm0NhXUrHUB0NxbWjGdoTz/81PAxotOiHp41CxMO0y6cOdo
qYfw==
MIME-Version: 1.0
X-Received: by 10.107.12.27 with SMTP id w27mr3064205ioi.10.1433494084671;
Fri, 05 Jun 2015 01:48:04 -0700 (PDT)
In-Reply-To: <CAA2C=vDqj=4LE+rc5FiUoFfzKqD3h6Ru-q6gNmAHY+tjMJ=1sQ@mail.gmail.com>
References: <CAA2C=vAsibDAvdNkdGMFC_HeEoEGdrCX_1xTk1yDqbSgebnXdA AT mail DOT gmail DOT com>
<201506050742 DOT t557ggR8019445 AT envy DOT delorie DOT com>
<CAA2C=vDqj=4LE+rc5FiUoFfzKqD3h6Ru-q6gNmAHY+tjMJ=1sQ AT mail DOT gmail DOT com>
Date: Fri, 5 Jun 2015 11:48:04 +0300
Message-ID: <CAA2C=vASsjartzfLp1T9RRix9ea-B5q_nVzzUj3ZgiJujphuNw@mail.gmail.com>
Subject: Re: dxe3gen patch
From: "Ozkan Sezer (sezeroz AT gmail DOT com)" <djgpp AT delorie DOT com>
To: djgpp AT delorie DOT com
Cc: DJ Delorie <dj 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

--001a113f8e6ab4c8a50517c159fb
Content-Type: text/plain; charset=UTF-8

On 6/5/15, Ozkan Sezer <sezeroz AT gmail DOT com> wrote:
> On 6/5/15, DJ Delorie <dj AT delorie DOT com> wrote:
>>
>> I'm not opposed to environment variables, but they're a bit messy in a
>> unix environment (vs djgpp where we can ship djgpp.env with them ;).
>>
>
> We can provide a sample dxe3gen.sh for it maybe? (more below)
>
>> If dxegen is built as a native djgpp program, it should be using the
>> native djgpp tools (gcc, ld, etc).  Yes?
>>
>
> Of course,
>
>> If dxegen is cross built, it should note the target prefix (the
>> i586-pc-djgpp- part) and change the defaults for the tools to have
>> that prefix (i586-pc-djgpp-gcc, etc).  We try to do this with the
>> -DDXE_LD option.
>>
>> If we do both of these correctly, most users shouldn't need to
>> override the defaults at all, and then it's not as big a deal that
>> they're controlled with environment variables (or cleaner but harder
>> command line options).
>>
>> I don't think it's right for us to *rely* on environment variables to
>> provide correct *default* program names, though.
>>
>
> How about the following patch, which extends the -DDXE_?? options
> at cross-build time and also adds the DXE_?? environment stuff?
> Or, do you prefer something without any environment vars?
>
>>
>> Also, your mailer is wrapping lines, which corrupted the patch in a
>> way that really confused me at first:
>>
>>    /* Prepare the command line for ld */
>>    new_argv = (const char **)malloc((argc - 1 + NUMBER_OF_LINKER_ARGS
>> + NUMBER_OF_ADDITIONAL_LOADED_LIBS + 2 + 1) * sizeof(char *));
>> +  process_env();
>>    process_args(argc, argv, new_argv);
>>
>> Note the column for the wrapped '+' :-)
>
> Yeah, gmail is to blame.  Attaching the patch too this time.
>
> Index: src/dxe/makefile
> ===================================================================
> RCS file: /cvs/djgpp/djgpp/src/dxe/makefile,v
> retrieving revision 1.8
> diff -u -r1.8 makefile
> --- src/dxe/makefile	21 Jul 2013 12:25:58 -0000	1.8
> +++ src/dxe/makefile	5 Jun 2015 08:18:18 -0000
> @@ -33,7 +33,7 @@
>  	$(EXE)
>
>  $(HOSTBIN)/dxegen.exe : dxe3gen.c init1.h init2.h init3.h init4.h
> init5.h fini1.h fini2.h fini3.h fini4.h fini5.h
> -	$(GCC) -DDXE_LD=\"$(CROSS_LD)\" dxe3gen.c -o $@
> +	$(GCC) -DDXE_LD=\"$(CROSS_LD)\" -DDXE_CC=\"$(CROSS_GCC)\"
> -DDXE_AR=\"$(CROSS_AR)\" -DDXE_AS=\"$(CROSS_AS)\" dxe3gen.c -o $@
>
>  clean ::
>  	@-$(MISC) rm *.o *.h $(HOSTBIN)/dxegen.exe
> Index: src/dxe/dxe3gen.c
> ===================================================================
> RCS file: /cvs/djgpp/djgpp/src/dxe/dxe3gen.c,v
> retrieving revision 1.20
> diff -u -r1.20 dxe3gen.c
> --- src/dxe/dxe3gen.c	23 May 2015 08:20:05 -0000	1.20
> +++ src/dxe/dxe3gen.c	5 Jun 2015 08:18:18 -0000
> @@ -165,10 +165,23 @@
>  #endif  /*  !DEBUG_SUPPORT_PRINT_RELOCATION_DIRECTIVES  */
>
>
> +/* Cross compile tool names */
> +#ifndef DXE_CC
> +#define DXE_CC  "gcc"
> +#endif
> +#ifndef DXE_AS
> +#define DXE_AS  "as"
> +#endif
> +#ifndef DXE_AR
> +#define DXE_AR  "ar"
> +#endif
>  #ifndef DXE_LD
> -/* Cross compile ld name/location */
>  #define DXE_LD  "ld"
>  #endif
> +#ifndef DXE_SC
> +#define DXE_SC  "dxe.ld"
> +#endif
> +
>  #ifdef _POSIX_SOURCE
>  /* Linux violates POSIX.1 and defines this, but it shouldn't.. */
>  #undef _POSIX_SOURCE
> @@ -297,6 +310,15 @@
>  };
>
>
> +static char *libdir;
> +/* build tools */
> +static char *dxe_cc; /* default: "gcc" */
> +static char *dxe_as; /* default: "as" */
> +static char *dxe_ar; /* default: "ar" */
> +static char *dxe_ld; /* default: "ld" */
> +/* linker script */
> +static char *dxe_sc; /* default: "dxe.ld" */
> +
>
>  /* Desc: replaces backslash with slash in a path
>   *
> @@ -410,6 +432,45 @@
>
>
>
> +/* Desc: process the DXE_?? environment variables
> + */
> +static void process_env(void)
> +{
> +  const char *e;
> +
> +  if ((e = getenv("DXE_CC")) != NULL)
> +       dxe_cc = strdup(e);
> +  else dxe_cc = strdup(DXE_CC);
> +
> +  if ((e = getenv("DXE_AS")) != NULL)
> +       dxe_as = strdup(e);
> +  else dxe_as = strdup(DXE_AS);
> +
> +  if ((e = getenv("DXE_AR")) != NULL)
> +       dxe_ar = strdup(e);
> +  else dxe_ar = strdup(DXE_AR);
> +
> +  if ((e = getenv("DXE_LD")) != NULL)
> +       dxe_ld = strdup(e);
> +  else dxe_ld = strdup(DXE_LD);
> +
> +  if ((e = getenv("DXE_SC")) != NULL)
> +       dxe_sc = strdup(e);
> +  else dxe_sc = strdup(DXE_SC);
> +
> +  if ((e = getenv("DXE_LD_LIBRARY_PATH")) != NULL)
> +       libdir = strdup(e);
> +  else if ((e = getenv("DJDIR")) != NULL) {
> +       size_t sz = strlen(e) + 5U;
> +       libdir = malloc(sz);
> +       strcpy(libdir, e);
> +       strcat(libdir, "/lib");
> +       canonicalize_path(libdir);
> +  }
> +  else libdir = NULL;
> +}
> +
> +
>  /* Desc: process command line args
>   *
>   * In  : no of arguments, argument list, ptr to store linker args
> @@ -419,30 +480,15 @@
>   */
>  static void process_args(int argc, char *argv[], const char *new_argv[])
>  {
> -  static char libdir[FILENAME_MAX];
> -  char *p;
>    int i, new_argc = NUMBER_OF_LINKER_ARGS;
>
> -  p = getenv("DXE_LD_LIBRARY_PATH");
> -  if (p)
> -    strcpy(libdir, p);
> -  else
> +  if (!libdir)
>    {
> -    p = getenv("DJDIR");
> -    if (p)
> -    {
> -      strcpy(libdir, p);
> -      strcat(libdir, "/lib");
> -      canonicalize_path(libdir);
> -    }
> -    else
> -    {
>        fprintf(stderr, "Error: neither DXE_LD_LIBRARY_PATH nor DJDIR
> are set in environment\n");
>        exit(1);
> -    }
>    }
>
> -  new_argv[0] = DXE_LD;
> +  new_argv[0] = dxe_ld;
>    new_argv[1] = "-X";
>    new_argv[2] = "-S";
>    new_argv[3] = "-r";
> @@ -451,7 +497,7 @@
>    new_argv[6] = "-L";
>    new_argv[7] = libdir;
>    new_argv[8] = "-T";
> -  new_argv[9] = "dxe.ld";
> +  new_argv[9] = dxe_sc;
>
>    if (!strcmp(base_name(argv[0]), "dxegen"))
>      /* invoked as `dxegen' */
> @@ -736,7 +782,7 @@
>    if ((rv = my_spawn(argv)) != 0)
>    {
>      if (rv == -1)
> -      perror(DXE_LD);
> +      perror("ld");
>      exit(rv);
>    }
>
> @@ -861,7 +907,7 @@
>        if (rv)
>        {
>          if (rv == -1)
> -          perror(DXE_LD);
> +          perror("ld");
>          exit(rv);
>        }
>
> @@ -1336,7 +1382,8 @@
>      }
>
>      /* Pre-compile the resolver's output. */
> -    rv = system("gcc -o "TEMP_S_FILE" -O2 -S "TEMP_BASE".c");
> +    sprintf(cmdbuf, "%s -o %s -O2 -S %s.c", dxe_cc, TEMP_S_FILE,
> TEMP_BASE);
> +    rv = system(cmdbuf);
>      remove(TEMP_BASE".c");
>      if (rv != 0)
>      {
> @@ -1420,7 +1467,8 @@
>    atexit(exit_cleanup);
>
>    /* Allright, now run the assembler on the resulting file */
> -  if ((rv = system("as -o "TEMP_O_FILE" "TEMP_S_FILE)) != 0)
> +  sprintf(cmdbuf, "%s -o %s %s", dxe_as, TEMP_O_FILE, TEMP_S_FILE);
> +  if ((rv = system(cmdbuf)) != 0)
>    {
>      if (rv == -1)
>        perror("as");
> @@ -1428,7 +1476,7 @@
>    }
>
>    /* Okey-dokey, let's stuff the object file into the archive */
> -  sprintf(cmdbuf, "ar crs %s "TEMP_O_FILE, opt.implib);
> +  sprintf(cmdbuf, "%s crs %s "TEMP_O_FILE, dxe_ar, opt.implib);
>    if ((rv = system(cmdbuf)) != 0)
>    {
>      if (rv == -1)
> @@ -1512,6 +1560,7 @@
>    progname = argv[0];
>    /* Prepare the command line for ld */
>    new_argv = (const char **)malloc((argc - 1 + NUMBER_OF_LINKER_ARGS
> + NUMBER_OF_ADDITIONAL_LOADED_LIBS + 2 + 1) * sizeof(char *));
> +  process_env();
>    process_args(argc, argv, new_argv);
>
>    if (opt.showdep || opt.showexp || opt.showunres)
> Index: src/makefile.def
> ===================================================================
> RCS file: /cvs/djgpp/djgpp/src/makefile.def,v
> retrieving revision 1.5
> diff -u -r1.5 makefile.def
> --- src/makefile.def	6 Feb 2003 10:40:24 -0000	1.5
> +++ src/makefile.def	5 Jun 2015 08:18:17 -0000
> @@ -26,6 +26,7 @@
>  # For building distributed (djgpp) libraries and programs
>  CROSS_GCC = gcc
>  CROSS_AR = ar
> +CROSS_AS = as
>  CROSS_LD = ld
>  CROSS_STRIP = strip
>  CROSS_BISON = bison
> @@ -33,6 +34,7 @@
>  # For building native programs (hostbin/*); assumes GNU versions
>  GCC = gcc -g
>  AR = ar
> +AS = as
>  LD = ld
>  STRIP = strip
>  BISON = bison
> @@ -47,6 +49,7 @@
>
>  CROSS_GCC = i586-pc-msdosdjgpp-gcc -pipe
>  CROSS_AR = i586-pc-msdosdjgpp-ar
> +CROSS_AS = i586-pc-msdosdjgpp-as
>  CROSS_LD = i586-pc-msdosdjgpp-ld
>  CROSS_STRIP = i586-pc-msdosdjgpp-strip
>  CROSS_BISON = bison
> @@ -56,6 +59,7 @@
>
>  GCC = gcc -g -O2
>  AR = ar
> +AS = as
>  LD = ld
>  STRIP = strip
>  BISON = bison
>

Sigh, the attached fixed one does actually compile.
Comments?

--
O.S.

--001a113f8e6ab4c8a50517c159fb
Content-Type: application/octet-stream; name="dxe3gen_2b.patch"
Content-Disposition: attachment; filename="dxe3gen_2b.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file0

SW5kZXg6IHNyYy9tYWtlZmlsZS5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9kamdwcC9k
amdwcC9zcmMvbWFrZWZpbGUuZGVmLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtdSAt
cjEuNSBtYWtlZmlsZS5kZWYKLS0tIHNyYy9tYWtlZmlsZS5kZWYJNiBGZWIgMjAwMyAxMDo0MDoy
NCAtMDAwMAkxLjUKKysrIHNyYy9tYWtlZmlsZS5kZWYJNSBKdW4gMjAxNSAwODo0MDoxMiAtMDAw
MApAQCAtMjYsNiArMjYsNyBAQAogIyBGb3IgYnVpbGRpbmcgZGlzdHJpYnV0ZWQgKGRqZ3BwKSBs
aWJyYXJpZXMgYW5kIHByb2dyYW1zCiBDUk9TU19HQ0MgPSBnY2MKIENST1NTX0FSID0gYXIKK0NS
T1NTX0FTID0gYXMKIENST1NTX0xEID0gbGQKIENST1NTX1NUUklQID0gc3RyaXAKIENST1NTX0JJ
U09OID0gYmlzb24KQEAgLTMzLDYgKzM0LDcgQEAKICMgRm9yIGJ1aWxkaW5nIG5hdGl2ZSBwcm9n
cmFtcyAoaG9zdGJpbi8qKTsgYXNzdW1lcyBHTlUgdmVyc2lvbnMKIEdDQyA9IGdjYyAtZwogQVIg
PSBhcgorQVMgPSBhcwogTEQgPSBsZAogU1RSSVAgPSBzdHJpcAogQklTT04gPSBiaXNvbgpAQCAt
NDcsNiArNDksNyBAQAogCiBDUk9TU19HQ0MgPSBpNTg2LXBjLW1zZG9zZGpncHAtZ2NjIC1waXBl
CiBDUk9TU19BUiA9IGk1ODYtcGMtbXNkb3NkamdwcC1hcgorQ1JPU1NfQVMgPSBpNTg2LXBjLW1z
ZG9zZGpncHAtYXMKIENST1NTX0xEID0gaTU4Ni1wYy1tc2Rvc2RqZ3BwLWxkCiBDUk9TU19TVFJJ
UCA9IGk1ODYtcGMtbXNkb3NkamdwcC1zdHJpcAogQ1JPU1NfQklTT04gPSBiaXNvbgpAQCAtNTYs
NiArNTksNyBAQAogCiBHQ0MgPSBnY2MgLWcgLU8yCiBBUiA9IGFyCitBUyA9IGFzCiBMRCA9IGxk
CiBTVFJJUCA9IHN0cmlwCiBCSVNPTiA9IGJpc29uCkluZGV4OiBzcmMvZHhlL21ha2VmaWxlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvZGpncHAvZGpncHAvc3JjL2R4ZS9tYWtlZmlsZSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXIxLjggbWFrZWZpbGUKLS0tIHNyYy9keGUv
bWFrZWZpbGUJMjEgSnVsIDIwMTMgMTI6MjU6NTggLTAwMDAJMS44CisrKyBzcmMvZHhlL21ha2Vm
aWxlCTUgSnVuIDIwMTUgMDg6NDA6MTIgLTAwMDAKQEAgLTMyLDggKzMyLDkgQEAKIAkkKExJTksp
CiAJJChFWEUpCiAKK0NST1NTX0NDID0gJCh3b3JkIDEsJChDUk9TU19HQ0MpKQogJChIT1NUQklO
KS9keGVnZW4uZXhlIDogZHhlM2dlbi5jIGluaXQxLmggaW5pdDIuaCBpbml0My5oIGluaXQ0Lmgg
aW5pdDUuaCBmaW5pMS5oIGZpbmkyLmggZmluaTMuaCBmaW5pNC5oIGZpbmk1LmgKLQkkKEdDQykg
LUREWEVfTEQ9XCIkKENST1NTX0xEKVwiIGR4ZTNnZW4uYyAtbyAkQAorCSQoR0NDKSAtRERYRV9M
RD1cIiQoQ1JPU1NfTEQpXCIgLUREWEVfQ0M9XCIkKENST1NTX0NDKVwiIC1ERFhFX0FSPVwiJChD
Uk9TU19BUilcIiAtRERYRV9BUz1cIiQoQ1JPU1NfQVMpXCIgZHhlM2dlbi5jIC1vICRACiAKIGNs
ZWFuIDo6CiAJQC0kKE1JU0MpIHJtICoubyAqLmggJChIT1NUQklOKS9keGVnZW4uZXhlCkluZGV4
OiBzcmMvZHhlL2R4ZTNnZW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2RqZ3BwL2RqZ3Bw
L3NyYy9keGUvZHhlM2dlbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXUgLXIx
LjIwIGR4ZTNnZW4uYwotLS0gc3JjL2R4ZS9keGUzZ2VuLmMJMjMgTWF5IDIwMTUgMDg6MjA6MDUg
LTAwMDAJMS4yMAorKysgc3JjL2R4ZS9keGUzZ2VuLmMJNSBKdW4gMjAxNSAwODo0MDoxMiAtMDAw
MApAQCAtMTY1LDEwICsxNjUsMjMgQEAKICNlbmRpZiAgLyogICFERUJVR19TVVBQT1JUX1BSSU5U
X1JFTE9DQVRJT05fRElSRUNUSVZFUyAgKi8KIAogCisvKiBDcm9zcyBjb21waWxlIHRvb2wgbmFt
ZXMgKi8KKyNpZm5kZWYgRFhFX0NDCisjZGVmaW5lIERYRV9DQyAgImdjYyIKKyNlbmRpZgorI2lm
bmRlZiBEWEVfQVMKKyNkZWZpbmUgRFhFX0FTICAiYXMiCisjZW5kaWYKKyNpZm5kZWYgRFhFX0FS
CisjZGVmaW5lIERYRV9BUiAgImFyIgorI2VuZGlmCiAjaWZuZGVmIERYRV9MRAotLyogQ3Jvc3Mg
Y29tcGlsZSBsZCBuYW1lL2xvY2F0aW9uICovCiAjZGVmaW5lIERYRV9MRCAgImxkIgogI2VuZGlm
CisjaWZuZGVmIERYRV9TQworI2RlZmluZSBEWEVfU0MgICJkeGUubGQiCisjZW5kaWYKKwogI2lm
ZGVmIF9QT1NJWF9TT1VSQ0UKIC8qIExpbnV4IHZpb2xhdGVzIFBPU0lYLjEgYW5kIGRlZmluZXMg
dGhpcywgYnV0IGl0IHNob3VsZG4ndC4uICovCiAjdW5kZWYgX1BPU0lYX1NPVVJDRQpAQCAtMjk3
LDYgKzMxMCwxNSBAQAogfTsKIAogCitzdGF0aWMgY2hhciAqbGliZGlyOworLyogYnVpbGQgdG9v
bHMgKi8KK3N0YXRpYyBjaGFyICpkeGVfY2M7IC8qIGRlZmF1bHQ6ICJnY2MiICovCitzdGF0aWMg
Y2hhciAqZHhlX2FzOyAvKiBkZWZhdWx0OiAiYXMiICovCitzdGF0aWMgY2hhciAqZHhlX2FyOyAv
KiBkZWZhdWx0OiAiYXIiICovCitzdGF0aWMgY2hhciAqZHhlX2xkOyAvKiBkZWZhdWx0OiAibGQi
ICovCisvKiBsaW5rZXIgc2NyaXB0ICovCitzdGF0aWMgY2hhciAqZHhlX3NjOyAvKiBkZWZhdWx0
OiAiZHhlLmxkIiAqLworCiAKIC8qIERlc2M6IHJlcGxhY2VzIGJhY2tzbGFzaCB3aXRoIHNsYXNo
IGluIGEgcGF0aAogICoKQEAgLTQxMCw2ICs0MzIsNDUgQEAKIAogCiAKKy8qIERlc2M6IHByb2Nl
c3MgdGhlIERYRV8/PyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAqLworc3RhdGljIHZvaWQgcHJv
Y2Vzc19lbnYodm9pZCkKK3sKKyAgY29uc3QgY2hhciAqZTsKKworICBpZiAoKGUgPSBnZXRlbnYo
IkRYRV9DQyIpKSAhPSBOVUxMKQorICAgICAgIGR4ZV9jYyA9IHN0cmR1cChlKTsKKyAgZWxzZSBk
eGVfY2MgPSBzdHJkdXAoRFhFX0NDKTsKKworICBpZiAoKGUgPSBnZXRlbnYoIkRYRV9BUyIpKSAh
PSBOVUxMKQorICAgICAgIGR4ZV9hcyA9IHN0cmR1cChlKTsKKyAgZWxzZSBkeGVfYXMgPSBzdHJk
dXAoRFhFX0FTKTsKKworICBpZiAoKGUgPSBnZXRlbnYoIkRYRV9BUiIpKSAhPSBOVUxMKQorICAg
ICAgIGR4ZV9hciA9IHN0cmR1cChlKTsKKyAgZWxzZSBkeGVfYXIgPSBzdHJkdXAoRFhFX0FSKTsK
KworICBpZiAoKGUgPSBnZXRlbnYoIkRYRV9MRCIpKSAhPSBOVUxMKQorICAgICAgIGR4ZV9sZCA9
IHN0cmR1cChlKTsKKyAgZWxzZSBkeGVfbGQgPSBzdHJkdXAoRFhFX0xEKTsKKworICBpZiAoKGUg
PSBnZXRlbnYoIkRYRV9TQyIpKSAhPSBOVUxMKQorICAgICAgIGR4ZV9zYyA9IHN0cmR1cChlKTsK
KyAgZWxzZSBkeGVfc2MgPSBzdHJkdXAoRFhFX1NDKTsKKworICBpZiAoKGUgPSBnZXRlbnYoIkRY
RV9MRF9MSUJSQVJZX1BBVEgiKSkgIT0gTlVMTCkKKyAgICAgICBsaWJkaXIgPSBzdHJkdXAoZSk7
CisgIGVsc2UgaWYgKChlID0gZ2V0ZW52KCJESkRJUiIpKSAhPSBOVUxMKSB7CisgICAgICAgc2l6
ZV90IHN6ID0gc3RybGVuKGUpICsgNVU7CisgICAgICAgbGliZGlyID0gbWFsbG9jKHN6KTsKKyAg
ICAgICBzdHJjcHkobGliZGlyLCBlKTsKKyAgICAgICBzdHJjYXQobGliZGlyLCAiL2xpYiIpOwor
ICAgICAgIGNhbm9uaWNhbGl6ZV9wYXRoKGxpYmRpcik7CisgIH0KKyAgZWxzZSBsaWJkaXIgPSBO
VUxMOworfQorCisKIC8qIERlc2M6IHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3MKICAqCiAgKiBJ
biAgOiBubyBvZiBhcmd1bWVudHMsIGFyZ3VtZW50IGxpc3QsIHB0ciB0byBzdG9yZSBsaW5rZXIg
YXJncwpAQCAtNDE5LDMwICs0ODAsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgcHJvY2Vzc19hcmdz
KGludCBhcmdjLCBjaGFyICphcmd2W10sIGNvbnN0IGNoYXIgKm5ld19hcmd2W10pCiB7Ci0gIHN0
YXRpYyBjaGFyIGxpYmRpcltGSUxFTkFNRV9NQVhdOwotICBjaGFyICpwOwogICBpbnQgaSwgbmV3
X2FyZ2MgPSBOVU1CRVJfT0ZfTElOS0VSX0FSR1M7CiAKLSAgcCA9IGdldGVudigiRFhFX0xEX0xJ
QlJBUllfUEFUSCIpOwotICBpZiAocCkKLSAgICBzdHJjcHkobGliZGlyLCBwKTsKLSAgZWxzZQor
ICBpZiAoIWxpYmRpcikKICAgewotICAgIHAgPSBnZXRlbnYoIkRKRElSIik7Ci0gICAgaWYgKHAp
Ci0gICAgewotICAgICAgc3RyY3B5KGxpYmRpciwgcCk7Ci0gICAgICBzdHJjYXQobGliZGlyLCAi
L2xpYiIpOwotICAgICAgY2Fub25pY2FsaXplX3BhdGgobGliZGlyKTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IG5laXRoZXIgRFhFX0xEX0xJ
QlJBUllfUEFUSCBub3IgREpESVIgYXJlIHNldCBpbiBlbnZpcm9ubWVudFxuIik7CiAgICAgICBl
eGl0KDEpOwotICAgIH0KICAgfQogCi0gIG5ld19hcmd2WzBdID0gRFhFX0xEOworICBuZXdfYXJn
dlswXSA9IGR4ZV9sZDsKICAgbmV3X2FyZ3ZbMV0gPSAiLVgiOwogICBuZXdfYXJndlsyXSA9ICIt
UyI7CiAgIG5ld19hcmd2WzNdID0gIi1yIjsKQEAgLTQ1MSw3ICs0OTcsNyBAQAogICBuZXdfYXJn
dls2XSA9ICItTCI7CiAgIG5ld19hcmd2WzddID0gbGliZGlyOwogICBuZXdfYXJndls4XSA9ICIt
VCI7Ci0gIG5ld19hcmd2WzldID0gImR4ZS5sZCI7CisgIG5ld19hcmd2WzldID0gZHhlX3NjOwog
CiAgIGlmICghc3RyY21wKGJhc2VfbmFtZShhcmd2WzBdKSwgImR4ZWdlbiIpKQogICAgIC8qIGlu
dm9rZWQgYXMgYGR4ZWdlbicgKi8KQEAgLTczNiw3ICs3ODIsNyBAQAogICBpZiAoKHJ2ID0gbXlf
c3Bhd24oYXJndikpICE9IDApCiAgIHsKICAgICBpZiAocnYgPT0gLTEpCi0gICAgICBwZXJyb3Io
RFhFX0xEKTsKKyAgICAgIHBlcnJvcigibGQiKTsKICAgICBleGl0KHJ2KTsKICAgfQogCkBAIC04
NjEsNyArOTA3LDcgQEAKICAgICAgIGlmIChydikKICAgICAgIHsKICAgICAgICAgaWYgKHJ2ID09
IC0xKQotICAgICAgICAgIHBlcnJvcihEWEVfTEQpOworICAgICAgICAgIHBlcnJvcigibGQiKTsK
ICAgICAgICAgZXhpdChydik7CiAgICAgICB9CiAKQEAgLTEzMzYsNyArMTM4Miw4IEBACiAgICAg
fQogCiAgICAgLyogUHJlLWNvbXBpbGUgdGhlIHJlc29sdmVyJ3Mgb3V0cHV0LiAqLwotICAgIHJ2
ID0gc3lzdGVtKCJnY2MgLW8gIlRFTVBfU19GSUxFIiAtTzIgLVMgIlRFTVBfQkFTRSIuYyIpOwor
ICAgIHNwcmludGYoY21kYnVmLCAiJXMgLW8gJXMgLU8yIC1TICVzLmMiLCBkeGVfY2MsIFRFTVBf
U19GSUxFLCBURU1QX0JBU0UpOworICAgIHJ2ID0gc3lzdGVtKGNtZGJ1Zik7CiAgICAgcmVtb3Zl
KFRFTVBfQkFTRSIuYyIpOwogICAgIGlmIChydiAhPSAwKQogICAgIHsKQEAgLTE0MjAsNyArMTQ2
Nyw4IEBACiAgIGF0ZXhpdChleGl0X2NsZWFudXApOwogCiAgIC8qIEFsbHJpZ2h0LCBub3cgcnVu
IHRoZSBhc3NlbWJsZXIgb24gdGhlIHJlc3VsdGluZyBmaWxlICovCi0gIGlmICgocnYgPSBzeXN0
ZW0oImFzIC1vICJURU1QX09fRklMRSIgIlRFTVBfU19GSUxFKSkgIT0gMCkKKyAgc3ByaW50Zihj
bWRidWYsICIlcyAtbyAlcyAlcyIsIGR4ZV9hcywgVEVNUF9PX0ZJTEUsIFRFTVBfU19GSUxFKTsK
KyAgaWYgKChydiA9IHN5c3RlbShjbWRidWYpKSAhPSAwKQogICB7CiAgICAgaWYgKHJ2ID09IC0x
KQogICAgICAgcGVycm9yKCJhcyIpOwpAQCAtMTQyOCw3ICsxNDc2LDcgQEAKICAgfQogCiAgIC8q
IE9rZXktZG9rZXksIGxldCdzIHN0dWZmIHRoZSBvYmplY3QgZmlsZSBpbnRvIHRoZSBhcmNoaXZl
ICovCi0gIHNwcmludGYoY21kYnVmLCAiYXIgY3JzICVzICJURU1QX09fRklMRSwgb3B0LmltcGxp
Yik7CisgIHNwcmludGYoY21kYnVmLCAiJXMgY3JzICVzICJURU1QX09fRklMRSwgZHhlX2FyLCBv
cHQuaW1wbGliKTsKICAgaWYgKChydiA9IHN5c3RlbShjbWRidWYpKSAhPSAwKQogICB7CiAgICAg
aWYgKHJ2ID09IC0xKQpAQCAtMTUxMiw2ICsxNTYwLDcgQEAKICAgcHJvZ25hbWUgPSBhcmd2WzBd
OwogICAvKiBQcmVwYXJlIHRoZSBjb21tYW5kIGxpbmUgZm9yIGxkICovCiAgIG5ld19hcmd2ID0g
KGNvbnN0IGNoYXIgKiopbWFsbG9jKChhcmdjIC0gMSArIE5VTUJFUl9PRl9MSU5LRVJfQVJHUyAr
IE5VTUJFUl9PRl9BRERJVElPTkFMX0xPQURFRF9MSUJTICsgMiArIDEpICogc2l6ZW9mKGNoYXIg
KikpOworICBwcm9jZXNzX2VudigpOwogICBwcm9jZXNzX2FyZ3MoYXJnYywgYXJndiwgbmV3X2Fy
Z3YpOwogCiAgIGlmIChvcHQuc2hvd2RlcCB8fCBvcHQuc2hvd2V4cCB8fCBvcHQuc2hvd3VucmVz
KQo=
--001a113f8e6ab4c8a50517c159fb--

- Raw text -


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