New set of macros for server calls; makes requests without variable
part somewhat faster.

diff --git a/files/file.c b/files/file.c
index 0b66d8b..38d455b 100644
--- a/files/file.c
+++ b/files/file.c
@@ -184,11 +184,10 @@
 HANDLE FILE_DupUnixHandle( int fd, DWORD access )
 {
     HANDLE ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( alloc_file_handle )
     {
-        struct alloc_file_handle_request *req = server_alloc_req( sizeof(*req), 0 );
         req->access  = access;
-        server_call_fd( REQ_ALLOC_FILE_HANDLE, fd );
+        SERVER_CALL_FD( fd );
         ret = req->handle;
     }
     SERVER_END_REQ;
@@ -205,12 +204,11 @@
 int FILE_GetUnixHandle( HANDLE handle, DWORD access )
 {
     int ret, fd = -1;
-    SERVER_START_REQ
+    SERVER_START_REQ( get_handle_fd )
     {
-        struct get_handle_fd_request *req = wine_server_alloc_req( sizeof(*req), 0 );
         req->handle = handle;
         req->access = access;
-        if (!(ret = server_call( REQ_GET_HANDLE_FD ))) fd = req->fd;
+        if (!(ret = SERVER_CALL_ERR())) fd = req->fd;
     }
     SERVER_END_REQ;
     if (!ret)
@@ -232,15 +230,13 @@
 {
     HANDLE ret;
 
-    SERVER_START_REQ
+    SERVER_START_REQ( open_console )
     {
-        struct open_console_request *req = server_alloc_req( sizeof(*req), 0 );
-
         req->output  = output;
         req->access  = access;
         req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
         SetLastError(0);
-        server_call( REQ_OPEN_CONSOLE );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
     SERVER_END_REQ;
@@ -270,9 +266,8 @@
     }
 
  restart:
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( create_file, len )
     {
-        struct create_file_request *req = server_alloc_req( sizeof(*req), len );
         req->access  = access;
         req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
         req->sharing = sharing;
@@ -280,10 +275,10 @@
         req->attrs   = attributes;
         memcpy( server_data_ptr(req), filename, len );
         SetLastError(0);
-        err = server_call( REQ_CREATE_FILE );
+        err = SERVER_CALL();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
 
     /* If write access failed, retry without GENERIC_WRITE */
 
@@ -298,9 +293,10 @@
         }
     }
 
+    if (err) SetLastError( RtlNtStatusToDosError(err) );
+
     if (!ret)
-	WARN("Unable to create file '%s' (GLE %ld)\n", filename,
-	     GetLastError());
+        WARN("Unable to create file '%s' (GLE %ld)\n", filename, GetLastError());
 
     return ret;
 }
@@ -315,15 +311,13 @@
 HANDLE FILE_CreateDevice( int client_id, DWORD access, LPSECURITY_ATTRIBUTES sa )
 {
     HANDLE ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( create_device )
     {
-        struct create_device_request *req = server_alloc_req( sizeof(*req), 0 );
-
         req->access  = access;
         req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
         req->id      = client_id;
         SetLastError(0);
-        server_call( REQ_CREATE_DEVICE );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
     SERVER_END_REQ;
@@ -544,11 +538,10 @@
     DWORD ret;
     if (!info) return 0;
 
-    SERVER_START_REQ
+    SERVER_START_REQ( get_file_info )
     {
-        struct get_file_info_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = hFile;
-        if ((ret = !server_call( REQ_GET_FILE_INFO )))
+        if ((ret = !SERVER_CALL_ERR()))
         {
             RtlSecondsSince1970ToTime( req->write_time, &info->ftCreationTime );
             RtlSecondsSince1970ToTime( req->write_time, &info->ftLastWriteTime );
@@ -1186,17 +1179,13 @@
 {
     int r;
 
-    SERVER_START_REQ
+    SERVER_START_REQ( async_result )
     {
-        struct async_result_request *req = server_alloc_req(sizeof *req,0);
-
         req->ov_handle = hAsync;
         req->result    = result;
-
-        r = server_call( REQ_ASYNC_RESULT);
+        r = SERVER_CALL_ERR();
     }
-    SERVER_END_REQ
-
+    SERVER_END_REQ;
     return !r;
 }
 
@@ -1279,10 +1268,8 @@
 {
     int r;
 
-    SERVER_START_REQ
+    SERVER_START_REQ( create_async )
     {
-        struct create_async_request *req = server_alloc_req(sizeof *req,0);
-
         req->file_handle = hFile;
         req->overlapped = overlapped;
         req->buffer = buffer;
@@ -1290,11 +1277,11 @@
         req->func = FILE_AsyncReadService;
         req->type = ASYNC_TYPE_READ;
 
-        r=server_call( REQ_CREATE_ASYNC );
+        r=SERVER_CALL_ERR();
 
         overlapped->Offset = req->ov_handle;
     }
-    SERVER_END_REQ
+    SERVER_END_REQ;
 
     if(!r)
     {
@@ -1435,10 +1422,8 @@
 {
     int r;
 
-    SERVER_START_REQ
+    SERVER_START_REQ( create_async )
     {
-        struct create_async_request *req = server_alloc_req( sizeof(*req), 0 );
-
         req->file_handle = hFile;
         req->buffer = (LPVOID)buffer;
         req->overlapped = overlapped;
@@ -1446,11 +1431,11 @@
         req->func = FILE_AsyncWriteService;
         req->type = ASYNC_TYPE_WRITE;
 
-        r = server_call( REQ_CREATE_ASYNC );
+        r = SERVER_CALL_ERR();
 
         overlapped->Offset = req->ov_handle;
     }
-    SERVER_END_REQ
+    SERVER_END_REQ;
 
     if(!r)
     {
@@ -1607,16 +1592,15 @@
     TRACE("handle %d offset %ld origin %ld\n",
           hFile, distance, method );
 
-    SERVER_START_REQ
+    SERVER_START_REQ( set_file_pointer )
     {
-        struct set_file_pointer_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = hFile;
         req->low = distance;
         req->high = highword ? *highword : (distance >= 0) ? 0 : -1;
         /* FIXME: assumes 1:1 mapping between Windows and Unix seek constants */
         req->whence = method;
         SetLastError( 0 );
-        if (!server_call( REQ_SET_FILE_POINTER ))
+        if (!SERVER_CALL_ERR())
         {
             ret = req->new_low;
             if (highword) *highword = req->new_high;
@@ -1768,11 +1752,10 @@
 BOOL WINAPI FlushFileBuffers( HANDLE hFile )
 {
     BOOL ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( flush_file )
     {
-        struct flush_file_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = hFile;
-        ret = !server_call( REQ_FLUSH_FILE );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;
@@ -1785,11 +1768,10 @@
 BOOL WINAPI SetEndOfFile( HANDLE hFile )
 {
     BOOL ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( truncate_file )
     {
-        struct truncate_file_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = hFile;
-        ret = !server_call( REQ_TRUNCATE_FILE );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;
@@ -1854,11 +1836,10 @@
 DWORD WINAPI GetFileType( HANDLE hFile )
 {
     DWORD ret = FILE_TYPE_UNKNOWN;
-    SERVER_START_REQ
+    SERVER_START_REQ( get_file_info )
     {
-        struct get_file_info_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = hFile;
-        if (!server_call( REQ_GET_FILE_INFO )) ret = req->type;
+        if (!SERVER_CALL_ERR()) ret = req->type;
     }
     SERVER_END_REQ;
     return ret;
@@ -2145,9 +2126,8 @@
                            const FILETIME *lpLastWriteTime )
 {
     BOOL ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( set_file_time )
     {
-        struct set_file_time_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = hFile;
         if (lpLastAccessTime)
             RtlTimeToSecondsSince1970( lpLastAccessTime, (DWORD *)&req->access_time );
@@ -2157,7 +2137,7 @@
             RtlTimeToSecondsSince1970( lpLastWriteTime, (DWORD *)&req->write_time );
         else
             req->write_time = 0; /* FIXME */
-        ret = !server_call( REQ_SET_FILE_TIME );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;
@@ -2171,16 +2151,14 @@
                         DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh )
 {
     BOOL ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( lock_file )
     {
-        struct lock_file_request *req = server_alloc_req( sizeof(*req), 0 );
-
         req->handle      = hFile;
         req->offset_low  = dwFileOffsetLow;
         req->offset_high = dwFileOffsetHigh;
         req->count_low   = nNumberOfBytesToLockLow;
         req->count_high  = nNumberOfBytesToLockHigh;
-        ret = !server_call( REQ_LOCK_FILE );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;
@@ -2224,16 +2202,14 @@
                           DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh )
 {
     BOOL ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( unlock_file )
     {
-        struct unlock_file_request *req = server_alloc_req( sizeof(*req), 0 );
-
         req->handle      = hFile;
         req->offset_low  = dwFileOffsetLow;
         req->offset_high = dwFileOffsetHigh;
         req->count_low   = nNumberOfBytesToUnlockLow;
         req->count_high  = nNumberOfBytesToUnlockHigh;
-        ret = !server_call( REQ_UNLOCK_FILE );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;