Hi folks,
Using Unicon 11.1 beta
I'm trying to convert a large application to work under windows. It's been
running very effectively under various *NIX and *NUX for a long time.
The problem lies around the use of
pfd := open("command line", "pr")
which I'm using to invoke another Unicon program named wacro.bat as per the
usual output of icont on windows.
Before I describe my real problem, I think I spot a defect in
src/runtime/rsys.r
around about line 1213 in the definition of popen() for Windows.
/* Look for the application name */
for (p = cmd; *p && isspace(*p); p++);
if (*p == '"') {
q = ++p;
while(*p && *p != '"') p++;
->> if (*p != '\0') {
fprintf(stderr, "popen: malformed command (\" not terminated)\n");
return NULL;
}
}
else
as marked with ->> - shouldn't that say
if(*p != '"')
or
if(*p == '\0')
I tried wrapping my first command line word with double-quotes, and it did
indeed fail, although I didn't see the error message.
Now, onto the real problem:
The image() of my command argument to open( , "pr") is
"wacro.bat -I c:\\devel\\master\\all.4gm\\lib1.4gs
-I c:\\Progra~1\\WacGen\\lib-trunk\\include
\"AUDIT=1\" \"STAGE_RELEASE=6.0\" \"NEW_MAIN=1\" \"GENERO=2.10\"
\"ROWID_RET=1\" \"FORMCOLORS=none\" \"ORACLE=1\" \"ROWID_TYPE=integer\"
\"MSV=1\" \"ROWID_GET=1\" \"STAGE_CLASS=auth\" \"APP_NAME=Authority\"
\"TOOLS=4.11\" \"MAP_MAIN=1\" \"APP_CLASS=auth\" \"MAP_4GL=1\"
\"ROWID_CHK=1\" \"FOURJAYS=2.10\" \"APP_RELEASE=6.0\" \"ROWID_PK=1\"
\"ODI_4JS=1\" -f ..\\i_al001.4gs\\sal001a.trg"
or as a pure unescaped string I guess that comes out as;
wacro.bat -I c:\devel\master\all.4gm\lib1.4gs
-I c:\Progra~1\WacGen\lib-trunk\include
"AUDIT=1" "STAGE_RELEASE=6.0" "NEW_MAIN=1" "GENERO=2.10" "ROWID_RET=1"
"FORMCOLORS=none" "ORACLE=1" "ROWID_TYPE=integer" "MSV=1" "ROWID_GET=1"
"STAGE_CLASS=auth" "APP_NAME=Authority" "TOOLS=4.11" "MAP_MAIN=1"
"APP_CLASS=auth" "MAP_4GL=1" "ROWID_CHK=1" "FOURJAYS=2.10"
"APP_RELEASE=6.0" "ROWID_PK=1" "ODI_4JS=1"
-f ..\i_al001.4gs\sal001a.trg
The process appears to be starting up, but it is not feeding any lines back
up the pipe, and I cannot see any output from simple traces like
write(&errout, "Here's WACRO!")
At the point it's hanging, I see two iconx processes, two cmd processes, and
the perl process that wraps the whole shebang
perl
cmd
iconx generator
cmd
iconx wacro
I can't (at this stage) see the command line arguments to the cmd and iconx
processes but I'm hunting down a utility that might show me. Since the
output of &errout is not reaching the console either, I've just made wacro
write it's command line arguments to a file and then close it to ensure
it's flushed. The contents come out as:
WACRO HERE!
-I
c:\devel\master\all.4gm\lib1.4gs
-I
c:\Progra~1\WacGen\lib-trunk\include
AUDIT=1
STAGE_RELEASE=6.0
NEW_MAIN=1
GENERO=2.10
ROWID_RET=1
which is about 210 bytes all-up.
It's looking like 255 might be the magic limit, and the balance is being
consumed by %CMDSPEC% /c path-to-wacro.bat (with or without the %CMDSPEC%)
The rest of the code in rsys.r proceeds with arcane windows system calls
that I'm clueless about.
Can anyone share any hard facts about my limits, and maybe any work-arounds
that might grow the legal command line of my CMD ?
If not I'll have to muck around with tempfiles, which I don't like because
they tend to hang around at the slightest opportunity...
------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises
looking to deploy the next generation of Solaris that includes the latest
innovations from Sun and the OpenSource community. Download a copy and
enjoy capabilities such as Networking, Storage and Virtualization.
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
Unicon-group mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/unicon-group