Rewrote Unix process launching to allow passing startup information to
Winelib apps. Improved handling of execve() failures.

diff --git a/server/trace.c b/server/trace.c
index 66b48bd..1fca5cd 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -215,8 +215,6 @@
 
 static void dump_new_process_request( const struct new_process_request *req )
 {
-    fprintf( stderr, " pinherit=%d,", req->pinherit );
-    fprintf( stderr, " tinherit=%d,", req->tinherit );
     fprintf( stderr, " inherit_all=%d,", req->inherit_all );
     fprintf( stderr, " create_flags=%d,", req->create_flags );
     fprintf( stderr, " start_flags=%d,", req->start_flags );
@@ -225,12 +223,18 @@
     fprintf( stderr, " hstdout=%d,", req->hstdout );
     fprintf( stderr, " hstderr=%d,", req->hstderr );
     fprintf( stderr, " cmd_show=%d,", req->cmd_show );
-    fprintf( stderr, " env_ptr=%p,", req->env_ptr );
-    fprintf( stderr, " cmdline=" );
-    dump_string( req, req->cmdline );
+    fprintf( stderr, " alloc_fd=%d", req->alloc_fd );
 }
 
-static void dump_new_process_reply( const struct new_process_request *req )
+static void dump_wait_process_request( const struct wait_process_request *req )
+{
+    fprintf( stderr, " pinherit=%d,", req->pinherit );
+    fprintf( stderr, " tinherit=%d,", req->tinherit );
+    fprintf( stderr, " timeout=%d,", req->timeout );
+    fprintf( stderr, " cancel=%d", req->cancel );
+}
+
+static void dump_wait_process_reply( const struct wait_process_request *req )
 {
     fprintf( stderr, " pid=%p,", req->pid );
     fprintf( stderr, " phandle=%d,", req->phandle );
@@ -259,7 +263,8 @@
 static void dump_init_process_request( const struct init_process_request *req )
 {
     fprintf( stderr, " ldt_copy=%p,", req->ldt_copy );
-    fprintf( stderr, " ldt_flags=%p", req->ldt_flags );
+    fprintf( stderr, " ldt_flags=%p,", req->ldt_flags );
+    fprintf( stderr, " ppid=%d", req->ppid );
 }
 
 static void dump_init_process_reply( const struct init_process_request *req )
@@ -269,10 +274,7 @@
     fprintf( stderr, " hstdin=%d,", req->hstdin );
     fprintf( stderr, " hstdout=%d,", req->hstdout );
     fprintf( stderr, " hstderr=%d,", req->hstderr );
-    fprintf( stderr, " cmd_show=%d,", req->cmd_show );
-    fprintf( stderr, " env_ptr=%p,", req->env_ptr );
-    fprintf( stderr, " cmdline=" );
-    dump_string( req, req->cmdline );
+    fprintf( stderr, " cmd_show=%d", req->cmd_show );
 }
 
 static void dump_init_process_done_request( const struct init_process_done_request *req )
@@ -1326,6 +1328,7 @@
 
 static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
     (dump_func)dump_new_process_request,
+    (dump_func)dump_wait_process_request,
     (dump_func)dump_new_thread_request,
     (dump_func)dump_boot_done_request,
     (dump_func)dump_init_process_request,
@@ -1430,7 +1433,8 @@
 };
 
 static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
-    (dump_func)dump_new_process_reply,
+    (dump_func)0,
+    (dump_func)dump_wait_process_reply,
     (dump_func)dump_new_thread_reply,
     (dump_func)0,
     (dump_func)dump_init_process_reply,
@@ -1536,6 +1540,7 @@
 
 static const char * const req_names[REQ_NB_REQUESTS] = {
     "new_process",
+    "wait_process",
     "new_thread",
     "boot_done",
     "init_process",