[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-API] Re: Xen-API C Bindings, version 0.4.1
On 08/08/06 17:00 +0100, Ewan Mellor wrote: Attached is the latest version of the C bindings for the Xen Management API. A record that contains references to other records (Ref in the data model) has fields of record_opt type. This type is a tagged union -- either a handle referring to the object, or a full copy of the object's fields. The get_record calls are only shallow -- they return handles as those references, not full copies -- but I anticipate that we shall add some deep calls later. I've added constructors, such as xen_vm_create, that take a xen_vm_record, and use that to supply parameters to the construction. All items that are allocated by the library and passed to the user have a corresponding call for deallocation (xen_vm_free, for example). Simple style question: should we typedef structs? I like the shorthand but linux style has some advantages. typedefs tend to hide informationabout the type that can be important. I like the internal structure of the API. It might be nice for each type/value to have pluggable marshall/demarshall functions. The marshall/demarshall code in xen_common.c is great but usually there are cases where a user needs to roll his own.Memory management: Right now the user supplies a buffer with input values (which is copied by the API), and the API supplies a result buffer, which the user needs to free. This is always hard to get right. It might make sense for the caller to provide both. This would avoid a memcpy and would reduce memory consumption. Since the caller is also part of the API implementation I think it would be best to avoid the memcpy. The current prototype should make params const: void xen_call_(xen_session *s, const char *method_name, - abstract_value params[], int param_count, + const abstract_value params[], int param_count, const abstract_type *result_type, void *value) But I would rather prefer this, with the caller supplying parameter memory: void xen_call_(xen_session *s, const char *method_name, - abstract_value params[], int param_count, + const abstract_value *params[], int param_count, const abstract_type *result_type, void *value) #define XEN_CALL_(method_name__) \ xen_call_(session, method_name__, param_values, \ sizeof(param_values) / sizeof(param_values[0]), \ &result_type, &result) \ The XEN_CALL macro is kind of scary because it uses inferred variables. It's probably because I'm not used to this convention but Iwould prefer #define XEN_CALL_ xen_call_ In other words, it really isn't needed and we should just expand the macro ourselves becuase. More later, nice work! Mike _______________________________________________ xen-api mailing list xen-api@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-api
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |