On Sat, Mar 26, 2011 at 10:04, Mehul Sanghvi <mehul.sang...@gmail.com> wrote: > On Sat, Mar 26, 2011 at 03:10, Paolo Bonzini <bonz...@gnu.org> wrote: >> On 03/26/2011 02:12 AM, Mehul Sanghvi wrote: >>> >>> OK so once I modify kernel/CFuncs.st and I believe I need to also >>> modify libgst/cint.c what else do I need to do in order to get this to >>> work ? >>> >>> >>> In kernel/CFuncs.st >>> >>> environ: aString [ >>> <category: 'c call-outs'> >>> <cCall: 'environ' returning: #(#ptr #string) args: #()> >>> >>> ] >> >> Where did you add this? >> > > I did that right below where there was a similar > bit of code for getenv. I just copied that piece of > code and adjusted it based on the information > in this mailing list thread. > > >>> and in libgst/cint.c >>> >>> _gst_define_cfunc ("getenv", getenv); >>> _gst_define_cfunc ("environ", environ); >> >> You should do >> >> static char **get_environ(void) >> { >> return environ; >> } >> >> ... >> >> _gst_define_cfunc ("get_environ", get_environ); >> >> Paolo >>
Below is the code I am running, the result I get, and the diff of what I've changed. I'm pretty sure my code in the smalltalk script is wrong ------ BEGIN CODE ------- #!/usr/local/bin/gst -f Transcript showCr: 'Content-type: text/html'; nl . '' displayNl . '<HTML>' displayNl . '<HEAD><TITLE>Testing CGI/Smalltalk</TITLE></HEAD>' displayNl . '<BODY>' displayNl . '<H2>Yo! Smalltalk, Whats up ? </H2>' displayNl . Transcript nl ; showCr: '==== All Env Vars below ====== <br>'; nl. "pipe := FileStream popen: ('set', logFile) dir: FileStream read . Transcript showCr: pipe contents ." env := Smalltalk environ . "Transcript nl; showCr: env ; nl ." '</BODY>' displayNl . '</HTML>' displayNl . --------- END CODE ------- --------- BEGIN OUTPUT ---- % gst test-cgi.st Content-type: text/html <HTML> <HEAD><TITLE>Testing CGI/Smalltalk</TITLE></HEAD> <BODY> <H2>Yo! Smalltalk, Whats up ? </H2> ==== All Env Vars below ====== <br> Object: SystemDictionary new: 512 "<0x40290818>" error: did not understand #environ MessageNotUnderstood(Exception)>>signal (ExcHandling.st:254) SystemDictionary(Object)>>doesNotUnderstand: #environ (SysExcept.st:1407) SystemDictionary(BindingDictionary)>>doesNotUnderstand: #environ (BindingDict.st:181) UndefinedObject>>executeStatements (test-cgi.st:13) </BODY> </HTML> -------- END OUTPUT -------- ------- BEGIN DIFF ------- diff --git a/kernel/CFuncs.st b/kernel/CFuncs.st index 72b7ca2..ff2db72 100644 --- a/kernel/CFuncs.st +++ b/kernel/CFuncs.st @@ -127,6 +127,12 @@ SystemDictionary extend [ ] + environ: aString [ + <category: 'c call-outs'> + <cCall: 'environ' returning: #(#ptr #string) args: #()> + + ] + putenv: aString [ <category: 'c call-outs'> <cCall: 'putenv' returning: #int args: #(#string)> diff --git a/libgst/cint.c b/libgst/cint.c index 061a829..44c5369 100644 --- a/libgst/cint.c +++ b/libgst/cint.c @@ -195,6 +195,7 @@ static int my_lstat (const char *name, OOP out); #endif static int my_putenv (const char *str); +static char **get_environ (void); static int my_chdir (const char *str); static int my_chown (const char *file, const char *owner, const char *group); static int my_symlink (const char* oldpath, const char* newpath); @@ -392,6 +393,12 @@ my_putenv (const char *str) return (putenv (clone)); } +static char ** +get_environ (void) +{ + return environ; +} + int my_chdir (const char *dir) @@ -592,6 +599,7 @@ _gst_init_cfuncs (void) /* Access to C library */ _gst_define_cfunc ("system", system); _gst_define_cfunc ("getenv", getenv); + _gst_define_cfunc ("environ", get_environ); _gst_define_cfunc ("putenv", my_putenv); _gst_define_cfunc ("printf", printf); ------------- END DIFF ---------------- -- Mehul N. Sanghvi email: mehul.sang...@gmail.com _______________________________________________ help-smalltalk mailing list help-smalltalk@gnu.org http://lists.gnu.org/mailman/listinfo/help-smalltalk