--- parser3/src/classes/file.C 2015/04/08 18:08:52 1.234 +++ parser3/src/classes/file.C 2015/09/22 23:49:29 1.237 @@ -25,7 +25,7 @@ #include "pa_vregex.h" #include "pa_version.h" -volatile const char * IDENT_FILE_C="$Id: file.C,v 1.234 2015/04/08 18:08:52 moko Exp $"; +volatile const char * IDENT_FILE_C="$Id: file.C,v 1.237 2015/09/22 23:49:29 moko Exp $"; // defines @@ -214,7 +214,7 @@ static void copy_process_source( static void copy_open_target(int f, void *from_spec) { String& file_spec=*static_cast(from_spec); file_read_action_under_lock(file_spec, "copy", copy_process_source, &f); -}; +} static void _copy(Request& r, MethodParams& params) { Value& vfrom_file_name=params.as_no_junction(0, "from file name must not be code"); @@ -295,9 +295,9 @@ static void _load(Request& r, MethodPara file_stat(lfile_name, size, atime, mtime, ctime); HashStringValue& ff=self.fields(); - ff.put(adate_name, new VDate(atime)); - ff.put(mdate_name, new VDate(mtime)); - ff.put(cdate_name, new VDate(ctime)); + ff.put(adate_name, new VDate((pa_time_t)atime)); + ff.put(mdate_name, new VDate((pa_time_t)mtime)); + ff.put(cdate_name, new VDate((pa_time_t)ctime)); } } @@ -379,9 +379,9 @@ static void _stat(Request& r, MethodPara self.set_binary(true/*tainted*/, 0/*no bytes*/, size, &lfile_name, 0, &r); HashStringValue& ff=self.fields(); - ff.put(adate_name, new VDate(atime)); - ff.put(mdate_name, new VDate(mtime)); - ff.put(cdate_name, new VDate(ctime)); + ff.put(adate_name, new VDate((pa_time_t)atime)); + ff.put(mdate_name, new VDate((pa_time_t)mtime)); + ff.put(cdate_name, new VDate((pa_time_t)ctime)); } static bool is_safe_env_key(const char* key) { @@ -734,9 +734,8 @@ static void _list(Request& r, MethodPara if(!vregex || vregex->exec(ffblk.ff_name, file_name_size, ovector, ovector_size)>=0) { Table::element_type row(new ArrayString); *row+=new String(pa_strdup(file_name_cstr, file_name_size), String::L_TAINTED); - *row+=new String(String::Body::Format(ffblk.is_dir() ? 1 : 0), String::L_CLEAN); + *row+=new String(String::Body::Format(ffblk.is_dir(stat) ? 1 : 0), String::L_CLEAN); if(stat) { - ffblk.stat_file(); *row+=VDouble(ffblk.size()).get_string(); *row+=new String(String::Body::Format((int)ffblk.c_timestamp()), String::L_CLEAN); *row+=new String(String::Body::Format((int)ffblk.m_timestamp()), String::L_CLEAN); @@ -756,11 +755,13 @@ struct Lock_execute_body_info { Value* body_code; }; #endif + static void lock_execute_body(int , void *ainfo) { Lock_execute_body_info& info=*static_cast(ainfo); // execute body info.r->write_assign_lang(info.r->process(*info.body_code)); -}; +} + static void _lock(Request& r, MethodParams& params) { const String& file_spec=r.absolute(params.as_string(0, FILE_NAME_MUST_BE_STRING)); Lock_execute_body_info info={