Esempio n. 1
0
/*===========================================================================*
 *				test_mem				     *
 *===========================================================================*/
void test_mem(void)
{
	char *string1 = "ok, this is a string";
	char *string2 = "ok, this is a very looooong string";
	size_t len1 = strlen(string1) + 1;
	size_t len2 = strlen(string2) + 1;
	char buf[100];
	size_t get_len;
	int r;

	/* Publish and retrieve. */
	r = ds_publish_mem(key_mem, string1, len1, 0);
	assert(r == OK);
	get_len = 100;
	r = ds_retrieve_mem(key_mem, buf, &get_len);
	assert(r == OK && strcmp(string1, buf) == 0);
	assert(get_len == len1);

	/* Let get_len=8, which is less than strlen(string1). */
	get_len = 8;
	r = ds_retrieve_mem(key_mem, buf, &get_len);
	assert(r == OK && get_len == 8);

	/* Publish again to overwrite with a bigger memory range. */
	r = ds_publish_mem(key_mem, string2, len2, DSF_OVERWRITE);
	assert(r == OK);

	get_len = 100;
	r = ds_retrieve_mem(key_mem, buf, &get_len);
	assert(r == OK && strcmp(string2, buf) == 0);
	assert(get_len == len2);

	r = ds_delete_mem(key_mem);
	assert(r == OK);

	printf("DSTEST: MEM test successful!\n");
}
Esempio n. 2
0
/*===========================================================================*
 *				main					     *
 *===========================================================================*/
int main(void)
{
	int r;
	message mess;
	char key[DS_MAX_KEYLEN];
	int type;
	u32_t num;
	char string[17];
	char buf[1000];
	size_t length = 1000;

	/* SEF local startup. */
	sef_local_startup();

	/* Subscribe. */
	r = ds_subscribe(key_u32, DSF_INITIAL);
	if(r != OK && r != EEXIST) {
		printf("SUBSCRIBER: error in ds_subscribe: %d\n", r);
		return -1;
	}

	while(1) {
		/* Wait for a message. */
		r = sef_receive(ANY, &mess);
		if(r != OK) {
			printf("SUBSCRIBER: sef_receive failed.\n");
			return 1;
		}
		/* Only handle notifications from DS. */
		if(mess.m_source != DS_PROC_NR)
			continue;

		/* Check which one was changed. */
		r = ds_check(key, &type, NULL);
		if(r == ENOENT) {
			printf("SUBSCRIBER: the key %s was deleted.\n",
				key);
			continue;
		}
		if(r != OK) {
			printf("SUBSCRIBER: error in ds_check.\n");
			continue;
		}

		/* Retrieve the entry. */
		printf("SUBSCRIBER: key: %s, ", key);
		switch(type) {
		case DSF_TYPE_U32:
			r = ds_retrieve_u32(key, &num);
			if(r != OK)
				printf("error in ds_retrieve_u32.\n");
			printf("U32: %d\n", num);
			break;
		case DSF_TYPE_STR:
			r = ds_retrieve_str(key, string, sizeof(string)-1);
			if(r != OK)
				printf("error in ds_retrieve_str.\n");
			printf("STR: %s\n", string);
			break;
		case DSF_TYPE_MEM:
			r = ds_retrieve_mem(key, buf, &length);
			if(r != OK)
				printf("error in ds_retrieve_mem.\n");
			break;
		case DSF_TYPE_MAP:
			break;
		default:
			printf("error in type! %d\n", type);
		}
	}

	return 0;
}