alex at alexwaugh.com
Sat Apr 15 06:12:54 PDT 2006
Alex Waugh <alex at alexwaugh.com> wrote:
> I've been having problems with CMunge, when it invokes the assembler
> (both with and without -tgcc). It appears that the asembler recieves an
> empty command line, and hence complains that it has no input files.
> If I change the our_system function to remove all the DDEUtils stuff
> then things work fine. I assume that this code was working at some
> point, which suggests that either DDEUtils or the SCL have changed.
> Is anyone else seeing this issue?
I've now had a better look at this. It seems that the SharedCLibrary
5.43 (and earlier) will set the DDEUtils command line if the string
passed to system() is 256 or more characters long. If the string is
less than 256, then it will not do anything with DDEUtils.
With SCL 5.53, it will also use DDEUtils if the command line is greater
than or equal to 256 characters. If it is less than 256 characters then
it will clear the DDEUtils command line (Which I think is better
behaviour as it prevents a stale command line left over from a previous
process causing problems).
The problem the code in CMunge is trying to solve is if the command
line is less than 256 characters, but not by much. In this case,
DDEUtils won't get used by the SCL system, but if the command contained
aliases or variables that get expanded then they could then push the
command line length over 256 characters and hence fail.
On RISC OS 4 and later, the command line limit has been raised from 256
to 1024 characters, so I don't believe this issue is a problem anymore
(unless the expansion more than quadruples the command line length,
which is very unlikely).
So what I plan to do is make CMunge only set this additional DDEUtils
commandline itself if the OS version is < 4.
Alex Waugh alex at alexwaugh.com
PHP, Roots, Subversion, WebJames and more from http://www.alexwaugh.com/
More information about the gcc