int system_swap_size(AGENT_REQUEST *request, AGENT_RESULT *result)
SET_MSG_RESULT(result, zbx_strdup(NULL, "Too many parameters."));
swapdev = get_rparam(request, 0);
mode = get_rparam(request, 1);
if (NULL != swapdev && '\0' != *swapdev && 0 != strcmp(swapdev, "all"))
SET_MSG_RESULT(result, zbx_strdup(NULL, "Invalid first parameter."));
SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot obtain system information: %s", zbx_strerror(errno)));
if (NULL == mode || '\0' == *mode || 0 == strcmp(mode, "free"))
SET_UI64_RESULT(result, info.freeswap * (zbx_uint64_t)info.mem_unit);
else if (0 == strcmp(mode, "total"))
SET_UI64_RESULT(result, info.totalswap * (zbx_uint64_t)info.mem_unit);
else if (0 == strcmp(mode, "used"))
SET_UI64_RESULT(result, (info.totalswap - info.freeswap) * (zbx_uint64_t)info.mem_unit);
else if (0 == strcmp(mode, "pfree"))
SET_DBL_RESULT(result, 0 != info.totalswap ? 100.0 * (info.freeswap / (double)info.totalswap) : 100.0);
else if (0 == strcmp(mode, "pused"))
SET_DBL_RESULT(result, 0 != info.totalswap ? 100.0 - 100.0 * (info.freeswap / (double)info.totalswap) :
SET_MSG_RESULT(result, zbx_strdup(NULL, "Invalid second parameter."));
# define INFO_FILE_NAME "/proc/partitions"
if (6 != sscanf(line, "%d %d %*d %*s " \
ZBX_FS_UI64 " %*d " ZBX_FS_UI64 " %*d " \
ZBX_FS_UI64 " %*d " ZBX_FS_UI64 " %*d %*d %*d %*d", \