Hello, I''d like to use xenctrl.h and a handful of other headers in a C++ application. The headers I''m interested now are xenctrl.h, xen/hvm/save.h, xen/mem_event.h and xenstore.h. Unfortunately, they''re not C++-friendly. Here''s why: 1. None of the headers enclose their contents in: #ifdef __cplusplus extern "C" { #endif /* contents here */ #ifdef __cplusplus } #endif 2. xen/arch-x86/hvm/save.h uses the C++ keyword ''new'' as a parameter name (quite a few times). 3. C++ (being type-safer) frowns upon such assignments as: struct hvm_hw_cpu *newcpu=h; // h is void* which should be explicitly written as: struct hvm_hw_cpu *newcpu=(struct hvm_hw_cpu *)h; 4. xenctrl.h typedefs "enum xc_error_code xc_error_code;" _before_ "enum xc_error_code { /* ... */ }" has been defined, which C++ doesn''t allow. I''m also getting: /usr/include/xen/mem_event.h:71:1: error: expected ‘;’ after union definition /usr/include/xen/mem_event.h:71:1: error: expected ‘:’ before ‘;’ token where the DEFINE_RING_TYPES(mem_event, mem_event_request_t, mem_event_response_t); macro is being expanded in mem_event.h. Are there plans to have the userspace libraries be friendlier to C++? Thanks, Razvan Cojocaru
On 22/01/13 15:16, Razvan Cojocaru wrote:> Hello, > > I''d like to use xenctrl.h and a handful of other headers in a C++ > application. The headers I''m interested now are xenctrl.h, > xen/hvm/save.h, xen/mem_event.h and xenstore.h. Unfortunately, they''re > not C++-friendly. > > Here''s why: > > 1. None of the headers enclose their contents in: > > #ifdef __cplusplus > extern "C" { > #endif > > /* contents here */ > > #ifdef __cplusplus > } > #endif > > 2. xen/arch-x86/hvm/save.h uses the C++ keyword ''new'' as a parameter > name (quite a few times). > > 3. C++ (being type-safer) frowns upon such assignments as: > > struct hvm_hw_cpu *newcpu=h; // h is void* > > which should be explicitly written as: > > struct hvm_hw_cpu *newcpu=(struct hvm_hw_cpu *)h; > > 4. xenctrl.h typedefs "enum xc_error_code xc_error_code;" _before_ "enum > xc_error_code { /* ... */ }" has been defined, which C++ doesn''t allow. > > I''m also getting: > > /usr/include/xen/mem_event.h:71:1: error: expected ‘;’ after union > definition > /usr/include/xen/mem_event.h:71:1: error: expected ‘:’ before ‘;’ token > > where the DEFINE_RING_TYPES(mem_event, mem_event_request_t, > mem_event_response_t); macro is being expanded in mem_event.h. > > Are there plans to have the userspace libraries be friendlier to C++?Patches welcome :) I think C++ friendliness is a good idea (especially as I think I might be needing C++ friendliness at some point in the not-too-distant future) ~Andrew> > Thanks, > Razvan Cojocaru > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
>> /usr/include/xen/mem_event.h:71:1: error: expected ‘;’ after union >> definition >> /usr/include/xen/mem_event.h:71:1: error: expected ‘:’ before ‘;’ token >> >> where the DEFINE_RING_TYPES(mem_event, mem_event_request_t, >> mem_event_response_t); macro is being expanded in mem_event.h.This one was cause because ring.h was using the C++ keyword ''private''.> I think C++ friendliness is a good idea (especially as I think I might > be needing C++ friendliness at some point in the not-too-distant future)OK, hopefully I''ll manage to patch these headers tomorrow (of course, there are others...). Cheers, Razvan