Mail Archives: djgpp/2002/12/18/06:12:53
[Please keep this discussion on the news group, as I think it is useful
for others to read it.]
On Wed, 18 Dec 2002, Jeremy W. Murphy wrote:
> Sorry, it's in .bashrc, not .bash_login:
>
> TMPDIR="${DJDIR}/tmp"
> export CVSROOT EDITOR TMPDIR
So exporting is not the problem.
> Yup, when I unset SHELL, the result changes to:
>
> c:\djgpp\tmp
> c:\djgpp\tmp/dj500000
> system("dir c:\djgpp\tmp/dj500000")
> dir: c\:/djgpp/tmp/dj500000: No such file or directory (ENOENT)
> ^
> How do you explain the backslash there in "c\:/djgpp" ???
Since you have Fileutils installed, the `dir' you invoke here is still
dir.exe from Fileutils. (The DJGPP implementation of `system' looks
along the PATH for any command first, and only if it doesn't find it,
does it consider the possibility that the command is a shell built-in.
And I'm guessing that the backslash is not a real one: it's added by
`dir.exe' for semi-cosmetic purposes, namely, if you want to pass the
message printed by `dir.exe' to some Bash command, it's a good idea to
escape the colon, since otherwise that other Bash command might fail.
If you want to invoke the command.com's `dir', try creating the command
you pass to `system' like this:
sprintf(buf, "command.com /c dir %s", n);
(Btw, the subtleties of the `system' operation are described in great
detail in the DJGPP libc reference; I suggest to read that if you didn't
already.)
Given that the issue of the backslash before the colon is understood,
what problem(s) are left that you don't know how to solve?
> So what is the ideal environment setup regarding directory names? To have
> getenv() return them as forward- or back-slashed?
You should strive to have them forward-slashed if your SHELL variable
points to Bash, back-slashed otherwise.
> I still don't know how
> getenv() is turning an exported forward-slashed dir into a back-slashed
> one!
I don't understand that fully, either yet. One thing that isn't clear to
me is whether, when you ran the program after unsetting SHELL, you ran it
from inside Bash or from a normal DOS box.
Also, did you edit your djgpp.env file in any way, and if so, what
changes did you make there?
> But evidently back-slashed dir names are incompatible with having
> SHELL=bash.
That's very true.
> What does $TMPDIR, $SHELL and getenv("TMPDIR") return on your
> system?
SHELL is not set, TMPDIR and getenv return what you expect (i.e. they
don't convert slashes). But that's from memory, I cannot actually check
this where I'm typing this message.
- Raw text -