diff --git a/src/Client/DefScript/DefScript.cpp b/src/Client/DefScript/DefScript.cpp index 930c069..23e13ed 100644 --- a/src/Client/DefScript/DefScript.cpp +++ b/src/Client/DefScript/DefScript.cpp @@ -375,6 +375,11 @@ bool DefScriptPackage::LoadScriptFromFile(std::string fn){ } else if(line=="loop") Blocks.push_back(BLOCK_LOOP); + else if(line=="exitloop" && !Blocks.size()) // TODO: check: at least one BLOCK_LOOP must be opened + { + cantload=true; + break; + } else if(line=="endloop") { if(Blocks.empty() || Blocks.back()!=BLOCK_LOOP) diff --git a/src/Client/DefScript/DefScriptFileFunctions.cpp b/src/Client/DefScript/DefScriptFileFunctions.cpp index 51bfaac..25ff680 100644 --- a/src/Client/DefScript/DefScriptFileFunctions.cpp +++ b/src/Client/DefScript/DefScriptFileFunctions.cpp @@ -113,13 +113,22 @@ DefReturnResult DefScriptPackage::func_fwrite(CmdSet& Set) DefReturnResult DefScriptPackage::func_fread(CmdSet& Set) { - std::fstream *fh = files.GetNoCreate(_NormalizeVarName(Set.arg[0],Set.myname)); + std::string fn = _NormalizeVarName(Set.arg[0],Set.myname); + std::fstream *fh = files.GetNoCreate(fn); if(fh && fh->is_open()) { uint64 bytes; uint64 read = 0; if(stringToLower(Set.defaultarg) == "all") - bytes = -1LL; + { + std::fstream::pos_type begin_pos, end_pos, old_pos = fh->tellg(); + fh->seekg(0, std::ios_base::beg); + begin_pos=fh->tellg(); + fh->seekg(0, std::ios_base::end); + end_pos = fh->tellg(); + fh->seekg(old_pos, std::ios_base::beg); + bytes = (end_pos - begin_pos); + } else bytes = toUint64(Set.defaultarg); std::string ret;