Am 13.04.2013 15:39, schrieb Hugh McMaster: > I've been adding a new handler to Wine's server. Unfortunately, I've run > into a problem with C_ASSERT that I can't seem to resolve. > > In server/request.h, I've added the following code: > > C_ASSERT( FIELD_OFFSET(struct get_desktop_workarea_request, spi_workarea) == > 16 ); > C_ASSERT( sizeof(struct get_desktop_workarea_request) == 16 ); > C_ASSERT( FIELD_OFFSET(struct get_desktop_workarea_reply, screen_x) == 4 ); > C_ASSERT( FIELD_OFFSET(struct get_desktop_workarea_reply, screen_y) == 4 ); > C_ASSERT( sizeof(struct get_desktop_workarea_reply) == 8 ); > > But the compiler ends with output errors, as in the following: > > In file included from request.c:69:0: > request.h:1527:1: error: size of unnamed array is negative > request.h:1528:1: error: size of unnamed array is negative > request.h:1529:1: error: size of unnamed array is negative > request.h:1530:1: error: size of unnamed array is negative > request.h:1531:1: error: size of unnamed array is negative > > Each error represents the C_ASSERT code listed above. > > I'm probably missing something obvious here. Can someone please offer any > advice on resolving these errors?
>>we'd need more info like the actual struct get_desktop_workarea_request Hallo André, I missed your response to the list. This is what I have done. Wine compiles perfectly if I uncomment the C_ASSERT lines. I note that Charles Davis said in another response that request.h should not be modified. *** server/protocol.def *** /* Retrieve the desktop workarea */ @REQ(get_desktop_workarea) RECT spi_workarea; /* values from SystemParametersInfo */ @REPLY int screen_x; /* screen dimensions without taskbar */ int screen_y; @END *** server/window.c *** /* retrieve the desktop workarea */ DECL_HANDLER(get_desktop_workarea) { RECT wa; wa = req->spi_workarea; int screen_w = wa.right; int screen_h = wa.bottom; reply->screen_x = screen_w; reply->screen_y = screen_h; } *** include/wine/server_protocol.h *** struct get_desktop_workarea_request { struct request_header __header; RECT spi_workarea; }; struct get_desktop_workarea_reply { struct reply_header __header; int screen_x; int screen_y; }; enum_request { [snip] REQ_get_desktop_workarea, [snip] } generic_request { [snip] struct get_desktop_workarea_request get_desktop_workarea_request; [snip] } generic_request { [snip] struct get_desktop_workarea_reply get_desktop_workarea_reply; [snip] } *** server/request.h *** DECL_HANDLER(get_desktop_workarea); static const req_handler req_handlers[REQ_NB_REQUESTS] = { [snip] (req_handler)req_get_desktop_workarea, [snip] } [snip] C_ASSERT( FIELD_OFFSET(struct get_desktop_workarea_request, spi_workarea) == 16 ); C_ASSERT( sizeof(struct get_desktop_workarea_request) == 16 ); C_ASSERT( FIELD_OFFSET(struct get_desktop_workarea_reply, screen_x) == 4 ); C_ASSERT( FIELD_OFFSET(struct get_desktop_workarea_reply, screen_y) == 4 ); C_ASSERT( sizeof(struct get_desktop_workarea_reply) == 8 );