--- xds-register.c 2001/07/08 14:06:07 1.1
+++ xds-register.c 2001/07/08 15:18:50 1.2
@@ -26,80 +26,84 @@
*/
#include <stdio.h>
+#include <string.h>
#include <unistd.h>
+#include <assert.h>
#include "../internal.h"
static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
{
- if (xds == NULL)
- {
- printf("XDS context isn't passed through to registered engine.\n");
- exit(1);
- }
- if (engine_context != (void*)42)
- {
- printf("Engine context isn't passed through to registered engine.\n");
- exit(1);
- }
- if (buffer == NULL)
- {
- printf("Buffer passed to engine is NULL.\n");
- exit(1);
- }
- if (buffer_size == 0)
- {
- printf("Buffer size passed to engine is NULL.\n");
- exit(1);
- }
return 0;
}
int main()
{
xds_t* xds;
+ size_t i;
- /* Create contexts for encoding and decoding. */
+ /* Create context. */
xds = xds_init(XDS_ENCODE);
if (xds == NULL)
- {
- printf("Failed to initialize XDS context.\n");
- return 1;
- }
+ {
+ printf("Failed to initialize XDS context.\n");
+ return 1;
+ }
/* Register the dummy callback under multiple names. */
- if (xds_register(xds, "foo", &dummy_engine, (void*)42) != XDS_OK)
+ if (xds_register(xds, "foo", &dummy_engine, NULL) != XDS_OK)
{
printf("Failed to register engine for 'foo'.\n");
return 1;
}
- if (xds_register(xds, "bar", &dummy_engine, (void*)42) != XDS_OK)
+ if (xds_register(xds, "bar", &dummy_engine, NULL) != XDS_OK)
{
printf("Failed to register engine for 'bar'.\n");
return 1;
}
- if (xds_register(xds, "zarah", &dummy_engine, (void*)42) != XDS_OK)
+ if (xds_register(xds, "zarah", &dummy_engine, NULL) != XDS_OK)
{
printf("Failed to register engine for 'zarah'.\n");
return 1;
}
- if (xds_register(xds, "caesar", &dummy_engine, (void*)42) != XDS_OK)
+ if (xds_register(xds, "caesar", &dummy_engine, NULL) != XDS_OK)
{
printf("Failed to register engine for 'caesar'.\n");
return 1;
}
- if (xds_register(xds, "claus", &dummy_engine, (void*)42) != XDS_OK)
+ if (xds_register(xds, "claus", &dummy_engine, NULL) != XDS_OK)
{
printf("Failed to register engine for 'claus'.\n");
return 1;
}
- if (xds_register(xds, "heinz", &dummy_engine, (void*)42) != XDS_OK)
+ if (xds_register(xds, "heinz", &dummy_engine, NULL) != XDS_OK)
{
printf("Failed to register engine for 'heinz'.\n");
return 1;
}
+ /* Register the callback again, overwriting an existing entry. */
+
+ if (xds_register(xds, "claus", &dummy_engine, NULL) != XDS_OK)
+ {
+ printf("Failed to re-register engine for 'claus'.\n");
+ return 1;
+ }
+
+ /* Ensure that everything is in alphabetical order. */
+
+ for (i = 1; i < xds->engines_len; ++i)
+ {
+ assert(xds->engines[i-1].name != NULL);
+ assert(xds->engines[i].name != NULL);
+ if (strcmp(xds->engines[i-1].name, xds->engines[i].name) >= 0)
+ {
+ printf("xds->engines is not in alphabetical order!\n");
+ exit(1);
+ }
+ }
+
/* Clean up. */
xds_destroy(xds);
|