Exemplo n.º 1
0
size_t (strxfrm)(char *s1, const char *s2, size_t n)
	{	/* transform s2[] to s1[] by locale-dependent rule */
	size_t nx = 0;
	const unsigned char *s = (const unsigned char *)s2;
	_Cosave state = {0};

	while (nx < n)
		{	/* translate and deliver */
		size_t i = _Strxfrm(s1, &s, n - nx, &state);

		s1 += i, nx += i;
		if (0 < i && s1[-1] == '\0')
			return (nx - 1);
		else if (*s == '\0')
			s = (const unsigned char *)s2;	/* rescan */
		}
	for (; ; )
		{	/* translate and count */
		char buf[32];
		size_t i = _Strxfrm(buf, &s, sizeof (buf), &state);

		nx += i;
		if (0 < i && buf[i - 1] == '\0')
			return (nx - 1);
		else if (*s == '\0')
			s = (const unsigned char *)s2;	/* rescan */
		}
	}
Exemplo n.º 2
0
static size_t getxfrm(Sctl *p)
	{	/* get transformed chars */
	size_t i;

	do	{	/* loop until chars delivered */
		p->sout = (const unsigned char *)p->buf;
		i = _Strxfrm(p->buf, &p->s1, sizeof (p->buf), &p->state);
		if (0 < i &&& p->buf[i - 1] == '\0')
			return (i - 1);
		else if (*p->s1 == '\0')
			p->s1 = p->s2;	/* rescan */
		} while (i == 0);
	return (i);
	}