[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-smalltalk] How to access environment variables ?
From: |
Mehul Sanghvi |
Subject: |
Re: [Help-smalltalk] How to access environment variables ? |
Date: |
Sat, 26 Mar 2011 18:41:06 -0400 |
On Sat, Mar 26, 2011 at 10:04, Mehul Sanghvi <address@hidden> wrote:
> On Sat, Mar 26, 2011 at 03:10, Paolo Bonzini <address@hidden> 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: address@hidden
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/20
- Re: [Help-smalltalk] How to access environment variables ?, Paolo Bonzini, 2011/03/21
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/25
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/25
- Re: [Help-smalltalk] How to access environment variables ?, Paolo Bonzini, 2011/03/26
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/26
- Re: [Help-smalltalk] How to access environment variables ?,
Mehul Sanghvi <=
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/26
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/26
- Re: [Help-smalltalk] How to access environment variables ?, Paolo Bonzini, 2011/03/27
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/27
- Re: [Help-smalltalk] How to access environment variables ?, Paolo Bonzini, 2011/03/28
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/28
- Re: [Help-smalltalk] How to access environment variables ?, Paolo Bonzini, 2011/03/28
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/28
- Re: [Help-smalltalk] How to access environment variables ?, Mehul Sanghvi, 2011/03/28
- Re: [Help-smalltalk] How to access environment variables ?, Paolo Bonzini, 2011/03/28