delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/02/25/14:42:05

From: "Michael Allison" <michael DOT allison2 AT sympatico DOT ca>
Newsgroups: comp.os.msdos.djgpp
References: <wkbm6.226404$Pm2 DOT 3670275 AT news20 DOT bellglobal DOT com>
Subject: Re: Eradicating djgpp W2000 problem
Lines: 79
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.50.4133.2400
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400
Message-ID: <CScm6.227001$Pm2.3684848@news20.bellglobal.com>
Date: Sun, 25 Feb 2001 19:16:50 GMT
NNTP-Posting-Host: 216.209.119.164
X-Trace: news20.bellglobal.com 983128610 216.209.119.164 (Sun, 25 Feb 2001 14:16:50 EST)
NNTP-Posting-Date: Sun, 25 Feb 2001 14:16:50 EST
Organization: Sympatico
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

"Michael Allison" <michael DOT allison2 AT sympatico DOT ca> wrote in message
news:wkbm6.226404$Pm2 DOT 3670275 AT news20 DOT bellglobal DOT com...
>
> Let's constructively try to come up with the absolute minimum set
> of two programs that can cause the problem to occur, as a start
> to understanding it.

There is obviously more to reproducing this problem than
nesting djgpp programs as people claim.  The code below
went to 6 levels of nesting fine on Windows 2000 professional.

So where do we go from here?

/* djgpp toplevel test program for isolating
   Windows 2000 problem */
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <process.h>

char *default_shell = "command.com";
static int execute_by_shell;
int dos_status;
int proc_return;
int nesting_level = 0;

#define CMDBUFSIZ 200
char *parentenv[] =
{
   "PARENT1=environment will be",
   "PARENT2=passed to child process",
   (char *)0
};

char nestval[CMDBUFSIZ];

char *args[] = {
   "parent.exe",
   nestval,
   (char *)0
};


int main(int argc, char *argv[])
{
    char mycmdline[CMDBUFSIZ];
    execute_by_shell = 0;

    if (argc > 1)
 nesting_level = atoi(argv[1]);
    nesting_level++;
    if (nesting_level > 6) return 0;
    (void) itoa(nesting_level, nestval, 10);

    printf("\nIn child, nesting level %s\n",
  nestval);

    if (execute_by_shell) {
 char *cmdline = mycmdline;
 (void) strncpy(mycmdline, argv[0],
   CMDBUFSIZ - (sizeof(nesting_level) + 1));
 (void) strcat(mycmdline, " ");
 (void) strcat(mycmdline, nestval);
 proc_return = system (cmdline);
    } else {
 proc_return = spawnvpe (P_WAIT, args[0], args, parentenv);
    }
    /* If the child got a signal, dos_status has its
       high 8 bits set, so be careful not to alter them.  */
    if (proc_return == -1)
 dos_status |= 0xff;
    else
 dos_status |= (proc_return & 0xff);
    return dos_status;
}




- Raw text -


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