cvsuser 03/07/10 15:49:50
Modified: . MANIFEST
Added: classes env.pmc
Log:
Accessing env variables is a nice thing
Revision Changes Path
1.370 +1 -0 parrot/MANIFEST
Index: MANIFEST
===================================================================
RCS file: /cvs/public/parrot/MANIFEST,v
retrieving revision 1.369
retrieving revision 1.370
diff -u -w -r1.369 -r1.370
--- MANIFEST 10 Jul 2003 10:48:00 -0000 1.369
+++ MANIFEST 10 Jul 2003 22:49:48 -0000 1.370
@@ -28,6 +28,7 @@
classes/coroutine.pmc []
classes/csub.pmc []
classes/default.pmc []
+classes/env.pmc []
classes/eval.pmc []
classes/exception.pmc []
classes/exception_handler.pmc []
1.1 parrot/classes/env.pmc
Index: env.pmc
===================================================================
/* env.pmc
* Copyright: 2002, 2003 Yet Another Society
* CVS Info
* $Id: env.pmc,v 1.1 2003/07/10 22:49:50 dan Exp $
* Overview:
* These are the vtable functions for the Env base class, which
* accesses the system environment
* Data Structure and Algorithms:
* History:
* Notes:
* References:
*/
#include "parrot/parrot.h"
pmclass Env extends default {
INTVAL type () {
return enum_class_Env;
}
STRING* name() {
return whoami;
}
STRING* get_string_keyed(PMC* key) {
char *keyname = string_to_cstring(interpreter, VTABLE_get_string(interpreter,
key));
if (keyname) {
char *val = getenv(keyname);
string_cstring_free(keyname);
if (val) {
return string_from_c_string(interpreter, val, 0);
} else {
return string_from_c_string(interpreter, "", 0);
}
} else {
return string_from_c_string(interpreter, "", 0);
}
}
void set_string_keyed(PMC* key, STRING* value) {
char *keyname = string_to_cstring(interpreter, VTABLE_get_string(interpreter,
key));
char *env_val = string_to_cstring(interpreter, value);
if (keyname && env_val) {
setenv(keyname, env_val, 1);
}
if (keyname) {
string_cstring_free(keyname);
}
if (env_val) {
string_cstring_free(env_val);
}
}
}