- win32: more error handling for failed system-calls

- win32: prepare code for unicode compilation
This commit is contained in:
Stefan Gehn 2008-02-08 22:33:37 +00:00
parent 921ece54f9
commit 0db0b41476
1 changed files with 366 additions and 293 deletions

View File

@ -49,6 +49,14 @@
#include <ntdef.h>
#if defined(UNICODE) ^ defined(_UNICODE)
#error Inconsistent UNICODE and _UNICODE definition
#endif
#if !defined(ARRAYSIZE)
#define ARRAYSIZE(x) (sizeof(x) / sizeof(x[0]))
#endif
// ***************************************************************************
// Needed to determine pagefile usage
// definitions were taken from MinGW include/ddk/ntapi.h because you cannot
@ -102,8 +110,8 @@ typedef enum PerfKey_T
static gint numCPUs;
//static gulong swapin, swapout;
static TCHAR netName[MAX_NET_ADAPTERS + 1][MAX_NET_NAME + 1];
static TCHAR diskName[MAX_DISKS + 1][MAX_DISK_NAME + 1];
static char netName[MAX_NET_ADAPTERS + 1][MAX_NET_NAME + 1];
static char diskName[MAX_DISKS + 1][MAX_DISK_NAME + 1];
static gint numAdapters = 0;
static int rx[MAX_NET_ADAPTERS + 1];
static int tx[MAX_NET_ADAPTERS + 1];
@ -127,6 +135,35 @@ static HCOUNTER netRecCounter[MAX_NET_ADAPTERS + 1];
static HCOUNTER netSendCounter[MAX_NET_ADAPTERS + 1];
static PDH_STATUS status;
/* TODO: group static globals in structs
typedef struct _GK_DISC
{
gchar name[MAX_DISK_NAME + 1];
gulong read;
gulong written;
HCOUNTER read_counter;
HCOUNTER diskWriteCounter;
} GK_DISC;
static GK_DISC s_disk[MAX_DISKS + 1];
static guint s_disk_cnt = 0;
typedef struct _GK_NET
{
gchar name[MAX_NET_NAME + 1];
gulong rx, tx;
HCOUNTER recv_counter, send_counter;
} GK_NET;
static GK_NET s_net[MAX_NET_ADAPTERS + 1];
static guint s_net_cnt = 0;
*/
// *****************************************************************
// local function protos
@ -149,21 +186,21 @@ void gkrellm_sys_main_init(void)
int err;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Starting Winsock\n");
_tprintf(_T("Starting Winsock\n"));
err = WSAStartup(MAKEWORD(1,1), &wsdata);
if (err != 0)
{
printf("Starting Winsock failed with error code %i\n", err);
_tprintf(_T("Starting Winsock failed with error code %i\n"), err);
return;
}
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Opening Pdh\n");
_tprintf(_T("Opening pdh-query\n"));
status = PdhOpenQuery(NULL, 0, &pdhQueryHandle);
if (status != ERROR_SUCCESS || pdhQueryHandle == 0)
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Opening Pdh failed with error code %ld\n", status);
_tprintf(_T("Opening pdh-query failed with error code %lu\n"), status);
pdhQueryHandle = 0;
}
// get perflib localized key names
@ -194,7 +231,7 @@ void gkrellm_sys_main_cleanup(void)
#endif // WIN32_CLIENT
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Waiting for mail checking thread to end.\n");
_tprintf(_T("Waiting for mail checking thread to end.\n"));
while (gkrellm_mail_get_active_thread() != NULL)
{
@ -205,7 +242,7 @@ void gkrellm_sys_main_cleanup(void)
// Close PDH query-handle
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Closing Pdh\n");
_tprintf(_T("Closing Pdh\n"));
PdhCloseQuery(pdhQueryHandle);
// free up these strings
@ -217,7 +254,7 @@ void gkrellm_sys_main_cleanup(void)
// stop winsock
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Closing Winsock\n");
_tprintf(_T("Closing Winsock\n"));
WSACleanup();
}
@ -233,14 +270,13 @@ static void win32_read_proc_stat(void)
if (_GK.debug_level & DEBUG_SYSDEP)
{
printf("Collecting PDH query data\n");
_tprintf(_T("Collecting PDH query data\n"));
}
status = PdhCollectQueryData(pdhQueryHandle);
if (status != ERROR_SUCCESS)
{
printf("Collecting PDH query data failed with status %ld\n",
status);
_tprintf(_T("Collecting PDH query data failed with status %lu\n"), status);
}
}
@ -370,7 +406,7 @@ static gboolean ReadSharedData(void)
sens_data_read_tick = gkrellm_get_timer_ticks();
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Reading MBM or SpeedFan data\n");
_tprintf(_T("Reading MBM or SpeedFan data\n"));
// Try getting data from MBM
sens_data_valid = ReadMBMSharedData();
@ -391,7 +427,7 @@ static gboolean ReadMBMSharedData(void)
int i, j;
int totalCount;
hSData=OpenFileMapping(FILE_MAP_READ, FALSE, "$M$B$M$5$S$D$");
hSData=OpenFileMapping(FILE_MAP_READ, FALSE, _T("$M$B$M$5$S$D$"));
if (hSData == 0)
return FALSE;
@ -543,7 +579,7 @@ gboolean gkrellm_sys_sensors_init(void)
int i;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initializing sensors.\n");
_tprintf(_T("INIT sensors\n"));
//TODO: determine number of sensors at startup? This could cause
// user confusion in case mbm/speedfan is started after gkrellm
@ -617,7 +653,7 @@ void gkrellm_sys_cpu_read_data(void)
status = PdhGetFormattedCounterValue(cpuUserCounter[i], PDH_FMT_LONG, &type, &value);
if (status != ERROR_SUCCESS)
{
printf("Getting PDH-counter (cpu user time) failed with status %ld\n", status);
_tprintf(_T("Getting PDH-counter (cpu user time) failed with status %lu\n"), status);
return;
}
else
@ -628,7 +664,7 @@ void gkrellm_sys_cpu_read_data(void)
status = PdhGetFormattedCounterValue(cpuSysCounter[i], PDH_FMT_LONG, &type, &value);
if (status != ERROR_SUCCESS)
{
printf("Getting PDH-counter (cpu sys time) failed with status %ld\n", status);
_tprintf(_T("Getting PDH-counter (cpu sys time) failed with status %lu\n"), status);
return;
}
else
@ -658,7 +694,7 @@ gboolean gkrellm_sys_cpu_init(void)
TCHAR buf2[10];
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initializing CPU monitor.\n");
_tprintf(_T("INIT cpu monitoring\n"));
gkrellm_cpu_nice_time_unsupported();
@ -678,21 +714,21 @@ gboolean gkrellm_sys_cpu_init(void)
_itot(i, buf2, 10);
_tcscat(buf, buf2);
_tcscat(buf, perfKeyList[CpuTime]);
status = PdhAddCounter(pdhQueryHandle, buf, 0, &cpuUserCounter[i]);
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initialized cpu %i user portion (%s) with error code %ld\n", i, buf, status);
if (status != ERROR_SUCCESS)
_tprintf(_T("Failed adding cpu user-time pdh-counter for path '%s', status %ld\n"), buf, status);
else if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("Added cpu user-time pdh-counter for path '%s'\n"), buf);
_tcscpy(buf, perfKeyList[CpuStart]);
_itot(i, buf2, 10);
_tcscat(buf, buf2);
_tcscat(buf, perfKeyList[CpuSysTime]);
status = PdhAddCounter(pdhQueryHandle, buf, 0, &cpuSysCounter[i]);
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initialized cpu %i system portion (%s) with error code %ld\n", i, buf, status);
if (status != ERROR_SUCCESS)
_tprintf(_T("Failed adding cpu sys-time pdh-counter for path '%s', status %ld\n"), buf, status);
else if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("Added cpu sys-time pdh-counter for path '%s'\n"), buf);
}
}
@ -723,7 +759,7 @@ void gkrellm_sys_net_read_data(void)
status = PdhGetFormattedCounterValue(netRecCounter[i], PDH_FMT_LONG, &type, &value);
if (status != ERROR_SUCCESS)
{
printf("Getting PDH-counter (net recv counter) failed with status %ld\n", status);
_tprintf(_T("Getting pdh-counter (net recv counter) failed with status %lu\n"), status);
return;
}
else
@ -734,7 +770,7 @@ void gkrellm_sys_net_read_data(void)
status = PdhGetFormattedCounterValue(netSendCounter[i], PDH_FMT_LONG, &type, &value);
if (status != ERROR_SUCCESS)
{
printf("Getting PDH-counter (net send counter) failed with status %ld\n", status);
_tprintf(_T("Getting pdh-counter (net send counter) failed with status %lu\n"), status);
return;
}
else
@ -759,24 +795,17 @@ gboolean gkrellm_sys_net_isdn_online(void)
gboolean gkrellm_sys_net_init(void)
{
DWORD size = 0;
DWORD isize = 0;
LPTSTR objects = NULL;
LPTSTR instances = NULL;
LPTSTR instance = NULL;
TCHAR buf[1024];
{
DWORD objectSize = 0;
DWORD instanceSize = 0;
int strSize;
int i;
int adapter = -1;
// turn off for now
// gkrellm_net_add_timer_type_ppp("ppp0");
// gkrellm_net_add_timer_type_ippp("ippp0");
numAdapters = 0;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initializing network monitor.\n");
_tprintf(_T("INIT network monitoring\n"));
if (pdhQueryHandle != 0)
{
@ -786,27 +815,29 @@ gboolean gkrellm_sys_net_init(void)
stat = PdhLookupPerfNameByIndex(NULL, 510, pdhIface, &pdhIfaceSz);
if (stat != ERROR_SUCCESS) // fall back to non-translated pdh string
_tcscpy(pdhIface, TEXT("Network Interface"));
_tcscpy(pdhIface, _T("Network Interface"));
PdhEnumObjectItems(NULL, NULL, pdhIface, NULL, &size, NULL, &isize, PERF_DETAIL_WIZARD, 0);
if (_GK.debug_level & DEBUG_SYSDEP)
stat = PdhEnumObjectItems(NULL, NULL, pdhIface, NULL, &objectSize, NULL,
&instanceSize, PERF_DETAIL_WIZARD, 0);
if (stat != PDH_MORE_DATA && stat != ERROR_SUCCESS)
{
printf("Found %ld network objects and %ld network instances.\n", size, isize);
_tprintf(_T("Could not enumerate net pdh-counters for path '%s', error %lu\n"), pdhIface, stat);
}
if (size > 0)
else if (instanceSize > 0)
{
++isize;
++size;
TCHAR buf[1024];
LPTSTR objects = NULL;
LPTSTR instances = NULL;
LPTSTR instance = NULL;
objects = (LPTSTR) malloc(sizeof(TCHAR) * size);
instances = (LPTSTR) malloc(sizeof(TCHAR) * isize);
++instanceSize;
++objectSize;
PdhEnumObjectItems(NULL, NULL, pdhIface, objects, &size, instances, &isize, PERF_DETAIL_WIZARD, 0);
if (_GK.debug_level & DEBUG_SYSDEP)
{
printf("Enumerated %ld network objects and %ld network instances.\n", size, isize);
}
objects = (LPTSTR) malloc(sizeof(TCHAR) * objectSize);
instances = (LPTSTR) malloc(sizeof(TCHAR) * instanceSize);
PdhEnumObjectItems(NULL, NULL, pdhIface, objects, &objectSize,
instances, &instanceSize, PERF_DETAIL_WIZARD, 0);
for (instance = instances; *instance != 0; instance += lstrlen(instance) + 1)
{
@ -814,7 +845,7 @@ gboolean gkrellm_sys_net_init(void)
if (adapter >= MAX_NET_ADAPTERS)
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Hit maximum number of network adapters.\n");
_tprintf(_T("Hit maximum number of network adapters.\n"));
break;
}
@ -833,37 +864,40 @@ gboolean gkrellm_sys_net_init(void)
}
netName[adapter][strSize] = _T('\0');
/* TODO: determine network type */
gkrellm_net_add_timer_type_ppp(netName[adapter]);
_tcscpy(buf, perfKeyList[NetDevStart]);
_tcscat(buf, instance);
_tcscat(buf, perfKeyList[NetDevRecv]);
rx[adapter] = 0;
status = PdhAddCounter(pdhQueryHandle, buf, 0, &(netRecCounter[adapter]));
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Added network receive for '%s' interface with status %ld.\n", buf, status);
if (status != ERROR_SUCCESS)
_tprintf(_T("Failed adding net recv pdh-counter for path '%s', status %ld\n"), buf, status);
else if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("Added net recv pdh-counter for path '%s'\n"), buf);
rx[adapter] = 0;
_tcscpy(buf, perfKeyList[NetDevStart]);
_tcscat(buf, instance);
_tcscat(buf, perfKeyList[NetDevSend]);
status = PdhAddCounter(pdhQueryHandle, buf, 0, &(netSendCounter[adapter]));
if (status != ERROR_SUCCESS)
_tprintf(_T("Failed adding net send pdh-counter for path '%s', status %ld\n"), buf, status);
else if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("Added net send pdh-counter for path '%s'\n"), buf);
tx[adapter] = 0;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Added network transmit for '%s' interface with status %ld.\n", buf, status);
}
/* Final number of network adapters */
numAdapters = adapter + 1;
}
if (objects != NULL)
free(objects);
if (instances != NULL)
free(instances);
}
}
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Found %i interfaces for monitoring.\n", numAdapters);
_tprintf(_T("Found %i interfaces for monitoring.\n"), numAdapters);
return (numAdapters == 0 ? FALSE : TRUE);
}
@ -882,7 +916,7 @@ gchar * gkrellm_sys_disk_name_from_device(gint device_number, gint unit_number,
static gchar name[32];
//TODO: i18n?
sprintf(name, "Disk%s", diskName[device_number]);
snprintf(name, sizeof(name), "Disk%s", diskName[device_number]);
*order = device_number;
return name;
}
@ -913,7 +947,7 @@ void gkrellm_sys_disk_read_data(void)
status = PdhGetFormattedCounterValue(diskReadCounter[i], PDH_FMT_DOUBLE, &type, &value);
if (status != ERROR_SUCCESS)
{
printf("Getting PDH-counter (disk read cnt) failed with status %ld\n", status);
_tprintf(_T("Getting PDH-counter (disk read cnt) failed with status %lu\n"), status);
return;
}
readInt = value.doubleValue / _GK.update_HZ;
@ -921,7 +955,7 @@ void gkrellm_sys_disk_read_data(void)
status = PdhGetFormattedCounterValue(diskWriteCounter[i], PDH_FMT_DOUBLE, &type, &value);
if (status != ERROR_SUCCESS)
{
printf("Getting PDH-counter (disk write cnt) failed with status %ld\n", status);
_tprintf(_T("Getting PDH-counter (disk write cnt) failed with status %lu\n"), status);
return;
}
writeInt = value.doubleValue / _GK.update_HZ;
@ -945,12 +979,12 @@ gboolean gkrellm_sys_disk_init(void)
TCHAR buf[1024];
int strSize;
int i;
int disk = -1;
int diskIndex = -1;
numDisks = 0;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initializing disk monitor.\n");
_tprintf(_T("INIT disk monitoring\n"));
if (pdhQueryHandle != 0)
{
@ -959,12 +993,16 @@ gboolean gkrellm_sys_disk_init(void)
PDH_STATUS stat;
stat = PdhLookupPerfNameByIndex(NULL, 234, pdhDisk, &pdhDiskSz);
if (stat != ERROR_SUCCESS) // fall back to non-translated pdh string
if (stat != ERROR_SUCCESS) // Fall back to non-translated pdh string
_tcscpy(pdhDisk, TEXT("PhysicalDisk"));
// get number of disks that can be queried
PdhEnumObjectItems(NULL, NULL, pdhDisk, NULL, &size, NULL, &isize, PERF_DETAIL_WIZARD, 0);
if (size > 0)
// Get number of disks that can be queried
stat = PdhEnumObjectItems(NULL, NULL, pdhDisk, NULL, &size, NULL, &isize, PERF_DETAIL_WIZARD, 0);
if (stat != PDH_MORE_DATA && stat != ERROR_SUCCESS)
{
_tprintf(_T("Could not enumerate disk pdh-counters for path '%s', error %lu\n"), pdhDisk, stat);
}
else if (size > 0)
{
LPTSTR objects = NULL;
LPTSTR instances = NULL;
@ -978,11 +1016,14 @@ gboolean gkrellm_sys_disk_init(void)
// get information about disks
PdhEnumObjectItems(NULL, NULL, pdhDisk, objects, &size, instances, &isize, PERF_DETAIL_WIZARD, 0);
for (instance = instances; *instance != 0; instance += lstrlen(instance) + 1)
{
++disk;
if (disk >= MAX_DISKS)
// Ignore total counter, gkrellm provides that functionality
if (_strnicmp(_T("_Total"), instance, 6) == 0)
continue;
++diskIndex;
if (diskIndex >= MAX_DISKS)
break;
strSize = min(_tcsclen(instance), MAX_DISK_NAME);
@ -990,44 +1031,46 @@ gboolean gkrellm_sys_disk_init(void)
for (i = 0; i < strSize; i++)
{
if (instance[i] == _T(' '))
diskName[disk][i] = _T('_');
diskName[diskIndex][i] = _T('_');
else
diskName[disk][i] = instance[i];
diskName[diskIndex][i] = instance[i];
}
diskName[disk][strSize] = _T('\0');
diskName[diskIndex][strSize] = _T('\0');
// assemble object name to pdhQueryHandle
_tcscpy(buf, perfKeyList[DiskStart]);
_tcscat(buf, instance);
_tcscat(buf, perfKeyList[DiskRead]);
status = PdhAddCounter(pdhQueryHandle, buf, 0, &(diskReadCounter[disk]));
diskread[disk] = 0;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Adding disk %s for read monitoring with status code %ld\n", buf, status);
status = PdhAddCounter(pdhQueryHandle, buf, 0, &(diskReadCounter[diskIndex]));
if (status != ERROR_SUCCESS)
_tprintf(_T("Failed adding disk read pdh-counter for path '%s', status %ld\n"), buf, status);
else if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("Added disk read pdh-counter for path '%s'\n"), buf);
diskread[diskIndex] = 0;
_tcscpy(buf, perfKeyList[DiskStart]);
_tcscat(buf, instance);
_tcscat(buf, perfKeyList[DiskWrite]);
status = PdhAddCounter(pdhQueryHandle, buf, 0, &(diskWriteCounter[disk]));
diskwrite[disk] = 0;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Adding disk %s for write monitoring with status code %ld\n", buf, status);
status = PdhAddCounter(pdhQueryHandle, buf, 0, &(diskWriteCounter[diskIndex]));
if (status != ERROR_SUCCESS)
_tprintf(_T("Failed adding disk write pdh-counter for path '%s', status %ld\n"), buf, status);
else if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("Added disk write pdh-counter for path '%s'\n"), buf);
diskwrite[diskIndex] = 0;
}
numDisks = diskIndex + 1;
numDisks = disk + 1;
if (objects != NULL)
free(objects);
if (instances != NULL)
free(instances);
}
}
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Found %i disks for monitoring.\n", numDisks);
_tprintf(_T("Found %i disks for monitoring\n"), numDisks);
return (numDisks == 0 ? FALSE : TRUE);
}
}
/* ===================================================================== */
/* Proc monitor interface */
@ -1053,7 +1096,7 @@ void gkrellm_sys_proc_read_data(void)
status = PdhGetFormattedCounterValue(processCounter, PDH_FMT_LONG, &type, &value);
if (status != ERROR_SUCCESS)
{
printf("Getting PDH-counter (process cnt) failed with status %ld\n", status);
_tprintf(_T("Getting PDH-counter (process cnt) failed with status %ld\n"), status);
return;
}
n_processes = value.longValue;
@ -1061,7 +1104,7 @@ void gkrellm_sys_proc_read_data(void)
status = PdhGetFormattedCounterValue(threadCounter, PDH_FMT_LONG, &type, &value);
if (status != ERROR_SUCCESS)
{
printf("Getting PDH-counter (thread cnt) failed with status %ld\n", status);
_tprintf(_T("Getting PDH-counter (thread cnt) failed with status %ld\n"), status);
return;
}
n_forks = value.longValue;
@ -1103,7 +1146,7 @@ void gkrellm_sys_proc_read_users(void)
NET_API_STATUS nerr;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Getting number of logged in users.\n");
_tprintf(_T("Getting number of logged in users.\n"));
nerr = NetWkstaUserEnum(NULL, 0, &ptr, MAX_PREFERRED_LENGTH, &entriesRead,
&totalEntries, NULL);
@ -1119,18 +1162,22 @@ void gkrellm_sys_proc_read_users(void)
gboolean gkrellm_sys_proc_init(void)
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initializing process monitor.\n");
_tprintf(_T("INIT process monitoring\n"));
if (pdhQueryHandle == 0)
return FALSE;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Adding '%s' as process monitor.\n", perfKeyList[NumProcesses]);
status = PdhAddCounter(pdhQueryHandle, perfKeyList[NumProcesses], 0, &processCounter);
if (status != ERROR_SUCCESS)
_tprintf(_T("Failed adding process pdh-counter for path '%s', status %ld\n"), perfKeyList[NumProcesses], status);
else if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("Added process pdh-counter for path '%s'\n"), perfKeyList[NumProcesses]);
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Adding '%s' as thread monitor.\n", perfKeyList[NumThreads]);
status = PdhAddCounter(pdhQueryHandle, perfKeyList[NumThreads], 0, &threadCounter);
if (status != ERROR_SUCCESS)
_tprintf(_T("Failed adding thread pdh-counter for path '%s', status %ld\n"), perfKeyList[NumThreads], status);
else if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("Added thread pdh-counter for path '%s'\n"), perfKeyList[NumThreads]);
return TRUE;
}
@ -1228,7 +1275,7 @@ void gkrellm_sys_swap_read_data(void)
gboolean gkrellm_sys_mem_init(void)
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initialized Memory monitor.\n");
_tprintf(_T("INIT memory monitoring\n"));
return TRUE;
}
@ -1273,7 +1320,7 @@ void gkrellm_sys_battery_read_data(void)
gboolean gkrellm_sys_battery_init()
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initialized Battery monitor.\n");
_tprintf(_T("INIT battery monitoring\n"));
return TRUE;
}
@ -1283,22 +1330,28 @@ gboolean gkrellm_sys_battery_init()
/* ===================================================================== */
gboolean gkrellm_sys_fs_fstab_modified(void)
{
{
return FALSE;
}
}
void eject_win32_cdrom(gchar *device)
{
{
HANDLE hFile;
BOOL err;
char buf[25];
TCHAR devPath[MAX_PATH];
DWORD numBytes;
if (!device || strlen(device) == 0)
if (!device || device[0] == 0)
return;
sprintf(buf, "\\\\.\\%c:", device[0]);
hFile = CreateFile(buf, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, NULL);
/* FIXME: This assumes device names like "D:" */
_sntprintf(devPath, ARRAYSIZE(devPath), _T("\\\\.\\%c:"), device[0]);
devPath[ARRAYSIZE(devPath) - 1] = 0;
hFile = CreateFile(devPath, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0,
NULL);
if (hFile != 0 && hFile != INVALID_HANDLE_VALUE)
{
// this should be safe for non-removable drives
@ -1317,7 +1370,7 @@ void eject_win32_cdrom(gchar *device)
gboolean gkrellm_sys_fs_init(void)
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initializing file system monitor.\n");
_tprintf(_T("INIT filesystem monitoring\n"));
gkrellm_fs_mounting_unsupported();
gkrellm_fs_setup_eject(NULL, NULL, eject_win32_cdrom, NULL);
return TRUE;
@ -1328,7 +1381,7 @@ void gkrellm_sys_fs_get_fsusage(gpointer fs, gchar *dir)
{
BOOL err = 0;
if (!dir || strlen(dir) <= 0)
if (!dir || dir[0] == 0)
return;
ULARGE_INTEGER freeAvailableToCaller;
@ -1336,7 +1389,8 @@ void gkrellm_sys_fs_get_fsusage(gpointer fs, gchar *dir)
ULARGE_INTEGER freeBytes;
gulong total, freeCaller, free;
err = GetDiskFreeSpaceEx(dir, &freeAvailableToCaller, &totalBytes, &freeBytes);
/* TODO: Unicode support? */
err = GetDiskFreeSpaceExA(dir, &freeAvailableToCaller, &totalBytes, &freeBytes);
if (err != 0)
{
total = EnlargedUnsignedDivide(totalBytes, 1024, 0);
@ -1347,46 +1401,62 @@ void gkrellm_sys_fs_get_fsusage(gpointer fs, gchar *dir)
}
else
{
// may happen on cd/dvd drives, ignore for now
//printf("GetDiskFreeSpaceEx() failed on drive %c:, error %d\n", *dir, err);
/* TODO: This may happen on cd/dvd drives, ignore for now */
/*
_tprintf(_T("GetDiskFreeSpaceEx() failed on drive %c:, error %d\n"),
*dir, err);
*/
}
}
void gkrellm_sys_fs_get_mounts_list(void)
{
char buf[1024];
char* drive;
GetLogicalDriveStrings(1024, buf);
for (drive = buf; *drive != 0; drive += lstrlen(drive) + 1)
char driveStrings[512];
char *drive;
DWORD ret;
/* TODO: Unicode support? */
ret = GetLogicalDriveStringsA(ARRAYSIZE(driveStrings) - 1, driveStrings);
if (ret > 0)
{
if (strcmp("A:\\", drive) != 0 && strcmp("a:\\", drive) != 0 &&
strcmp("B:\\", drive) != 0 && strcmp("b:\\", drive) != 0
for (drive = driveStrings; *drive != 0; drive += lstrlenA(drive) + 1)
{
if (_strnicmp("A:\\", drive, 3) != 0
&& _strnicmp("B:\\", drive, 3) != 0
)
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf(("Found mounted drive '%s'\n"), drive);
gkrellm_fs_add_to_mounts_list(drive, drive, "");
}
}
}
}
void gkrellm_sys_fs_get_fstab_list(void)
{
char buf[1024];
char* drive;
GetLogicalDriveStrings(1024, buf);
for (drive = buf; *drive != 0; drive += lstrlen(drive) + 1)
char driveStrings[512];
char *drive;
DWORD ret;
/* TODO: Unicode support? */
ret = GetLogicalDriveStringsA(ARRAYSIZE(driveStrings) - 1, driveStrings);
if (ret > 0)
{
if (strcmp("A:\\", drive) != 0 && strcmp("a:\\", drive) != 0 &&
strcmp("B:\\", drive) != 0 && strcmp("b:\\", drive) != 0
for (drive = driveStrings; *drive != 0; drive += lstrlenA(drive) + 1)
{
if (_strnicmp("A:\\", drive, 3) != 0
&& _strnicmp("B:\\", drive, 3) != 0
)
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Adding fstab %s\n", drive);
printf(("Found fstab drive '%s'\n"), drive);
gkrellm_fs_add_to_fstab_list(drive, drive, "", "");
}
}
}
}
/* ===================================================================== */
/* INET monitor interfaces */
@ -1394,6 +1464,8 @@ void gkrellm_sys_fs_get_fstab_list(void)
gboolean gkrellm_sys_inet_init(void)
{
if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("INIT inet port monitoring\n"));
return TRUE;
}
@ -1454,7 +1526,7 @@ time_t gkrellm_sys_uptime_read_uptime(void)
status = PdhGetFormattedCounterValue(uptimeCounter, PDH_FMT_LONG, &type, &value);
if (status != ERROR_SUCCESS)
{
printf("Getting PDH-counter (uptime) failed with status %ld\n", status);
_tprintf(_T("Getting uptime pdh-counter failed, status %ld\n"), status);
return (time_t)0;
}
l = value.longValue;
@ -1467,19 +1539,18 @@ time_t gkrellm_sys_uptime_read_uptime(void)
gboolean gkrellm_sys_uptime_init(void)
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Initializing uptime monitor.\n");
_tprintf(_T("INIT uptime monitoring\n"));
if (pdhQueryHandle == 0)
return FALSE;
status = PdhAddCounter(pdhQueryHandle, perfKeyList[Uptime], 0, &uptimeCounter);
if (status != ERROR_SUCCESS)
{
printf("Adding PDH-counter (uptime) failed with status %ld\n", status);
return FALSE;
}
_tprintf(_T("Failed adding uptime pdh-counter for path '%s', status %ld\n"), perfKeyList[Uptime], status);
else if (_GK.debug_level & DEBUG_SYSDEP)
_tprintf(_T("Added uptime pdh-counter for path '%s'\n"), perfKeyList[Uptime]);
return TRUE;
return (status == ERROR_SUCCESS ? TRUE : FALSE);
}
@ -1497,10 +1568,11 @@ gchar *gkrellm_sys_get_host_name(void)
int err;
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Retrieving host name.\n");
_tprintf(_T("Retrieving host name.\n"));
err = gethostname(buf, sizeof(buf));
/* TODO: i18n */
if (err != 0)
hostname = g_strdup("Unknown");
else
@ -1517,17 +1589,15 @@ gchar *gkrellm_sys_get_host_name(void)
/* ===================================================================== */
gchar *gkrellm_sys_get_system_name(void)
{
static gboolean have_it = FALSE;
{
static gboolean system_name_fetched = FALSE;
char osName[64];
if (!have_it)
if (!system_name_fetched)
{
if (_GK.debug_level & DEBUG_SYSDEP)
printf("Retrieving system name.\n");
_tprintf(_T("Retrieving system name.\n"));
strcpy(osName, "Unknown");
if (info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
if (info.dwMinorVersion == 0)
@ -1557,13 +1627,11 @@ gchar *gkrellm_sys_get_system_name(void)
strcpy(osName, "Windows XP");
}
}
sname = g_strdup(osName);
have_it = TRUE;
system_name_fetched = TRUE;
}
return sname;
}
}
/* ===================================================================== */
@ -1586,8 +1654,9 @@ gboolean gkrellm_sys_sensors_mbmon_supported(void)
/* ===================================================================== */
static void initPerfKeyList(void)
{
static void
initPerfKeyList(void)
{
int i;
for (i = 0; i < PerfKeysSize; i++)
{
@ -1610,10 +1679,11 @@ static void initPerfKeyList(void)
placePerfKeyFromReg(DiskStart , 234, _T("\\") , _T("("));
placePerfKeyFromReg(DiskRead , 220, _T(")\\"), NULL);
placePerfKeyFromReg(DiskWrite , 222, _T(")\\"), NULL);
}
}
static void placePerfKeysFromReg(const PerfKey key, unsigned int index1, unsigned int index2)
static void
placePerfKeysFromReg(const PerfKey key, unsigned int index1, unsigned int index2)
{
TCHAR buf[512];
TCHAR perfName[512];
@ -1636,19 +1706,21 @@ static void placePerfKeysFromReg(const PerfKey key, unsigned int index1, unsigne
}
else
{
printf("could not find perflib index %d in registry\n", index2);
_tprintf(_T("could not find perflib index %d in registry\n"), index2);
placePerfKey(key, NULL);
}
}
else
{
printf("Could not find perflib index %d in registry\n", index1);
_tprintf(_T("Could not find perflib index %d in registry\n"), index1);
placePerfKey(key, NULL);
}
}
static void placePerfKeyFromReg(const PerfKey key, unsigned int index,
const TCHAR* prefix, const TCHAR* suffix)
static void
placePerfKeyFromReg(const PerfKey key, unsigned int index, const TCHAR* prefix,
const TCHAR* suffix)
{
TCHAR buf[512];
TCHAR perfName[512];
@ -1676,13 +1748,14 @@ static void placePerfKeyFromReg(const PerfKey key, unsigned int index,
}
else
{
printf("could not find index %d in registry\n", index);
_tprintf(_T("could not find index %d in registry\n"), index);
placePerfKey(key, NULL);
}
}
static void placePerfKey(const PerfKey key, const TCHAR* value)
static void
placePerfKey(const PerfKey key, const TCHAR* value)
{
size_t strSize;
if (((int)key > -1) && ((int)key < PerfKeysSize))
@ -1698,11 +1771,11 @@ static void placePerfKey(const PerfKey key, const TCHAR* value)
{
perfKeyList[key] = NULL;
}
//printf("perfKeyList[ %d ] = '%s'\n", key, perfKeyList[key]);
//_tprintf(_T("perfKeyList[ %d ] = '%s'\n"), key, perfKeyList[key]);
}
else
{
printf("Invalid placement for key %d; value was '%s'\n", key, value);
_tprintf(_T("Invalid placement for key %d; value was '%s'\n"), key, value);
}
}