Annotation of parser3/src/types/pa_vfile.C, revision 1.23

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.23    ! paf         5:        Author: Alexander Petrosyan <paf@design.ru>(http://paf.design.ru)
1.3       paf         6: 
1.23    ! paf         7:        $Id: pa_vfile.C,v 1.22 2001/09/26 10:32:26 parser Exp $
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: