X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FScripting%2FNasalSys.cxx;h=75c49fbcf5d05d7b262b1de836e01ba9d21569d9;hb=4b59c152eafb5aa52c4562838090f037c07b65e9;hp=9ac7302634266a23e1651eb5c9a5fdd08e21b25f;hpb=cfbf9e7e4e1ace3e808f9ccdff378ab27eab403b;p=flightgear.git diff --git a/src/Scripting/NasalSys.cxx b/src/Scripting/NasalSys.cxx index 9ac730263..75c49fbcf 100644 --- a/src/Scripting/NasalSys.cxx +++ b/src/Scripting/NasalSys.cxx @@ -28,7 +28,6 @@ #include #include #include -#include #include #include @@ -147,11 +146,14 @@ public: void invoke() { + if( _singleShot ) + // Callback may restart the timer, so update status before callback is + // called (Prevent warnings of deleting not existing tasks from the + // event manager). + _isRunning = false; + naRef *args = NULL; _sys->callMethod(_func, _self, 0, args, naNil() /* locals */); - if (_singleShot) { - _isRunning = false; - } } void setSingleShot(bool aSingleShot) @@ -706,7 +708,7 @@ static naRef f_parsexml(naContext c, naRef me, int argc, naRef* args) */ static naRef f_parse_markdown(naContext c, naRef me, int argc, naRef* args) { - nasal::CallContext ctx(c, argc, args); + nasal::CallContext ctx(c, me, argc, args); return ctx.to_nasal( simgear::SimpleMarkdown::parse(ctx.requireArg(0)) ); @@ -719,26 +721,13 @@ static naRef f_parse_markdown(naContext c, naRef me, int argc, naRef* args) */ static naRef f_md5(naContext c, naRef me, int argc, naRef* args) { - nasal::CallContext ctx(c, argc, args); - std::string const str = ctx.requireArg(0); + if( argc != 1 || !naIsString(args[0]) ) + naRuntimeError(c, "md5(): wrong type or number of arguments"); - SG_MD5_CTX md5_ctx; - SG_MD5Init(&md5_ctx); - SG_MD5Update(&md5_ctx, (unsigned char*)str.c_str(), str.size()); - - unsigned char digest[MD5_DIGEST_LENGTH]; - SG_MD5Final(digest, &md5_ctx); - - // TODO make something more generic - // convert final sum to hex - const char hexChar[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; - std::stringstream hexMd5; - for (int i=0; i> 4]; - hexMd5 << hexChar[digest[i] & 0x0f]; - } - - return ctx.to_nasal(hexMd5.str()); + return nasal::to_nasal( + c, + simgear::strutils::md5(naStr_data(args[0]), naStr_len(args[0])) + ); } // Return UNIX epoch time in seconds.