#include <ncbi.h>
#include <gishlib.h>

size_t LIBCALL
str_cspn(s, list)
	CharPtr	s, list;
{
	register BytePtr
			us = (BytePtr)s,
			ulist = (BytePtr)list,
			os = (BytePtr)s;
	/* cmap[] is allocated on the stack, in case of interrupt */
	Byte	cmap[1<<(CHAR_BIT*sizeof(char))];

	Nlm_MemSet((VoidPtr)cmap, 0, sizeof(cmap));
	cmap[NULLB] = 1;
	while (*ulist != NULLB)
		cmap[*ulist++] = 1;

	while (cmap[*us++] == NULLB)
		;

	return (us - os - 1);
}
