www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2002/12/18/01:30:16

Date: Wed, 18 Dec 2002 08:29:18 +0200 (IST)
From: Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
X-Sender: eliz AT is
To: 065211 AT bud DOT cc DOT swin DOT edu DOT au
cc: djgpp AT delorie DOT com
Subject: Re: Which editor, and, install prob with tmp dir
In-Reply-To: <atp2hq$1ve$1@c3p0.cc.swin.edu.au>
Message-ID: <Pine.SUN.3.91.1021218082133.4677F-100000@is>
MIME-Version: 1.0
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

On 18 Dec 2002 065211 AT bud DOT cc DOT swin DOT edu DOT au wrote:

> : >Anyway, main query
> : >2. Why is getenv("TMPDIR") returning "c:\djgpp\tmp" (back slashes) when from 
> : >bash, TMPDIR is definitely set with forward slashes?  Thanks in advance 
> : >for help on this one, it's driving me... buggy!  :)
> 
> : I may be wrong with this, but BASH is a unix shell and as such will
> : try to convert backslashs to forward slashes. It can use either and
> : converts between both.
> : The setup code to populate the environment variables copies DOS memory
> : and as dos uses backslahes when you call getenv() there are
> : backslashes in it. See crt1.c for environment setup.
> 
> Hmmm, but TMPDIR is not defined in my normal DOS environment, only in 
> bash (.bash_login).

I already asked this in this thread, but got no replies: did you tell 
Bash to export your definition of TMPDIR?  How _exactly_ did you set 
TMPDIR in .bash_login? can you post the relevant fragment?

> Now getenv() & tmpnam() do what I expect: returns "c:/djgpp/tmp/dj10000" 
> (but that only 'fixes' TMPDIR, no other variable), and now I'm suspicious
> that there's some weird problem with system()!

There's nothing weird with system, see below.

> >     sprintf(buf, "dir %s", n);  //      c:/djgpp/tmp
> >     printf("system(\"%s\")\n", buf);
> >         system(buf);
> > 
> >     return 0;
> > }
> 
> with TMPDIR excplicitly set in djgpp.env:
> 
> > c:/djgpp/tmp
> > c:/djgpp/tmp/dj500000
> > system("dir c:/djgpp/tmp/dj500000")
> > dir: c\:/djgpp/tmp/dj500000: No such file or directory (ENOENT)
>         ^ wtf?

Does your SHELL variable point to Bash?  If so, don't use "dir" unless 
you install the ported Fileutils; I suspect that Bash is called by 
`system' (because `system' notices you want to use it as the shell), and 
Bash excapes the special characters such as the colon.

> without TMPDIR explicitly set:
> 
> > c:\djgpp\tmp
> > c:\djgpp\tmp/dj500000
> > system("dir c:\djgpp\tmp/dj500000")
> > dir: c\:djgpptmp/dj500000: No such file or directory (ENOENT)
>         ^^^    ^
> 
> Is dir escaping the backslashes?

No, the shell is unescaping them: Bash removes any single backslashes, 
since they are used to quote special characters.

- Raw text -


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