Annotation of parser3/src/types/pa_vfile.C, revision 1.22
1.5 paf 1: /** @file
1.14 paf 2: Parser: @b file parser type.
1.3 paf 3:
1.1 paf 4: Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com)
1.22 ! parser 5: Author: Alexander Petrosyan <paf@design.ru>(http://design.ru/paf)
1.3 paf 6:
1.22 ! parser 7: $Id: $
1.21 parser 8: */
1.1 paf 9:
1.21 parser 10: #include "pa_config_includes.h"
1.1 paf 11:
12: #include "pa_vfile.h"
13: #include "pa_vstring.h"
1.3 paf 14: #include "pa_vint.h"
1.1 paf 15:
1.13 paf 16: void VFile::set(bool tainted,
17: const void *avalue_ptr, size_t avalue_size,
1.9 paf 18: const char *afile_name,
1.19 parser 19: Value *mime_type) {
1.8 paf 20: fvalue_ptr=avalue_ptr;
21: fvalue_size=avalue_size;
22:
1.15 paf 23: const char *origin_file="user <input type=file>";
24:
1.10 paf 25: ffields.clear();
1.3 paf 26: // $name
1.14 paf 27: char *lfile_name;
1.10 paf 28: if(afile_name) {
1.14 paf 29: lfile_name=(char *)malloc(strlen(afile_name)+1);
1.10 paf 30: strcpy(lfile_name, afile_name);
31: if(char *after_slash=rsplit(lfile_name, '\\'))
32: lfile_name=after_slash;
33: if(char *after_slash=rsplit(lfile_name, '/'))
34: lfile_name=after_slash;
1.14 paf 35:
36: } else
1.16 paf 37: lfile_name=NONAME_DAT;
1.15 paf 38: String& sfile_name=*NEW String(pool());
1.20 parser 39: sfile_name.APPEND(lfile_name, 0, String::UL_FILE_SPEC, origin_file, 0);
1.15 paf 40: ffields.put(*name_name, NEW VString(sfile_name));
1.3 paf 41: // $size
1.10 paf 42: ffields.put(*size_name, NEW VInt(pool(), fvalue_size));
1.3 paf 43: // $text
1.14 paf 44: if(fvalue_ptr) { // assigned files don't have bytes
45: String& text=*NEW String(pool());
46: char *premature_zero_pos=(char *)memchr(fvalue_ptr, 0, fvalue_size);
47: if(premature_zero_pos!=fvalue_ptr)
48: text.APPEND((char *)fvalue_ptr,
1.18 parser 49: premature_zero_pos?premature_zero_pos-(char *)fvalue_ptr:fvalue_size,
50: tainted? String::UL_TAINTED : String::UL_CLEAN,
51: origin_file, 0);
1.14 paf 52: ffields.put(*text_name, NEW VString(text));
53: }
1.9 paf 54: // $mime-type
55: if(mime_type)
1.19 parser 56: ffields.put(*vfile_mime_type_name, mime_type);
1.3 paf 57: }
E-mail: