public void Dispose() { ClamReturnCode ret = ClamBindings.cl_engine_free(engine); if (ret != ClamReturnCode.CL_SUCCESS) { Console.Error.WriteLine("Freeing allocated engine failed"); } }
public ClamEngine() { ClamReturnCode ret = ClamBindings.cl_unit((uint)ClamDatabaseOptions.CL_DB_STDOPT); if (ret != ClamReturnCode.CL_SUCCESS) { throw new Exception("Expected CL_SUCCESS, got " + ret); } engine = ClamBindings.cl_engine_new(); try { string dbdir = Marshal.PtrToStringAnsi(ClamBindings.cl_retdbdir()); uint signatureCount = 0; ret = ClamBindings.cl_load(dbdir, engine, ref signatureCount, (uint)ClamScanOptions.CL_SCAN_STDOPT); if (ret != ClamReturnCode.CL_SUCCESS) { throw new Exception("Expected CL_SUCCESS, got " + ret); } ret = (ClamReturnCode)ClamBindings.cl_engine_compile(engine); if (ret != ClamReturnCode.CL_SUCCESS) { throw new Exception("Expected CL_SUCCESS, got " + ret); } } catch { ret = ClamBindings.cl_engine_free(engine); if (ret != ClamReturnCode.CL_SUCCESS) { Console.Error.WriteLine("Freeing allocated engine failed"); } throw; } }