Esempio n. 1
0
static user_t *pick_a_sucker(channel_t *c)
{
	int slot = arc4random() % MOWGLI_LIST_LENGTH(&c->members);
	chanuser_t *cu;

	cu = (chanuser_t *) mowgli_node_nth_data(&c->members, slot);
	while (cu != NULL && is_internal_client(cu->user))
	{
		slot = arc4random() % MOWGLI_LIST_LENGTH(&c->members);
		cu = (chanuser_t *) mowgli_node_nth_data(&c->members, slot);
	}

	return cu != NULL ? cu->user : NULL;
}
Esempio n. 2
0
void mowgli_formatter_format_from_argstack(char *buf, size_t bufstr, const char *fmtstr, const char *descstr, mowgli_argstack_t *stack)
{
	size_t pos = 0;
	char *i = buf;
	const char *fiter = fmtstr;

	return_if_fail(buf != NULL);
	return_if_fail(fmtstr != NULL);
	return_if_fail(descstr != NULL);

	*i = '\0';

	while (*fiter && pos <= bufstr)
	{
		int arg;
		mowgli_argstack_element_t *e;

		pos = strlen(buf);

		switch(*fiter)
		{
		case '%':
			fiter++;
			arg = atoi(fiter);
			e = mowgli_node_nth_data(&stack->stack, arg - 1);

			while (isdigit(*fiter)) fiter++;

			if (e == NULL)
			{
				arg = snprintf(i, bufstr - (i - buf), "(unknown)");
				i += arg;
				continue;
			}

			switch(e->type)
			{
			case MOWGLI_ARG_STRING:
				arg = snprintf(i, bufstr - (i - buf), "%s", e->data.string);
				i += arg;
				break;
			case MOWGLI_ARG_NUMERIC:
				arg = snprintf(i, bufstr - (i - buf), "%d", e->data.numeric);
				i += arg;
				break;
			case MOWGLI_ARG_POINTER:
				arg = snprintf(i, bufstr - (i - buf), "%p", e->data.pointer);
				i += arg;
				break;
			case MOWGLI_ARG_BOOLEAN:
				arg = snprintf(i, bufstr - (i - buf), "%s", e->data.boolean ? "TRUE" : "FALSE");
				i += arg;
				break;
			default:
				mowgli_log("unhandled type");
				break;
			}

			continue;
			break;
		default:
			*i = *fiter;
		}

		i++;
		fiter++;
	}
}