Annotation of parser3/src/types/pa_venv.C, revision 1.13
1.2 paf 1: /** @file
2: Parser: @b env class.
3:
1.12 moko 4: Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com)
1.2 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
6: */
7:
8: #include "pa_venv.h"
9: #include "pa_vstring.h"
1.13 ! misha 10: #include "pa_vhash.h"
1.2 paf 11: #include "pa_version.h"
12:
1.13 ! misha 13: volatile const char * IDENT_PA_PA_VENV_C="$Id: pa_venv.C,v 1.12 2012-03-16 09:24:17 moko Exp $" IDENT_PA_VENV_H;
1.12 moko 14:
1.4 misha 15: #define PARSER_VERSION_ELEMENT_NAME "PARSER_VERSION"
1.13 ! misha 16: #define ENV_FIELDS_ELEMENT_NAME "fields"
1.4 misha 17:
1.2 paf 18: static const String parser_version(PARSER_VERSION);
19:
1.11 misha 20: Value* VEnv::get_element(const String& aname) {
1.6 misha 21: // $env:CLASS
1.5 misha 22: if(aname==CLASS_NAME)
23: return this;
24:
1.6 misha 25: // $env:CLASS_NAME
1.5 misha 26: if(aname==CLASS_NAMETEXT)
27: return new VString(env_class_name);
28:
1.2 paf 29: // $env:PARSER_VERSION
1.4 misha 30: if(aname==PARSER_VERSION_ELEMENT_NAME)
1.2 paf 31: return new VString(parser_version);
32:
1.13 ! misha 33: // $fields
! 34: if(aname==ENV_FIELDS_ELEMENT_NAME){
! 35: HashStringValue *result=new HashStringValue();
! 36: if(const char *const *pairs=SAPI::environment(finfo)) {
! 37: while(const char* pair=*pairs++)
! 38: if(const char* eq_at=strchr(pair, '='))
! 39: if(eq_at[1]) // has value
! 40: result->put(
! 41: pa_strdup(pair, eq_at-pair),
! 42: new VString(*new String(pa_strdup(eq_at+1), String::L_TAINTED)));
! 43: }
! 44: return new VHash(*result);
! 45: }
! 46:
1.6 misha 47: // $env:field
1.7 misha 48: if(const char* value=SAPI::get_env(finfo, aname.cstr())){
1.10 misha 49: return new VString(*new String(strdup(value, strlen(value)), String::L_TAINTED));
1.7 misha 50: }
1.6 misha 51:
52: return 0;
1.3 paf 53: }
E-mail: