X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=plugins%2Fcheck_swap.cpp;h=dc08f3b3b98c12c431f1c94051ee6c8f4d5f84ef;hb=1bd91b0998fa7fcec37a2ac0c3511eea5fc3d675;hp=302f20b46a7c029b672e696e4474c3249ad04885;hpb=c9fe1dbd1549b45339c97b528572cbabdb87dad2;p=icinga2 diff --git a/plugins/check_swap.cpp b/plugins/check_swap.cpp index 302f20b46..dc08f3b3b 100644 --- a/plugins/check_swap.cpp +++ b/plugins/check_swap.cpp @@ -1,21 +1,4 @@ -/****************************************************************************** - * Icinga 2 * - * Copyright (C) 2012-2018 Icinga Development Team (https://icinga.com/) * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License * - * as published by the Free Software Foundation; either version 2 * - * of the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the Free Software Foundation * - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * - ******************************************************************************/ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ #include "plugins/thresholds.hpp" #include @@ -47,7 +30,7 @@ struct pageFileInfo static bool l_Debug; -BOOL EnumPageFilesProc(LPVOID pContext, PENUM_PAGE_FILE_INFORMATION pPageFileInfo, LPCTSTR lpFilename) { +BOOL EnumPageFilesProc(LPVOID pContext, PENUM_PAGE_FILE_INFORMATION pPageFileInfo, LPCWSTR lpFilename) { std::vector* pageFile = static_cast*>(pContext); SYSTEM_INFO systemInfo; @@ -216,10 +199,11 @@ static int printOutput(printInfoStruct& printInfo) static int check_swap(printInfoStruct& printInfo) { - PENUM_PAGE_FILE_CALLBACK pageFileCallback = &EnumPageFilesProc; + // Needs explicit cast: http://msinilo.pl/blog2/post/p1348/ + PENUM_PAGE_FILE_CALLBACKW pageFileCallback = (PENUM_PAGE_FILE_CALLBACKW)EnumPageFilesProc; std::vector pageFiles; - if(!EnumPageFiles(pageFileCallback, &pageFiles)) { + if(!EnumPageFilesW(pageFileCallback, &pageFiles)) { printErrorInfo(); return 3; } @@ -229,7 +213,10 @@ static int check_swap(printInfoStruct& printInfo) printInfo.aSwap += round(pageFiles.at(i).availableSpwap / pow(1024.0, printInfo.unit)); } - printInfo.percentFree = 100.0 * printInfo.aSwap / printInfo.tSwap; + if (printInfo.aSwap > 0 && printInfo.tSwap > 0) + printInfo.percentFree = 100.0 * printInfo.aSwap / printInfo.tSwap; + else + printInfo.percentFree = 0; return -1; }