Danny Backx wrote:

- Error handling in PipeLib. On my system, ActivateDevice returns with
  ERROR_DEVICE_IN_USE if all is well, or with ERROR_FILE_NOT_FOUND if
  the PipeDev.dll is not installed. (Respectively codes 2404 and 2.)


I've committed the attached patch to handle this case.

Cheers,
Pedro Alves
2007-07-02  Pedro Alves  <[EMAIL PROTECTED]>
	    Danny Backx  <[EMAIL PROTECTED]>

	* PipeLib.cpp (CreatePipe): Handle unexpected ActivateDevice
	failures.  Record last error as ERROR_TOO_MANY_OPEN_FILES when
	there aren't any pipe slots left.

Index: PipeLib.cpp
===================================================================
--- PipeLib.cpp	(revision 1027)
+++ PipeLib.cpp	(working copy)
@@ -147,6 +147,13 @@ CreatePipe (PHANDLE hReadPipe,
       RegDeleteKey (HKEY_LOCAL_MACHINE, wsKey);
       free (wsKey);
 
+      if (!h && GetLastError() != ERROR_DEVICE_IN_USE)
+	{
+	  /* Something went wrong.  Use GetLastError for extended
+	     information.  */
+	  return FALSE;
+	}
+
       /* Although MSDN documents the error as INVALID_HANDLE_VALUE, I
 	 see it returning NULL here.  */
       if (h != INVALID_HANDLE_VALUE && h != NULL)
@@ -154,7 +161,10 @@ CreatePipe (PHANDLE hReadPipe,
     }
 
   if (inst == MAX_INSTANCES)
-    return FALSE;
+    {
+      SetLastError (ERROR_TOO_MANY_OPEN_FILES);
+      return FALSE;
+    }
 
   /* name + num + ':' + '\0' */
   wchar_t device_name[(sizeof (NAME_BASE) - 1) + 2 + 1 + 1];
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Cegcc-devel mailing list
Cegcc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cegcc-devel

Reply via email to