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

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.3       paf         5: 
1.1       paf         6:        Author: Alexander Petrosyan <paf@design.ru>(http://design.ru/paf)
                      7: 
1.14    ! paf         8:        $Id: pa_vfile.C,v 1.13 2001/04/09 11:30:44 paf Exp $
1.1       paf         9: */
                     10: 
1.6       paf        11: #include "pa_config_includes.h"
1.3       paf        12: #include <memory.h>
1.1       paf        13: #include "pa_vfile.h"
                     14: #include "pa_vstring.h"
1.3       paf        15: #include "pa_vint.h"
1.1       paf        16: 
1.13      paf        17: void VFile::set(bool tainted, 
                     18:                                const void *avalue_ptr, size_t avalue_size,
1.9       paf        19:                                const char *afile_name,
                     20:                                const String *mime_type) {
1.8       paf        21:        fvalue_ptr=avalue_ptr;
                     22:        fvalue_size=avalue_size;
                     23: 
1.10      paf        24:        ffields.clear();
1.3       paf        25:        // $name
1.14    ! paf        26:        char *lfile_name;
1.10      paf        27:        if(afile_name) {
1.14    ! paf        28:                lfile_name=(char *)malloc(strlen(afile_name)+1);
1.10      paf        29:                strcpy(lfile_name, afile_name);
                     30:                if(char *after_slash=rsplit(lfile_name, '\\'))
                     31:                        lfile_name=after_slash;
                     32:                if(char *after_slash=rsplit(lfile_name, '/'))
                     33:                        lfile_name=after_slash;
1.14    ! paf        34:                
        !            35:        } else
        !            36:                lfile_name="noname.dat";
        !            37:        ffields.put(*name_name, NEW VString(*NEW String(pool(), lfile_name, 0, true)));
1.3       paf        38:        // $size
1.10      paf        39:        ffields.put(*size_name, NEW VInt(pool(), fvalue_size));
1.3       paf        40:        // $text
1.14    ! paf        41:        if(fvalue_ptr) { // assigned files don't have bytes
        !            42:                String& text=*NEW String(pool());
        !            43:                char *premature_zero_pos=(char *)memchr(fvalue_ptr, 0, fvalue_size);
        !            44:                if(premature_zero_pos!=fvalue_ptr)
        !            45:                        text.APPEND((char *)fvalue_ptr, 
1.7       paf        46:                        premature_zero_pos?premature_zero_pos-(char *)fvalue_ptr:fvalue_size, 
1.13      paf        47:                        tainted? String::UL_TAINTED : String::UL_CLEAN,
1.7       paf        48:                        "user <input type=file>", 0);
1.14    ! paf        49:                ffields.put(*text_name, NEW VString(text));
        !            50:        }
1.9       paf        51:        // $mime-type
                     52:        if(mime_type)
1.10      paf        53:                ffields.put(*vfile_mime_type_name, NEW VString(*mime_type));
1.3       paf        54: }

E-mail: