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);
        }
      }
  
  }
  
  

Reply via email to