--- parser3/src/classes/file.C 2002/11/25 14:10:51 1.104 +++ parser3/src/classes/file.C 2002/12/26 12:39:25 1.106 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_FILE_C="$Date: 2002/11/25 14:10:51 $"; +static const char* IDENT_FILE_C="$Date: 2002/12/26 12:39:25 $"; #include "pa_config_includes.h" @@ -116,6 +116,10 @@ static void _move(Request& r, const Stri r.absolute(vto_file_name.as_string())); } +static void _load_pass_param(const Hash::Key& key, Hash::Val *value, void *info) { + Hash& dest=*static_cast(info); + dest.put(key, value); +} static void _load(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool(); Value& vmode_name=params-> as_no_junction(0, "mode must not be code"); @@ -146,6 +150,8 @@ static void _load(Request& r, const Stri VFile& self=*static_cast(r.get_self()); self.set(true/*tainted*/, data, size, user_file_name, vcontent_type); + if(fields) + fields->for_each(_load_pass_param, &self.fields()); } static void _stat(Request& r, const String& method_name, MethodParams *params) { @@ -572,8 +578,12 @@ static void _fullpath(Request& r, const // /some/page.html: ^file:fullpath[a.gif] => /some/a.gif const String& full_disk_path=r.absolute(file_spec); size_t document_root_length=strlen(r.info.document_root); - if(document_root_length>0) - --document_root_length; + + if(document_root_length>0) { + char last_char=r.info.document_root[document_root_length-1]; + if(last_char == '/' || last_char == '\\') + --document_root_length; + } result=&full_disk_path.mid(document_root_length, full_disk_path.size()); } r.write_assign_lang(*result);