--- xds.h.in 2001/08/01 15:25:47 1.7
+++ xds.h.in 2001/08/02 08:12:26 1.8
@@ -33,6 +33,10 @@
#include <stdlib.h>
#include <stdarg.h>
#include <sys/types.h>
+#include <assert.h>
+
+#define XDS_TRUE (1==1)
+#define XDS_FALSE (1!=1)
typedef @xds_uint8_t@ xds_uint8_t;
typedef @xds_uint16_t@ xds_uint16_t;
@@ -79,45 +83,79 @@
int xds_vencode(xds_t* xds, const char* fmt, va_list args);
int xds_vdecode(xds_t* xds, const char* fmt, va_list args);
-#define declare_formatting_engine(x) \
- int x(xds_t* xds, void* engine_context, \
- void* buffer, size_t buffer_size, size_t* used_buffer_size, \
+#define xds_check_parameter(condition) \
+ do \
+ { \
+ assert(condition); \
+ if (!(condition)) \
+ return XDS_ERR_INVALID_ARG; \
+ } while(XDS_FALSE)
+
+#define xds_init_encoding_engine(size) \
+ do \
+ { \
+ xds_check_parameter(xds != NULL); \
+ xds_check_parameter(buffer != NULL); \
+ xds_check_parameter(buffer_size != 0); \
+ xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0); \
+ xds_check_parameter(args != NULL); \
+ *used_buffer_size = size; \
+ if (buffer_size < size) \
+ return XDS_ERR_OVERFLOW; \
+ } while(XDS_FALSE)
+
+#define xds_init_decoding_engine(size) \
+ do \
+ { \
+ xds_check_parameter(xds != NULL); \
+ xds_check_parameter(buffer != NULL); \
+ xds_check_parameter(buffer_size != 0); \
+ xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0); \
+ xds_check_parameter(args != NULL); \
+ *used_buffer_size = size; \
+ if (buffer_size < size) \
+ return XDS_ERR_UNDERFLOW; \
+ } while(XDS_FALSE)
+
+#define xds_declare_formatting_engine(x) \
+ int x(xds_t* xds, void* engine_context, \
+ void* buffer, size_t buffer_size, size_t* used_buffer_size, \
va_list* args)
-declare_formatting_engine(xdr_encode_uint32);
-declare_formatting_engine(xdr_decode_uint32);
-declare_formatting_engine(xdr_encode_int32);
-declare_formatting_engine(xdr_decode_int32);
-declare_formatting_engine(xdr_encode_uint64);
-declare_formatting_engine(xdr_decode_uint64);
-declare_formatting_engine(xdr_encode_int64);
-declare_formatting_engine(xdr_decode_int64);
-declare_formatting_engine(xdr_encode_double);
-declare_formatting_engine(xdr_decode_double);
-declare_formatting_engine(xdr_encode_octetstream);
-declare_formatting_engine(xdr_decode_octetstream);
-declare_formatting_engine(xdr_encode_string);
-declare_formatting_engine(xdr_decode_string);
-
-declare_formatting_engine(xml_encode_begin);
-declare_formatting_engine(xml_decode_begin);
-declare_formatting_engine(xml_encode_end);
-declare_formatting_engine(xml_decode_end);
-declare_formatting_engine(xml_encode_uint32);
-declare_formatting_engine(xml_decode_uint32);
-declare_formatting_engine(xml_encode_int32);
-declare_formatting_engine(xml_decode_int32);
-declare_formatting_engine(xml_encode_uint64);
-declare_formatting_engine(xml_decode_uint64);
-declare_formatting_engine(xml_encode_int64);
-declare_formatting_engine(xml_decode_int64);
-declare_formatting_engine(xml_encode_double);
-declare_formatting_engine(xml_decode_double);
-declare_formatting_engine(xml_encode_octetstream);
-declare_formatting_engine(xml_decode_octetstream);
-declare_formatting_engine(xml_encode_string);
-declare_formatting_engine(xml_decode_string);
-
-#undef declare_formatting_engine
+xds_declare_formatting_engine(xdr_encode_uint32);
+xds_declare_formatting_engine(xdr_decode_uint32);
+xds_declare_formatting_engine(xdr_encode_int32);
+xds_declare_formatting_engine(xdr_decode_int32);
+xds_declare_formatting_engine(xdr_encode_uint64);
+xds_declare_formatting_engine(xdr_decode_uint64);
+xds_declare_formatting_engine(xdr_encode_int64);
+xds_declare_formatting_engine(xdr_decode_int64);
+xds_declare_formatting_engine(xdr_encode_double);
+xds_declare_formatting_engine(xdr_decode_double);
+xds_declare_formatting_engine(xdr_encode_octetstream);
+xds_declare_formatting_engine(xdr_decode_octetstream);
+xds_declare_formatting_engine(xdr_encode_string);
+xds_declare_formatting_engine(xdr_decode_string);
+
+xds_declare_formatting_engine(xml_encode_begin);
+xds_declare_formatting_engine(xml_decode_begin);
+xds_declare_formatting_engine(xml_encode_end);
+xds_declare_formatting_engine(xml_decode_end);
+xds_declare_formatting_engine(xml_encode_uint32);
+xds_declare_formatting_engine(xml_decode_uint32);
+xds_declare_formatting_engine(xml_encode_int32);
+xds_declare_formatting_engine(xml_decode_int32);
+xds_declare_formatting_engine(xml_encode_uint64);
+xds_declare_formatting_engine(xml_decode_uint64);
+xds_declare_formatting_engine(xml_encode_int64);
+xds_declare_formatting_engine(xml_decode_int64);
+xds_declare_formatting_engine(xml_encode_double);
+xds_declare_formatting_engine(xml_decode_double);
+xds_declare_formatting_engine(xml_encode_octetstream);
+xds_declare_formatting_engine(xml_decode_octetstream);
+xds_declare_formatting_engine(xml_encode_string);
+xds_declare_formatting_engine(xml_decode_string);
+extern const char xds_xml_begin_text[];
+extern const char xds_xml_end_text[];
#endif /* !defined(__LIBXDS_H__) */
|