drivers/win32/win32.c
changeset 591 513f5ec8b628
parent 577 0bb82be64630
child 600 7767029937aa
--- a/drivers/win32/win32.c	Wed Sep 16 15:18:23 2009 +0200
+++ b/drivers/win32/win32.c	Wed Sep 16 15:19:14 2009 +0200
@@ -26,12 +26,19 @@
 */
 
 #include <windows.h>
-extern "C"
-{
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "canfestival.h"
 #include "timer.h"
 #include "timers_driver.h"
+
+#ifdef __cplusplus
 };
+#endif
+
 // GetProcAddress doesn't have an UNICODE version for NT
 #ifdef UNDER_CE
   #define myTEXT(str) TEXT(str)
@@ -138,6 +145,8 @@
 CAN_HANDLE canOpen(s_BOARD *board, CO_Data * d)
 {
 	int i;
+    CAN_HANDLE fd0;
+
 	for(i=0; i < MAX_NB_CAN_PORTS; i++)
 	{
 		if(!canports[i].used)
@@ -152,7 +161,7 @@
 	}
 	#endif
 
-	CAN_HANDLE fd0 = m_canOpen(board);
+	fd0 = m_canOpen(board);
 	if(fd0)
 	{
 		canports[i].used = 1;
@@ -173,16 +182,24 @@
 int canClose(CO_Data * d)
 {
 	UNS8 res;
-
-	((CANPort*)d->canHandle)->used = 0;
-	CANPort* tmp = (CANPort*)d->canHandle;
+	CANPort* tmp;
+
+	if((CANPort*)d->canHandle)
+	{
+	  ((CANPort*)d->canHandle)->used = 0;
+	}
+
+	tmp = (CANPort*)d->canHandle;
 	d->canHandle = NULL;
 
-	// close CAN port
-	res = m_canClose(tmp->fd);
-
-	// kill receiver task
-	WaitReceiveTaskEnd(&tmp->receiveTask);
+	if(tmp)
+	{
+	  // close CAN port
+	  res = m_canClose(tmp->fd);
+
+	  // kill receiver task
+	  WaitReceiveTaskEnd(&tmp->receiveTask);
+	}
 	return res;
 }